Přeskočit na obsah
Bezpečnost 4 min čtení

Tři skenery skillů pro AI agenty dostaly čísla CVE za přeskočený spustitelný kód

AgentVerus Scanner, skill-scan z Tencent AI-Infra-Guard a claude-skill-antivirus dostaly 2. září tři čísla CVE. Všechny tři mají posoudit, jestli je cizí skill pro agenta bezpečný, a všechny tři vynechávají z rozboru soubory, které skill při běhu spustí. U Tencentu se oprava jednou vydala a v dalším vydání zase zmizela.

Rentgenový skener zavazadel s dopravníkovým pásem
Rentgen na zavazadla ukáže jen to, na co se dívá. Snímek je ilustrační a s popisovanými nástroji nesouvisí. Foto: Mirddincom, Wikimedia Commons (CC BY-SA 4.0)

Skill je složka, kterou si agentní nástroj přibere ke své práci. Uvnitř je soubor SKILL.md s pokyny pro model a vedle něj bývají skripty, které se mají opravdu spustit. Rozšířily se rychle – Hugging Face zakládá agentům skill rovnou při instalaci svého CLI – a s nimi i nástroje, které mají cizí skill před instalací prověřit.

Tři takové nástroje dostaly 2. září vlastní čísla CVE. Přidělil je registrátor VulnCheck, všechny tři nesou stejnou kategorii slabiny CWE-693, tedy selhání ochranného mechanismu, a všechny tři vznikly z hlášení jednoho člověka podepsaného jako nedlir. Podstata je pokaždé stejná: skener projde skill, část souborů si ani nepřečte a přesto vydá verdikt, že je balíček v pořádku.

Devět přípon, mezi nimi žádná zkompilovaná

AgentVerus Scanner udělal z rozboru souborů vedle manifestu hlavní novinku verze 0.8.0: podle vlastního popisu koreluje deklarovaný účel skillu s kódem, který je s ním zabalený. Seznam přípon, které k tomu čte, má ale ve zdrojovém kódu devět položek – .js, .jsx, .ts, .tsx, .mjs, .cjs, .py, .sh.bash. Soubor .pyc, tedy zkompilovaný Python, mezi nimi není. Skener ho při procházení složky uvidí, ale nikdy neotevře.

Na tom stojí CVE-2026-84811. Vedle neškodného zdrojového souboru může skill nést i zkompilovanou verzi, kterou Python spustí při importu, aniž se do toho zdroje podívá. Rozbor pak nemá co hlásit a balíček projde. Hlášení leží v evidenci projektu od 10. srpna a je pořád otevřené; hlavní větev má seznam přípon beze změny a poslední vydání na npm nese číslo 0.8.1 z 24. června.

Verdikt sto ze sta nad jediným souborem

U nástroje claude-skill-antivirus je hranice jinde. Když mu zadáte místní složku se skillem, přečte z ní jen SKILL.md a tenhle jediný soubor pak předá všem devíti kontrolním strojům, kterými se chlubí. Složka se skripty se neprochází vůbec. Stejně se chová i při zadání adresy na GitHubu; u zabaleného archivu si naproti tomu přečte všechny položky.

Hodnocení začíná na stu bodech a za každý nález se odečítá – třicet za kritický, dvacet za vážný, deset a pět za mírnější. Když se nenajde nic, zůstane sto ze sta a stupeň rizika SAFE. Přesně to popisuje CVE-2026-84810. I tohle hlášení čeká od 10. srpna; balíček na npm má verzi 2.1.3 a od 3. dubna se nezměnil.

U Tencentu se oprava vydala a pak zmizela

Třetí případ je jiný, protože tam někdo zareagoval. Součást skill-scan platformy AI-Infra-Guard od Tencentu je agentní skener: jazykovému modelu podá nástroje na procházení složky a čtení souborů a nechá ho, ať hrozbu najde sám. Jenže nástroj na výpis stromu měl napevno zapsané dvě vylučovací množiny – složky včetně __pycache__ a přípony .pyc, .pyo, .pyd. Model tedy ty soubory nedostal ani do seznamu. Totéž měl i předběžný průchod před rozborem.

Po hlášení z 10. srpna projekt 13. srpna obě množiny vyprázdnil a doplnil ke kódu komentář, proč: zkompilovaný soubor se spustí nezávisle na zdroji, takže by čistý zdroj vedle škodlivého překladu dostal falešný verdikt. Vydání 4.5.2 ze 17. srpna to má v seznamu změn jako novou schopnost.

