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

V bezobslužném režimu zastaví Continue CLI ničivý příkaz jen podle neúplného seznamu

Continue CLI umí běžet bez dohledu a v tom režimu spouští příkazy shellu bez ptaní. Jedinou tvrdou zábranou zůstává výčet nebezpečných cest: zná kořen, domovský adresář a čtyři systémové složky, ale /home, /root, /var, /opt ani /srv v něm nejsou. Hlášení CVE-2026-76072 vyšlo 24. srpna 2026 a opravenou verzi projekt zatím nevydal.

Starší textový terminál s klávesnicí
Continue CLI posílá příkazy rovnou do shellu; o tom, který projde, rozhoduje jediná funkce. Foto: ajmexico, Flickr (CC BY 2.0)

Continue je otevřený asistent pro psaní kódu. Vedle rozšíření do editoru má vlastní příkazovou řádku, která se spouští jako cn, a ta zná tři režimy. V běžném se před zápisem do souboru i před příkazem shellu ptá. Bezobslužný běh (cn -p) se nemá koho zeptat a režim --auto má povolené všechno. Právě těch dvou se týká zranitelnost CVE-2026-76072, kterou 24. srpna 2026 zveřejnila společnost VulnCheck.

Tvrdě zakázat příkaz umí jediné místo

Oprávnění drží Continue ve třech stupních: allow znamená spustit bez ptaní, ask zeptat se a exclude nástroj agentovi vůbec neukázat. Výchozí politiky v souboru defaultPolicies.ts dávají nástroji Bash v běžném běhu ask, v bezobslužném allow. Režim --auto je stručnější a nastaví allow úplně na všechno.

Nad tím stojí druhá vrstva. Než se příkaz spustí, posoudí ho funkce evaluateTerminalCommandSecurity, a podle souboru permissionChecker.ts se povolení přepíše na exclude jedině tehdy, když posudek zní disabled. U každého jiného posudku vyhraje nastavené povolení. Když je tedy Bash na allow, zastaví příkaz jedině verdikt disabled.

Ve výčtu nebezpečných cest je osm položek

