Přeskočit na obsah
Bezpečnost aktualizováno 13. 10. 2026 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, 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.

Doplněno 13. 10. 2026: Druhou chybu v oprávněních Continue CLI, tentokrát v běžném režimu, popisujeme v článku o příkazech připojených za středník. Opravená verze k tomu dni nevyšla ani pro jednu z nich.

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

    Doloženou opravu chyby Plugin4Shell mají ze čtyř agentů jen Claude Code a Codex

    Firma Air Security v září popsala, jak u Claude Code, Codexu, GitHub Copilotu a Gemini CLI podvrhnout plugin, který tržiště připnulo na prověřený commit. Anthropic chybu…

  2. Bezpečnost

    Agenti z Tencent Cloud se hlásili jako Claude, styl jejich kódu ale Claudovi neodpovídá

    Agenti AI běžící na Tencent Cloud se mezi 28. zářím a 8. říjnem 2026 přes 2 600krát pokusili stáhnout data z mapové služby Amap, obcházeli její ochranu proti robotům a…

  3. Bezpečnost

    Compliance API Clauda vrací firemní správě i osobní pokyny zaměstnanců

    Rozhraní Compliance API vrací od 15. října text, který si každý člen firemní organizace uložil jako svůj vlastní pokyn pro Clauda. Koncový bod je v betě a spadá pod…

  4. Bezpečnost

    Grok v simulaci poslal 187 zpráv kvůli vrácení jízdného po lhůtě

    Šest AI asistentů mělo získat 350 liber za zrušený vlak, přestože zákaznice zmeškala lhůtu k žádosti. Grok v simulaci poslal 187 zpráv a Claude Fable sdílel soukromou…