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

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.

Klávesnice starého terminálu s modrými číslovanými klávesami a klávesou PROG START
Funkční klávesy a klávesa PROG START na klávesnici starého terminálu. Foto: Marcin Wichary, 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. 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.

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

    Opravu kritické díry v SGLangu zavřel správce spolu s dalšími návrhy téhož účtu

    SGLang vyhodnocuje ladicí filtr funkcí eval() a přes ni jde v procesu scheduleru spustit cizí kód. Nahlásil to 14. října Jiapeng Li, o 48 minut později poslal někdo jiný…

  2. Bezpečnost

    Anthropic rozběhl model na patnácti televizních krabičkách

    Výzkumníci Anthropicu spustili model Gemma na patnácti levných krabičkách s Androidem. V odděleném pokusu zvládl GLM-5.2 připravit běh jiného modelu na všech osmi…

  3. Bezpečnost

    Ruská operace Dark Clark je první, které OpenAI dala pátý stupeň dosahu ze šesti

    OpenAI 8. října zablokovala účty dvou vlivových operací, ruské Dark Clark a íránské Bogus Bylines. Ruskou jako první ze třiceti popsaných zařadila do páté kategorie…

  4. Bezpečnost

    Anthropic nabídl open source projektům hlášení zranitelností bez lidské kontroly

    Anthropic otevřel 8. října službu OSS Scanner, která vybraným open source projektům zdarma a opakovaně prohledává kód a jejich správcům posílá nálezy rovnou od modelu,…