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

HiddenLayer popsal šest způsobů, jak v Mistral Vibe obejít schvalování příkazů

Bezpečnostní firma HiddenLayer zveřejnila 11. září šest záznamů CVE k nástroji Mistral Vibe, agentovi pro práci s kódem z příkazové řádky. Všechny popisují touž potíž z jiné strany: Vibe se rozhoduje, jestli se smí příkaz spustit bez dotazu, nad textem, který si sám poskládal ze syntaktického stromu, kdežto vykoná ho shell. Čtyři z šesti mají závažnost 10 z 10.

Bezpečnostní firma HiddenLayer vydala 11. září 2026 šest hlášení k nástroji Mistral Vibe. Je to agent pro práci s kódem, který běží v terminálu, sám si čte soubory v projektu a sám spouští příkazy. Aby u každého z nich neobtěžoval otázkou, vede si seznam těch, které smí provést rovnou. Právě ten seznam je v hlášeních terčem.

Obrazovka rozdělená na mřížku oken terminálu s běžícími textovými výpisy
Obrazovka s několika okny terminálu a běžícími výpisy. Foto: crucially, Flickr (CC BY 2.0)

Kontroluje se text, vykonává se něco jiného

Vibe si příkaz před spuštěním rozebere knihovnou tree-sitter a z uzlů toho stromu poskládá zpátky podobu, nad kterou se pak ptá: je tohle na povolovacím seznamu a nesahá to mimo pracovní složku? Když obojí vyjde příznivě, příkaz jde do shellu bez dialogu.

Mezi tou poskládanou podobou a tím, co nakonec provede bash, je ale místo na rozdíl. A každé z šesti hlášení ukazuje jiný způsob, jak se do téhle skuliny vejít.

  • CVE-2026-87983 – uvozovky kolem absolutní cesty zůstanou součástí řetězce, který se porovnává s hranicí pracovní složky. Python takový řetězec nepovažuje za absolutní cestu, protože nezačíná lomítkem; bash uvozovky zahodí a předá skutečnou cestu. Závažnost 9,2, zavedeno ve verzi 2.6.0.
  • CVE-2026-87984 – cíl přesměrování výstupu se do kontroly cest nepočítá, takže povolený příkaz smí založit nebo přepsat soubor mimo složku. Závažnost 9,3, od verze 1.3.4.
  • CVE-2026-87985 – argument zapsaný takzvaným ANSI-C uvozováním má v syntaktickém stromu vlastní druh uzlu, který se do skládané podoby nepřebírá. Kontrola ho tedy nevidí, shell ano. Závažnost 10, od verze 2.9.0.
  • CVE-2026-87986 – zápis, kterému rozbor nerozumí, skončí v chybovém uzlu a vypadne z posuzované podoby. Bash nebo zsh ho přitom vykoná normálně. Závažnost 10, od verze 1.3.4.
  • CVE-2026-87987 – přiřazení proměnných prostředí, které stojí před povoleným příkazem, se z kontroly vyjímá. U programů, jejichž chování se proměnnou prostředí řídí – hlášení jmenuje Git –, to stačí ke spuštění cizího kódu. Závažnost 10, od verze 2.6.0.
  • CVE-2026-87988 – seznam příkazů považovaných za čtecí se rozrostl, aniž se stejně rozšířila množina těch, u kterých se prohlížejí cesty v argumentech. Závažnost 10, podle hlášení od verze 2.15.0.

Známky závažnosti jsou z metodiky CVSS 4.0 a pocházejí od nálezce, ne z nezávislého přepočtu. Pod všemi šesti stránkami je podepsaný Esteban Tonglet z HiddenLayeru.

Co z toho plyne pro uživatele

Vibe má v README větu „Safety First“ a za ní vysvětlení, že nástroj schvaluje spouštění nástrojů. Nabízí čtyři profily agenta: ask se ptá na všechno, plan je jen pro čtení, výchozí accept-edits schvaluje sám úpravy souborů a auto-approve schvaluje sám všechno s poznámkou, ať se používá opatrně. K tomu má systém důvěryhodných složek, aby se agent nespustil kdekoli.

Hlášení míří pod tuhle vrstvu. Dotaz, který se neobjeví, nemůže uživatel zamítnout, a přísnější profil agenta na tom nic nemění, protože rozhodnutí padne dřív. Čtecí varianta znamená vydané soubory, na které proces dosáhne – hlášení jmenují přihlašovací údaje, klíče SSH, tokeny k rozhraním a konfiguraci. Zápisová varianta znamená změněný soubor v projektu nebo v nastavení.

