Pětina balíčků nabízených AI neexistuje. Útočníci je vytvoří a doplní malwarem

22. 5. 2026
Doba čtení: 7 minut

Sdílet

Hacker podává balíček
Autor: Duck.ai
AI modely při generování kódu opakovaně navrhují závislosti na balíčcích, které na npm ani PyPI neexistují. Útočníci takové názvy mohou registrovat a v některých případech je už naplnili škodlivým kódem.

Akademický výzkum šestnácti modelů ukázal, že v testovaném vzorku byla zhruba pětina navržených balíčků fiktivní a 43 procent halucinací se při opakování dotazu vracelo pokaždé. Kampaň PhantomRaven, odhalená na podzim 2025, patří mezi první velké veřejně popsané kampaně, u nichž výzkumníci identifikovali slopsquattingový vzorec.

Od překlepu přes záměnu k halucinaci

Útoky na balíčkové registry nejsou nové. U typosquattingu útočník zaregistruje balíček s názvem blízkým populární knihovně a spoléhá na lidský překlep. Registr npm proti tomu má obranu a odmítá registraci názvů příliš podobných existujícím projektům. U záměny závislostí (dependency confusion) jde o jiný mechanismus: útočník obsadí na veřejném registru název, který se shoduje s interní firemní knihovnou, a spoléhá na to, že nástroje pro správu závislostí sáhnou po veřejné verzi. Tento vektor se stal známým po incidentech u firem jako Uber a Apple v letech 2020 a 2021.

Slopsquatting přidává třetí rovinu. Chybný předpoklad nevzniká v lidském překlepu ani v konfiguraci nástrojů. Vzniká v jazykovém modelu, který nemá spolehlivé živé ověření v registru. Pokud model nebo agent takové ověření postrádá, generuje název podle naučených vzorců, nikoli podle skutečného stavu npm nebo PyPI. Termín slopsquatting v dubnu 2025 zavedl Seth Larson z Python Software Foundation jako spojení „AI slop“ a „typosquatting“.

Aikido Security ve své analýze halucinačních vzorců shrnuje výsledky studie USENIX: 38 procent halucinací jsou názvy vzniklé spojením dvou reálných balíčků do jednoho neexistujícího. Například jscodeshift a react-codemod se spojí v react-codeshift. Třináct procent připomínalo překlepy existujících knihoven a 51 procent jsou čistě vymyšlené názvy. Pro registr takový balíček nevypadá jako napodobenina. Vypadá jako další drobná knihovna v ekosystému, který takových knihoven produkuje tisíce.

Pětina závislostí neexistuje

Jak masivní je problém, změřil výzkum „We Have a Package for You!“ od týmu z University of Texas at San Antonio, Virginia Tech a University of Oklahoma. Práce vyšla jako preprint na arXiv v červnu 2024 a v roce 2025 byla přijata na USENIX Security. Autoři otestovali šestnáct modelů pro generování kódu na 576 000 vzorcích v Pythonu a JavaScriptu. V průměru 19,7 procenta navržených balíčků neexistovalo. To odpovídá 205 474 unikátním halucinovaným názvům.

Otevřené modely halucinovaly výrazně častěji: 21,7 procenta závislostí bylo fiktivních, u komerčních modelů 5,2 procenta. Nejhůře dopadly varianty CodeLlama, kde míra halucinací přesáhla třetinu. GPT-4 Turbo se držel na 3,6 procentech. Nezávislá studie Importing Phantoms (Krishna et al., 2025) potvrdila stejný trend s rozpětím od 0,22 procenta u nejlépe vyladěných modelů po 46 procent u slabších.

Zásadní zjištění se ale týká opakovatelnosti. Při opakování stejného dotazu se 43 procent halucinovaných názvů vrátilo pokaždé, v každém z deseti běhů. Celkem 58 procent se opakovalo alespoň dvakrát. Pouze 39 procent halucinací bylo jednorázových. To dává útoku ekonomiku. Útočník nemusí mít přístup k soukromým dotazům vývojářů. Stačí generovat typické vývojářské dotazy, sledovat často se opakující fiktivní názvy a zaregistrovat je. Socket k tomu v podrobné analýze halucinačních vzorců dodává: „Tato konzistence dělá ze slopsquattingu životaschopnější hrozbu, než by se čekalo.“

