Blog

Claude Code 2.1.268: Co bylo opraveno v pravidlech deny a v MCP

Markdown

Claude Code 2.1.268–2.1.269 opravily čtyři problémy s oprávněními a únik tajných údajů v /mcp. Koho se to týká, jak aktualizovat a jak zkontrolovat pravidla.

Přečíst celý článek

Claude Code verze 2.1.268 byla vydána 10. září 2026 a následující den ji následovala verze 2.1.269. Měli byste okamžitě aktualizovat: ve dvou případech pravidla deny, která používáte k blokování přístupu agenta k souboru .env a servisním složkám, tiše nefungovala. Příkaz /mcp navíc mohl v terminálu vypisovat tajné údaje z vašich konfigurací.

Vše níže vychází z oficiálního changelogu a dokumentace společnosti Anthropic ve stavu k 17. září 2026, tedy k datu zdrojového materiálu. Nejnovější verzí v tento den byla 2.1.274. Popisujeme fungování chyb na základě těchto záznamů; obcházení pravidel jsme na zranitelné verzi nereprodukovali.

Další pokyny k práci s Ailoot najdete v dokumentaci.

Co bylo opraveno v Claude Code 2.1.268 a 2.1.269?

Hlavní poznatek

Byly opraveny čtyři problémy s oprávněními. Pravidla deny a ask nefungovala u cest přes symbolické odkazy a pravidlo deny pro Read nebo Edit mohlo selhat u řádků obsahujících env -C nebo eval. Pravidlo s „!“ platilo i mimo svůj soubor nastavení. Příkaz tee zapisoval soubory, aniž by jej blokovalo pravidlo deny pro Edit. Příkazy /mcp a claude mcp list navíc zobrazovaly tajné údaje z konfigurací, zatímco chyby pluginů zobrazovaly tokeny z URL Git.

Pro pravidla oprávnění jsou důležité čtyři opravy:

  1. Zákazy na symbolických odkazech nefungovaly. Pravidla deny a ask nastavená pro adresáře se symbolickými odkazy (/etc, /tmp, /var v macOS, /bin v Linuxu) se nespustila, když byla cesta zadána jako její skutečné umístění. Příkazy Bash také ignorovaly pravidla deny nastavená pro cestu přes symbolický odkaz.
  2. Zákaz čtení a úprav selhával společně s env -C nebo eval. Pokud stejný řádek příkazu obsahoval konstrukci, kterou kontrola oprávnění neuměla analyzovat, pravidlo deny pro Read nebo Edit se nemuselo spustit.
  3. Pravidlo s „!“ platilo šířeji, než bylo zamýšleno. Pravidlo deny nebo ask začínající znakem ! platilo i mimo soubor nastavení, ve kterém bylo zapsáno. Nyní platí pouze v rámci svého zdroje a samotná negace ! se ignoruje.
  4. tee obcházelo zákazy při zápisu. Pravidla deny pro Edit() a kontrola zapisované cesty se neuplatňovaly na soubor vytvořený příkazem Bash tee. Oprávnění Bash(tee:*) již nezahrnuje zápisy mimo pracovní adresáře.

Tyto verze opravily také dva problémy související s odhalením tajných údajů. WebFetch již nečeká neomezeně dlouho na odpověď serveru, který udržuje spojení otevřené: požadavek nyní selže po 300 sekundách a časový limit lze nastavit proměnnou CLAUDE_CODE_WEBFETCH_DEADLINE_MS. Bylo také odstraněno trvale vysoké využití CPU během dlouhých nečinných relací.

Jak fungují zákazy v Claude Code?

Hlavní poznatek

Pravidla se zapisují do bloku permissions v souboru settings.json: deny blokuje, ask žádá o potvrzení a allow povoluje akci bez potvrzení. Kontroly probíhají v tomto pořadí: deny, potom ask a nakonec allow. Pravidlo má formát Tool nebo Tool(detail), například Read(./.env).