Ke spuštění je potřeba, aby agent takový příkaz dostal k provedení. Tím se okruh dotčených zužuje na toho, kdo Vibe pouští nad cizím zadáním, cizím repozitářem nebo obsahem staženým z webu. Naopak se nezužuje na nic menšího než celý domovský adresář: hranicí měla být pracovní složka a právě ta v popsaných případech nedrží.

Opravená verze v záznamech chybí

U všech šesti záznamů v databázi GitHubu není vyplněný ani jeden dotčený balíček a ani jedna opravená verze. Pole, ze kterého Dependabot pozná, že má komu co hlásit, tedy zůstalo prázdné. Vlastní evidence hlášení v repozitáři projektu je prázdná taky a soubor SECURITY.md v něm není; dotaz na něj vrací 404.

Sám nástroj se instaluje jako balíček mistral-vibe. Poslední verze 2.25.3 vyšla 11. září ve 13.06 UTC, tedy zhruba dvě a půl hodiny předtím, než se hlášení objevila v databázi GitHubu (15.32 UTC). V jejím seznamu změn stojí větvení konverzace, práce s odkazy na soubory a oprava práv k záznamům sezení. O povolovacím seznamu ani slovo.

Co je v dnešním kódu vidět

Rozhodování o oprávnění sedí v souboru vibe/core/tools/builtins/bash.py. Stáhl jsem ten soubor z balíčků verzí 2.25.1, 2.25.2 a 2.25.3 a porovnal ho s hlavní větví repozitáře. Všechny čtyři podoby jsou shodné do posledního bajtu, shodně 20 670 B. Poslední commit, který na ten soubor sáhl, je z 20. srpna a patří k vydání 2.24.3.

Výčet druhů uzlů, ze kterých se skládá posuzovaná podoba příkazu, obsahuje pět položek: command_name, word, string, raw_stringconcatenation. Uzel pro ANSI-C uvozování mezi nimi není, a to ani v hlavní větvi – řetězec ansi_c_string se v celém souboru nevyskytuje ani jednou. Nález CVE-2026-87985 tedy v kódu k datu vydání tohoto textu zůstává.

U posledního z šesti hlášení vyšlo najevo něco jiného. Seznam čtecích příkazů má dnes 37 položek, od basename po which, a množina, u jejíchž příkazů se prohlížejí cesty, je sjednocením osmi příkazů měnících soubory právě s tímhle seznamem. Prošel jsem starší balíčky a to sjednocení tam nebylo vždycky: verze 2.19.1 z 9. července má obě množiny oddělené, verze 2.20.0 už sjednocené. V seznamu změn k 2.20.0 tomu odpovídá jediná položka, „Hardened bash tool permissions and cross-platform shell handling“, tedy zpřísnění oprávnění bez zmínky o čemkoli hlášeném.

Podle nás to vypadá, že tenhle nález byl zavřený zhruba dva měsíce před zveřejněním, jen se to nikde neřeklo. Jistotu z toho čtení udělat nejde – neověřoval jsem to spuštěním nástroje, a jestli změna pokrývá celý popsaný případ, ukáže až pokus. Za doložené považujeme to, co je vidět: kdy se obě množiny spojily a že u zbylých pěti nálezů se dotčená místa v kódu od srpna nezměnila.

Šest hlášení k jednomu vývojářskému nástroji v jeden den není v oboru novinka; loni v červenci vydal Microsoft za jediný den šest záznamů pro Visual Studio Code a Copilot. Rozdíl je v tom, že tam u každého záznamu stála verze, po kterou problém platí. Tady musí zájemce sáhnout do kódu.

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

    Google uvádí u chyby Agent Studia dvě data pro dotčené aplikace

    Chyba v automaticky vytvořeném proxy rozhraní aplikací z Google Agent Studia mohla nepřihlášenému útočníkovi vydat přístupový token výchozího servisního účtu Compute…

  2. Bezpečnost

    Knihovna Transformers 5.17 přestala ukládat cizí kód před souhlasem

    Knihovna Transformers uměla převzít z modelového repozitáře vlastní způsob generování. Soubor s cizím kódem však stáhla a uložila do mezipaměti dřív, než se uživatele…

  3. Bezpečnost

    Poslední požadavek v dávce dostal ve vLLM odpověď toho prvního

    Hlášení CVE-2026-73558 z 8. září popisuje přetečení 32bitového indexu ve výpočetním jádře serveru vLLM. Sejde-li se v jedné dávce dost tokenů, sáhne výpočet pro poslední…

  4. Bezpečnost

    Přihlášený uživatel OpenShift AI může načíst společné klíče NVIDIA

    Red Hat zveřejnil 7. září zranitelnost CVE-2026-86332 se skóre 6,5. Přihlášený uživatel dashboardu OpenShift AI může bez správcovského oprávnění načíst společný klíč…