Bezpečnostní výzkumník Bar Lanyado z Lasso Security v experimentu zveřejněném v březnu 2024 vytvořil na PyPI prázdný balíček huggingface-cli, název, který AI opakovaně halucinovala místo správného huggingface_hub. Za tři měsíce zaznamenal přes 30 000 stažení. Alibaba dokonce halucinovaný příkaz přejala do dokumentace jednoho ze svých repozitářů. Experiment neobsahoval žádný škodlivý kód. Právě proto je užitečný: odděluje otázku záměru od otázky dosažitelnosti.

PhantomRaven: z laboratoře do praxe

Přelom přišel v říjnu 2025, kdy Koi Security přinesla první analýzu kampaně PhantomRaven. Koi Security výslovně spojila názvy balíčků v kampani se slopsquattingovým vzorcem. Kampaň od srpna publikovala na npm 126 škodlivých balíčků, které dohromady nasbíraly přes 86 000 instalací. Útočník u řady z nich volil názvy odpovídající vzorcům AI halucinací: například unused-imports, název, který modely doporučují místo skutečného eslint-plugin-unused-imports.

Zda útočník záměrně sbíral halucinované názvy z výstupů modelů, nebo volil věrohodně znějící zkráceniny nezávisle na AI, z dostupných informací nelze s jistotou prokázat. Efekt je ale stejný: balíček při instalaci spouštěl skript kradoucí npm tokeny, přihlašovací údaje ke GitHubu a tajemství z CI/CD pipeline.

Volba cíle není náhodná. Vývojářské prostředí často obsahuje oprávnění, která běžná produkční aplikace nemá: build server může podepisovat artefakty, publikovat balíčky nebo číst tajemství pro nasazení. Sonatype v kvartálním přehledu malwaru za Q1 2025 uvádí, že 56 procent škodlivých balíčků cílilo na exfiltraci dat, tedy krádež citlivých informací ze zasažených systémů.

PhantomRaven navíc kombinoval slopsquatting s technikou vzdálených dynamických závislostí (Remote Dynamic Dependencies). Balíčky samy o sobě vypadaly čistě. Škodlivý kód ale npm při instalaci stáhl z externího serveru útočníka, protože ho package.json odkazoval jako závislost přes HTTP URL. Statické skenery, které analyzují jen obsah registru, tak hrozbu nezachytily. Koi Security k tomu poznamenala, že na npm žádný bezpečnostní nástroj tyto URL závislosti nenásleduje a neanalyzuje.

Kampaň pokračovala i po prvním odhalení. Endor Labs v březnu 2026 identifikoval další tři vlny PhantomRaven s 88 novými balíčky. Osmdesát jedna z nich bylo na npm stále dostupných. Útočník rotoval účty a domény, ale jádro škodlivého kódu zůstávalo prakticky totožné: 257 z 259 řádků se nezměnilo. Endor Labs později doplnil, že se autor balíčků ozval a tvrdil, že nešlo o škodlivý záměr. Klasifikaci balíčků jako malware to ale nezměnilo. Průběh kampaně nebyla sofistikovaný. Útočník používal sekvenční e-mailové adresy a snadno dohledatelnou infrastrukturu. Účinnost PhantomRaven neplynula z propracovanosti, ale z kombinace slopsquattingu a vzdálených závislostí, která vytvořila slepé místo pro stávající nástroje.

Malware na registrech: různé zdroje, stejný trend

