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.

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, truncate a pkexec 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 a --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.