Ten verdikt vydává funkce isCriticalCommand v souboru evaluateTerminalCommandSecurity.ts. U mazání chce dvě věci naráz: přepínač, který je zároveň rekurzivní a vynucený, a k tomu cestu z výčtu nebezpečných. Ten výčet obsahuje /, /*, ~, ~/*, /usr, /etc, /bin, /sbin a cesty začínající čtyřmi posledními. Přečetli jsme si ho v hlavní větvi a od popisu v hlášení se neliší.

Nejsou v něm /home, /root, /var, /opt ani /srv. Rekurzivní vynucené smazání kterékoli z nich podmínku nesplní, verdikt disabled nepadne a bezobslužný běh takový příkaz spustí bez ptaní.

Příkaz find s přepínačem -delete dopadne podobně. Z výčtu bezpečných příkazů vypadne, jenže skončí ve stupni „vyžaduje povolení“ – a to povolení v bezobslužném běhu má. Nástroje shred, wipefs, truncatepkexec funkce neřeší vůbec; v celém souboru o 1 241 řádcích se ani jednou neobjeví.

Proměnná se cestou k posudku vypaří

Druhá mezera je v rozboru příkazové řádky. Continue ji rozebírá knihovnou shell-quote, jenže ta bez předaného prostředí nahradí odkaz na proměnnou prázdným řetězcem. Vyzkoušeli jsme si to v samostatně nainstalované verzi 1.10.0: z řádku, který rekurzivně maže obsah proměnné $HOME, vyjdou tři části a poslední z nich je prázdná. Nebezpečná cesta mezi nimi tím pádem není. Příkaz se pak předává shellu a ten si proměnnou dosadí zpátky.

Cizí text si agent přinese sám

Aby na tom záleželo, musí model k napsání takového příkazu něco přimět. Proto je v hlášení řeč i o nástroji Fetch: ve výchozích politikách má allow, a to i v běžném režimu, s poznámkou autorů, že úplně jen ke čtení není. Agent tedy sám stahuje stránky, čte soubory v repozitáři, texty hlášení i výstup serverů MCP. Že pokyn schovaný v takovém obsahu dokáže agenta zmást, jsme popisovali u útoku, který mu místo pokynů podvrhne fakta.

Co funkce naopak zastaví

Seznam zakázaného krátký není. Funkce tvrdě blokuje mkfs a všechno, co tím jménem začíná, dále sudo, su, doas, runas a další nástroje na zvýšení oprávnění, zápis pomocí dd na zařízení v /dev, práva 777 nebo bit setuid u chmod, převod vlastnictví na roota, zavádění jaderných modulů, změny pravidel firewallu, eval, exec a na Windows format, cipher i rekurzivní tiché mazání ze systémového disku. Rekurzivní smazání kořene nebo domovského adresáře zapsaného vlnovkou zastaví taky. Potíž není v tom, že by se na ničivé příkazy nemyslelo; je v tom, že se u mazání všechno opírá o jmenovitý výčet cest.

Nahlášeno v červnu, soubor beze změny od loňska

Nálezce George Chen v hlášení číslo 13001 píše, že věc poslal 13. června 2026 e-mailem a nedostal odpověď; veřejně ji zapsal 19. července 2026. Hlášení je otevřené dosud a oba komentáře pod ním jsou od lidí mimo projekt. Poslední změna posuzovacího souboru je přitom z 30. října 2025 a byla to oprava jiného obcházení, tehdy přes zalomení řádku.

Hlídač závislostí na to neupozorní

Záznam v databázi GitHubu je typu unreviewed a nemá vyplněný ani jeden dotčený balíček, takže Dependabot na něj neupozorní. Čísla závažnosti jsou dvě, každé z jiné verze stupnice: VulnCheck uvádí 8,3 podle CVSS 4.0, databáze GitHubu 7,4 podle CVSS 3.1. Dotčené jsou verze do 1.5.47 včetně, a 1.5.47 je zároveň poslední, kterou projekt na npm vydal, 18. června 2026. Za měsíc do 24. srpna eviduje npm u toho balíčku 15 149 stažení.

Co s tím zatím jde dělat

V bezobslužném běhu se terminál vypnout dá. Přepínače --exclude--ask mají podle dokumentace i podle kódu vyšší přednost než výchozí politiky, takže cn -p --exclude Bash agentovi shell sebere. Kdo ho potřebuje, může povolení zúžit vzorem na argumenty. V režimu --auto tahle cesta ale nevede nikam: plánovací i automatický režim jsou podle téže stránky absolutní a přepínače i soubor permissions.yaml ignorují. Zbývá pustit agenta v kontejneru nebo na stroji, o jehož data nejde.

Za pozornost stojí ještě jeden rozpor. Dokumentace píše, že Bash má výchozí stupeň ask a že se v bezobslužném režimu nástroje se stupněm ask vylučují, protože je nemá kdo schválit. Ve výchozích politikách má ale Bash v témž režimu allow. Kdo čte jen dokumentaci, čeká opak toho, co dělá kód.

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

    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íč…

  2. Bezpečnost

    Hlídač agentů v API OpenAI umí konverzaci zastavit, hotové kroky ale nevrátí zpět

    Spolu s modelem GPT-6 Astra ohlásilo OpenAI 3. září 2026 systém, který na pozadí čte uvažování agenta a při podezření na nezamýšlený přenos dat nebo destruktivní zásah…

  3. Bezpečnost

    Dynamicky sestavený Bifrost mohl bez přihlášení spustit modul z webu

    Správní rozhraní AI brány Bifrost před verzí 2.0.0 přijímalo od nepřihlášeného volajícího internetovou adresu vlastního zásuvného modulu. V dynamickém sestavení mohl…

  4. Bezpečnost

    Souběžné načtení dvou vektorů promptu obešlo ve vLLM pojistku proti loňské díře

    Záznam CVE-2026-73557 popisuje, že pojistka, kterou vLLM přidal v prosinci 2025 proti chybě CVE-2025-62164, stála na přepínači společném pro celý proces. Když server…