Slopsquatting přibývá v prostředí, kde objem škodlivého kódu na open-source registrech prudce roste. Čísla ale pocházejí z různých databází a metodik a vyplatí se je držet odděleně. Zpráva Sonatype State of the Software Supply Chain 2026 uvádí, že během roku 2025 firma identifikovala přes 454 600 nových škodlivých balíčků. Celkový počet dosud známého malwaru tak přesáhl 1,233 milionu napříč npm, PyPI, Maven Central, NuGet a Hugging Face. Přes 99 procent připadlo na npm. ReversingLabs ve své výroční zprávě pracuje s vlastní detekcí a uvádí 73procentní nárůst škodlivých balíčků meziročně. Sonatype ve vlastním oznámení mluví o 75 procentech.

Sonatype přitom slopsquatting nezasazuje jen jako kuriozitu. V části věnované AI agentům analyzovala 36 870 doporučení pro aktualizaci závislostí a zjistila, že 27,76 procenta odkazovalo na neexistující verze komponent, včetně více než deseti tisíc vymyšlených vydání balíčků. Nejde přesně o stejný jev jako halucinace celých názvů. Je to ale stejná technická slabina: model bez ověření v aktuálním registru generuje věrohodné, ale neexistující odkazy na softwarové komponenty.

Obrana musí začít před instalací

Riziko slopsquattingu roste spolu s tím, jak se AI nástroje přesouvají od našeptávání k agentickému provádění změn. Sonatype ve své zprávě cituje výzkum IDC, podle něhož vývojáři přijímají průměrně 39 procent AI-generovaného kódu bez jakékoliv úpravy. Fenomén vibe codingu tento trend posiluje: vývojář zadává pokyny a AI generuje kompletní kód včetně závislostí. Případ react-codeshift, který v lednu 2026 zachytil Charlie Eriksen z Aikido Security, ukazuje, kam to vede.

Název, který žádný člověk nevymyslel a nikdo na npm nezaregistroval, se rozšířil do 237 repozitářů přes agentické skripty, které ho automaticky přebíraly z jiných AI-generovaných souborů. Celý řetězec od halucinace přes šíření po potenciální instalaci proběhl bez lidského zásahu.

Klasické příkazy typu npm audit nebo pip-audit slopsquatting neřeší. Audit známých zranitelností pomůže, pokud balíček už má záznam v databázi. Neodpoví na otázku, zda nová závislost vůbec má být v projektu a zda její název nevznikl jako halucinace modelu. Praktická obrana začíná politikou pro nové závislosti. Každý nový balíček přidaný AI agentem má projít stejnou kontrolou jako balíček přidaný člověkem: existence v oficiálním registru, historie vydání, návaznost na dokumentaci projektu a kontrola instalačních skriptů. Snyk ve svých doporučeních ke zmírnění rizika slopsquattingu klade důraz na SBOM, ověřování podpisů a kontrolních součtů a kontrolu podezřelých názvů. U interních projektů dává smysl povolovací seznam nebo interní zrcadlo registru.

Školení Zabbix

Aikido Security vytvořila open-source nástroj SafeChain, lokální proxy, která při npm install nebo pip install kontroluje balíčky oproti databázi známého malwaru ještě před stažením. Sonatype nabízí komerční Nexus Repository Firewall, který v prvním čtvrtletí 2025 zablokoval přes 20 900 pokusů o instalaci škodlivých balíčků. Trend Micro v analýze chování pokročilých kódovacích agentů ukázala, že ani validace v reálném čase nedokáže eliminovat všechny případy.

Pro týmy, které už používají Copilot, Claude Code, Cursor nebo Codex, z toho plyne jedno pravidlo: AI smí závislost navrhnout, ale o její existenci a důvěryhodnosti rozhoduje registr, dokumentace upstream projektu a interní bezpečnostní politika. Pokud agent sahá do package.json, requirements.txt, pyproject.toml nebo lockfile, musí to být viditelná změna v revizi kódu. Název balíčku v době agentického vývoje přestal být nudným detailem instalačního příkazu. Je to bezpečnostní rozhodnutí.

Autor článku

Fanoušek open source, všech smart věcí, trvale udržitelného rozvoje a férové konkurence bez oligopolů.