Ve vydání 4.6.0 z 26. srpna, tedy v tom zatím posledním, jsou obě množiny zpátky ve stejné podobě jako před opravou – i s __pycache__ a s příponami zkompilovaného Pythonu, a to v obou dotčených souborech. Proto uvádí CVE-2026-84809 jako dotčenou i verzi 4.6.0. Hlášení, ze kterého srpnová oprava vzešla, bylo přitom 24. srpna uzavřeno jako vyřízené.

Ohlásil to znovu někdo jiný. Druhý uživatel založil 2. září dvě nová hlášení, jedno na přeskakované .pyc a druhé na přeskakované složky, obě v čínštině a bez odkazu na to srpnové. Uzavřená byla druhý den. Hlavní větev teď volí třetí postup: soubory se už neskrývají, ale předávají se modelu označené příznakem, a předběžný průchod navíc kontroluje hlavičku souboru, aby poznal zkompilovaný Python i pod jinou příponou.

Co dostane ten, kdo se řídí návodem

Návod k samostatnému skeneru radí pip install aig-skill-scan. Balíček aig-skill-scan má na indexu nejvyšší verzi 0.2.1, nahranou 7. července. Uvnitř toho kola jsou obě vylučovací množiny v původní podobě. Ani jedna z obou oprav se tedy do vydaného balíčku nikdy nedostala – rozdíl mezi opraveným repozitářem a tím, co si člověk nainstaluje, u nástrojů kolem agentů není ojedinělý.

V evidenci to skoro není vidět

Známku závažnosti nese každý ze tří záznamů dvojí: 7,1 podle metodiky CVSS 4.0, tedy vysoká, a 6,5 podle starší 3.1, tedy střední. Rozdíl nedělá jiný rozbor, ale jiné počítání téhož vektoru; obě známky pocházejí od téhož registrátora. Ve výpisu, který používá starší metodiku, tak tři záznamy vypadají o stupeň klidněji.

Druhá věc je zařazení. V databázi hlášení GitHubu jsou všechny tři vedené jako nekontrolované a nemají uvedený jediný dotčený balíček, přestože dva ze tří nástrojů na npm jsou. Nástroj, který hlídá závislosti projektu, tedy na ně neupozorní. Kdo si skener nainstaloval, se o jeho slepém místě dozví jedině tak, že si záznam CVE najde sám.

Co s tím

Praktický závěr je úzký a nepříjemný. Verdikt „bezpečný“ od těchhle nástrojů znamená, že se nenašlo nic v té části skillu, na kterou se skener dívá – ne že skill nic neprovede. U cizího balíčku se proto vyplatí podívat se, co v něm vedle SKILL.md vlastně leží, a přítomnost zkompilovaných souborů brát jako důvod k opatrnosti samu o sobě: ve zdrojovém stromu, který má nést jen text a skripty, nemají co dělat.

A ještě jedno číslo k tomu, jak se vada u Tencentu vrátila. Byla nahlášená, opravená, vydaná i uzavřená jako vyřízená – a přesto ji příští vydání přineslo zpátky. Než si toho někdo všiml a založil nové hlášení, uplynulo sedm dní. Po celou tu dobu byla nejčerstvější verze zase ta, o které seznam změn dva týdny předtím psal, že tuhle díru zavírá.

Zdroje

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

  1. Bezpečnost

    CowAgent má dvě nová CVE kvůli výstupu příkazů a sdílenému prohlížeči

    Dva záznamy CVE zveřejněné 2. září popisují odmítnutí služby v agentním nástroji CowAgent. Nástroj Bash hromadí celý výstup příkazu před jeho zkrácením, zatímco…

  2. Bezpečnost

    Záznam CVE popsal chybu FaceFusionu až dva měsíce po její opravě

    FaceFusion do verze 3.6.1 skládal cestu k souboru úlohy přímo z názvu, který přijalo rozhraní Gradio bez přihlášení. Cizí klient tak mohl zapsat JSON mimo pracovní…

  3. Bezpečnost

    Codex spouštěl program z nastavení cizího repozitáře mimo vlastní sandbox

    OpenAI zveřejnila 1. září 2026 čtyři záznamy CVE ke svému agentnímu nástroji Codex. Tři z nich stojí na témže předpokladu: repozitář si s sebou nese vlastní soubor .git…

  4. Bezpečnost

    MLflow ve verzích 2.1.0 až 3.14.x ignoroval zákaz pickle u modelů statsmodels

    Bezpečnostní volba v MLflow měla zastavit načítání modelů uložených pomocí pickle, integrace statsmodels ji ale nekontrolovala. Upravený modelový artefakt proto mohl při…