Continue CLI po trvalém schválení příkazu spustí bez ptaní i to, co stojí za středníkem
Kdo v Continue CLI u příkazu shellu zvolí „Continue + don't ask again“, povolí natrvalo každý příkaz, který začíná stejným slovem, i s tím, co za ním stojí po středníku, za && nebo za svislítkem. Zranitelnost CVE-2026-109560 zveřejnila 12. října 2026 společnost VulnCheck a poslední vydání nástroje je z 18. června.

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. V běžném režimu se před každým příkazem shellu zeptá, jestli ho smí spustit, a mezi odpověďmi nabídne i „Continue + don't ask again“: spustit a příště se už neptat. Na téhle volbě stojí zranitelnost CVE-2026-109560, kterou 12. října 2026 zveřejnila společnost VulnCheck. Podle CVSS 4.0 jí přidělila 7,7 bodu z 10.
Uložené pravidlo si pamatuje jen první slovo
Co se po té volbě uloží, určuje funkce generatePolicyRule v souboru policyWriter.ts. Z příkazu vezme část před prvním středníkem, ampersandem nebo svislítkem, z ní první slovo a přidá k němu hvězdičku. Ze schváleného git status tak vznikne pravidlo Bash(git*) a zapíše se mezi povolené do souboru ~/.continue/permissions.yaml.
S tímhle pravidlem pak porovnává každý další příkaz funkce matchesToolPattern v permissionChecker.ts. Hvězdičku přeloží na regulární výraz pro „cokoli“ a zkouší ho proti celému řetězci. Rozdělit příkaz na části, jak to udělal zápis pravidla, ji nikdo nenaučil.
Obě funkce jsme zkopírovali z balíčku 1.5.47 a pustili v Node.js. Pravidlo vzniklé z git status vyhovělo příkazu git push --force, programu gitk i každému řádku, kde za git status stál středník, && nebo svislítko a za nimi další příkaz. Nevyhovělo jedině tehdy, když cizí příkaz stál na začátku. Kdo tedy jednou nechal projít neškodné git status, povolil tím natrvalo celý Git i všechno, co se za něj dá přilepit.
Vlastní posudek Continue řetězení pozná, jenže nerozhoduje
Continue má ještě druhou vrstvu, funkci evaluateTerminalCommandSecurity. Ta složený příkaz rozdělit umí a podle hlášení u takových řádků doporučí zeptat se. Ve funkci checkToolPermission ale platí přednost, kterou kód popisuje komentářem „user preference wins“. Posudek smí příkaz jedině úplně zakázat, a to jen u úzkého výčtu ničivých příkazů. Každé mírnější doporučení přebije povolení uložené v souboru.
Tutéž přednost jsme popsali v srpnu u chyby bezobslužného režimu Continue CLI. Tehdy šlo o neúplný výčet nebezpečných cest v režimu, kde se nástroj nemá koho zeptat. Nová chyba se týká běžného režimu a pravidla, které si uživatel zapsal sám, protože věřil, že schvaluje jeden konkrétní příkaz.
Příkaz za středník dopíše agent, ne uživatel
Útočník k tomu nepotřebuje přístup k počítači. Stačí, aby agent přečetl text se schovaným pokynem: soubor v cizím repozitáři, popis chyby nebo staženou stránku. Hlášení VulnCheck s touhle cestou počítá výslovně. Model pak napíše příkaz, který začíná povoleným slovem, a za středník připojí něco dalšího. Okno se schválením se vůbec neukáže a příkaz poběží s oprávněními uživatele, takže dosáhne na jeho klíče SSH, soubory .env i na síť.
Stejná vada má i opačnou stranu. Dokumentace oprávnění uvádí jako příklad povolit shell a zakázat instalace přepínačem --exclude "Bash(npm install*)". Výraz z takového vzoru ale sedí jen na řetězec, který tímhle slovem začíná. Na řádek, před kterým stojí cd app &&, zákaz nedosáhne.
Hlášení leží v repozitáři od září
Chybu popsal Chengzhi Yi 17. září 2026 v hlášení č. 13288, VulnCheck mezi autory nálezu uvádí i jméno Akıner Kısa. Hlášení je k 13. říjnu otevřené a žádný ze správců projektu se pod ním veřejně neozval. Oprava, kterou autor navrhuje, je přímočará: rozdělit příkaz na části a každou porovnat s pravidly zvlášť.
Opravené vydání není. Poslední verze 1.5.47 vyšla na npm 18. června 2026 a ve složce extensions/cli hlavní větve od toho dne nepřibyla jediná změna. Oba soubory jsou ve vydaném balíčku i v hlavní větvi bajt po bajtu stejné. Otevřené zůstává i srpnové hlášení č. 13001 o bezobslužném režimu.
Záznam GHSA-f54m-g39v-qf2p v databázi GitHubu je nezkontrolovaný a nejmenuje žádný balíček, takže na něj Dependabot neupozorní. Americká databáze NVD ho 13. října vedla ve stavu Received, tedy zatím bez vlastního posouzení.
Claude Code dělí příkaz na části
Podle dokumentace oprávnění Claude Code pravidlo Bash(safe-cmd *) nepovolí safe-cmd && other-cmd. Za oddělovače bere &&, ||, ;, |, |&, & i konec řádku a pravidlu musí vyhovět každá část zvlášť. Když uživatel trvale schválí složený příkaz, uloží se samostatné pravidlo pro každou část, která schválení potřebuje, nejvýš pět. Tohle jsme sami nezkoušeli, vycházíme z dokumentace.
Co se dá udělat, než oprava vyjde
Následující postup vychází z kódu a dokumentace Continue, nástroj cn jsme nespouštěli. V souboru ~/.continue/permissions.yaml se dají z oddílu allow smazat řádky tvaru Bash(…*). Dokumentace ruční úpravu dovoluje a změna platí od příštího sezení. U příkazů shellu je rozumnější volbu „Continue + don't ask again“ nepoužívat vůbec. Kdo chce agenta pouštět na cizí kód, bude klidnější s kontejnerem nebo se strojem, na kterém nejsou klíče ani přístupové údaje.