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.

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 a .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
- Záznam CVE-2026-84809, CVE-2026-84810 a CVE-2026-84811, registrátor VulnCheck, 2. září 2026
- Odpovídající hlášení v databázi GitHubu
- Hlášení #531 v AI-Infra-Guard a zdrojové kódy pod značkami 4.5.1, 4.5.2 a 4.6.0
- Balíček aig-skill-scan na PyPI