Claude Code má tři seznamy pravidel: deny (vždy zakázáno), ask (před provedením akce se zeptat) a allow (povoleno bez potvrzení). Když se agent chystá něco udělat, pravidla se kontrolují přesně v tomto pořadí. Odpovídající pravidlo deny zruší případné pravidlo allow pro stejnou akci: pravidlo allow nemůže udělit výjimku ze zákazu.

Pravidla jsou uložena na třech místech: uživatelská pravidla v ~/.claude/settings.json, projektová pravidla v .claude/settings.json uvnitř repozitáře a místní pravidla v .claude/settings.local.json. Zde je příklad nastavení zakazujícího čtení souboru s klíči:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./secrets/**)",
      "Bash(rm *)"
    ]
  }
}

Všechna aktivní pravidla a soubor, ze kterého každé pochází, zobrazíte spuštěním /permissions v relaci. Pokud pravidlo blokuje čtení, oznámení o zákazu uvádí toto pravidlo, což se bude hodit při níže uvedené kontrole.

Které chyby ovlivnily zákazy a rozsah pravidel?

Chyby se týkaly kontrol cest a příkazů i rozsahu pravidel z různých souborů nastavení.

První případ: symbolické odkazy. V macOS jsou /etc, /tmp a /var symbolické odkazy na skutečné složky pod /private; v Linuxu je /bin běžně podobným odkazem. Pokud jste napsali pravidlo deny pro jednu podobu cesty, ale agent k ní přistupoval pomocí jiné podoby (například přes skutečné umístění místo symbolického odkazu), pravidlo se nespustilo. Příkazy Bash také ignorovaly zákaz zapsaný pro cestu přes symbolický odkaz. Ve verzi 2.1.268 byly opraveny oba případy: pravidlo nyní platí bez ohledu na to, jaká podoba cesty byla použita.

Druhý případ: env -C a eval na stejném řádku. Kontrola oprávnění analyzuje příkaz, aby zjistila, ke kterým souborům bude přistupovat. Konstrukce jako env -C nebo eval analyzovat neumí. Chyba spočívala v tom, že když se taková konstrukce objevila na řádku, pravidlo deny pro Read nebo Edit se nemuselo uplatnit. Příkaz tak mohl obejít zákaz čtení nebo úprav chráněného souboru.

Třetí případ: pravidlo s „!“ platilo mimo své hranice. Pravidlo začínající znakem ! má platit pouze v souboru nastavení, ve kterém je zapsáno. Před verzí 2.1.269 platilo i pro další zdroje nastavení. Nyní je jeho rozsah omezen na vlastní soubor a pravidlo tvořené samotným znakem ! se ignoruje.

Čtvrtý případ: zápis přes tee. Příkaz Bash tee může zapisovat do souboru. Kontrola zapisované cesty a pravidla deny pro Edit() se na tento soubor nevztahovaly. Oprávnění Bash(tee:*) zároveň zahrnovalo zápisy mimo pracovní adresáře. Ve verzi 2.1.269 se tyto kontroly začaly vztahovat na zápisy přes tee: zákaz pro daný soubor se uplatní a Bash(tee:*) se vztahuje pouze na pracovní adresáře.

Pokud používáte cílené zákazy — k blokování .env, několika servisních složek nebo nebezpečných příkazů — měli byste zkontrolovat i ty. Postup je uveden níže.

Proč mohl příkaz /mcp zobrazit vaše klíče?

Hlavní poznatek

Klíče v konfiguracích MCP se často předávají prostřednictvím proměnných ${VAR}. Příkazy /mcp, /plugin, claude mcp list a claude mcp get i chyby přihlášení MCP zobrazovaly dosazené hodnoty, tedy samotné klíče. Ve verzi 2.1.268 je výstup redigován.

V konfiguracích serverů MCP jsou klíče běžně uchovávány v proměnných prostředí a odkazuje se na ně prostřednictvím ${VAR}, aby bylo možné soubor uložit do repozitáře bez samotných tajných údajů. Problém spočíval v tom, že příkazy pro zobrazení (/mcp, /plugin, claude mcp list, claude mcp get) a chybová hlášení při přihlašování MCP zobrazovaly konfiguraci s již dosazenými hodnotami. Klíč se objevil na obrazovce.

Další oprava se týká chyb pluginů a tržiště: mohly zobrazovat token nebo heslo z původní URL Git.

Pokud se výstup příkazu /mcp nebo claude mcp list ze starší verze objevil ve streamu, na snímku obrazovky, ve zprávě kolegovi nebo v protokolu, který opustil váš počítač, včetně automatického přenosu, předpokládejte, že došlo k odhalení klíčů z vašich konfigurací MCP, a vyměňte je. Pokud výstup váš počítač neopustil, stačí aktualizovat. Samostatný návod k serverům MCP a připraveným konfiguracím najdete zde: Servery MCP v Claude Code.

Další změny v těchto verzích

WebFetch a artefakty. Dříve se pravidlo WebFetch bez podrobností v seznamech deny nebo ask vztahovalo také na čtení a úpravy publikovaných artefaktů. Od verze 2.1.268 se na ně již nevztahuje. Chcete-li artefakty blokovat, potřebujete samostatné pravidlo Artifact nebo pravidlo pro doménu, například WebFetch(domain:claude.ai). Pokud jste se při ochraně před čtením artefaktů spoléhali na obecný zákaz WebFetch, znovu zkontrolujte nastavení: původní pravidlo tyto akce již neblokuje.

WebFetch má nyní časový limit. Požadavek na server, který udržuje spojení otevřené a nedokončí odpověď, nyní po 300 sekundách selže. Dříve se mohl takový požadavek zablokovat na neomezenou dobu. Chování lze nastavit proměnnou CLAUDE_CODE_WEBFETCH_DEADLINE_MS; nastavením hodnoty 0 časový limit vypnete.

Trvale vysoké využití CPU v nečinných relacích bylo odstraněno. Během dlouhých nečinných relací mohl cyklus nečinnosti v Claude Code způsobovat trvale vysoké využití CPU. Tato chyba byla opravena ve verzi 2.1.268. Mohla postihnout i uživatele, kteří nechávají relace otevřené celý den.

Nainstalujte nejnovější verzi. Ve verzi 2.1.269 se objevila nová chyba: po dlouhém běhu relace začaly příkazy Bash Git, které pouze četly data, požadovat oprávnění. Byla opravena ve verzi 2.1.270. Proto aktualizujte na nejnovější verzi (k 17. září 2026 to byla 2.1.274); nezůstávejte u verze 2.1.268 ani 2.1.269.

Jak aktualizovat a ověřit, že zákazy fungují?

Hlavní poznatek

Verzi zkontrolujte příkazem claude --version, aktualizujte na nejnovější vydání a potom proveďte test pomocí bezpečného souboru bez tajných údajů: přidejte pro něj pravidlo deny, požádejte agenta, aby soubor přečetl, a ověřte, že oznámení o zákazu odkazuje na vaše pravidlo.

  1. Zjistěte aktuální verzi. Spusťte v terminálu claude --version. Opravy výše popsaných problémů byly vydány ve verzích 2.1.268 a 2.1.269. Pokud je číslo vaší verze nižší než 2.1.268, tyto opravy ještě neobsahuje, ale to, zda se vás jednotlivé problémy týkají, závisí na používaných cestách, příkazech a pravidlech.
  2. Aktualizujte. Podrobný postup a řešení problémů najdete v návodu jak aktualizovat Claude Code na nejnovější verzi. Vyberte nejnovější verzi; nezůstávejte u verze 2.1.268.
  3. Otestujte zákaz. Netestujte pravidlo na skutečném souboru .env: pokud zákaz selže, agent uvidí skutečné klíče. Vytvořte testovací soubor, například secret-test.txt, s libovolným textem, třeba „toto je test“; do seznamu deny v projektovém souboru .claude/settings.json přidejte pravidlo "Read(./secret-test.txt)"; restartujte relaci a požádejte: „Přečti soubor secret-test.txt a řekni mi, co obsahuje.“ Očekávaným výsledkem je oznámení o zákazu, které uvádí vaše pravidlo. Pokud agent soubor přečte, zákaz při tomto testu nefungoval. Nejprve zkontrolujte syntaxi v oddílu výše a otevřete /permissions, kde uvidíte aktivní pravidla a soubory, ze kterých byla načtena. Samotný výsledek testu neurčuje příčinu. Jeden zákaz prokáže, že pravidlo pro tento soubor funguje; o ostatních pravidlech nic nevypovídá, proto je stejným způsobem kontrolujte jednotlivě.
  4. Pokud používáte takové cesty, ověřte případ symbolických odkazů. Máte-li v macOS zákazy pro /tmp, /etc nebo /var, případně v Linuxu pro /bin, po aktualizaci test pro tyto cesty zopakujte.
  5. Zkontrolujte pravidla s „!“. Pokud jste nějaká použili, ověřte, že každé z nich je zapsáno v souboru, ve kterém má platit.

Pokud zákaz funguje, ale Claude Code stále nevidí soubory, které potřebujete, podívejte se na samostatné vysvětlení: proč Claude Code nevidí soubory projektu.

Pokud se nyní nemůžete aktualizovat

Někdy musíte aktualizaci odložit: nemůžete změnit prostředí, počítač patří firmě nebo potřebujete dokončit aktuální úkol. Do aktualizace můžete riziko snížit takto:

  • napište pravidla deny pro obě podoby cesty — symbolický odkaz i skutečné umístění (v macOS jsou skutečné cesty pod /private);
  • nekombinujte více příkazů na jeden řádek a v příkazech, jejichž spuštěním pověřujete agenta, se vyhýbejte konstrukcím env -C a eval;
  • nikomu nezobrazujte výstup příkazů /mcp, /plugin, claude mcp list ani claude mcp get a vyměňte klíče z konfigurací MCP, které se mohly dostat do cizích rukou;
  • pamatujte, že tee zapisuje navzdory pravidlu deny pro Edit — pokud je Bash povolený, nepovažujte soubory za chráněné.

Tato opatření snižují pravděpodobnost konkrétních obcházení, ale nenahrazují opravu. Jakmile to bude možné, aktualizujte a proveďte test z předchozí části.

Stručné shrnutí

Verze 2.1.268 a 2.1.269 opravily čtyři problémy s oprávněními v Claude Code: symbolické odkazy, řádky s env -C a eval, pravidla s „!“ platící mimo vlastní soubor a zápisy přes tee. Samostatně opravily odhalování tajných údajů ve výstupu příkazu /mcp a tokenů v chybách pluginů. Zkontrolujte číslo verze, aktualizujte na nejnovější vydání a proveďte test s testovacím souborem z předchozí části. Oznámení o zákazu uvádějící vaše pravidlo dokládá, že zákaz při tomto testu fungoval. Pouhá přítomnost pravidla v nastavení k ověření nestačí.

Zdroje

Pokud chcete pokračovat v práci s modely, přejděte na Ailoot.

Další podrobnosti

Časté otázky

Jak otestovat pravidlo zákazu bez vystavení skutečného tajného údaje?

Vytvořte soubor s neškodným textem, zakažte pro něj přístup Read, restartujte relaci a požádejte agenta o přečtení. Očekávejte odmítnutí s odkazem na vaše pravidlo. Skutečný soubor .env pro test, který může selhat, nepoužívejte.

Dokazuje jedno úspěšné odmítnutí bezpečnost všech oprávnění?

Ne. Ověřuje pouze vyzkoušený soubor a způsob přístupu. Prohlédněte aktivní pravidla v /permissions a otestujte další cesty a případy, na které spoléháte, včetně zápisu přes symbolický odkaz, pokud je relevantní.

Všechny články