Start Debugging

Claude Code 2.1.251 schließt vier Wege an der Berechtigungsprüfung vorbei

Ein Symlink, der nach der Prüfung ausgetauscht wird, Deny-Regeln, die über einen Symlink-Suchpfad nicht mehr griffen, ein Marketplace-Kommando außerhalb seines Plugins und ein Workflow-Skript, das vor der Freigabe gelesen wurde. Vier Fixes in einem Release, alle derselbe Bug.

Claude Code 2.1.251 ist am 28. August 2026 erschienen, mit einem Changelog, das lang genug ist, um das Interessante zu begraben. Vier seiner Fixes haben dieselbe Form: Etwas hat eine Datei erreicht, die die Berechtigungsprüfung nicht freigegeben hatte. Zusammen gelesen wirken sie nicht mehr wie vier Bugs, sondern wie eine Klasse.

Die Prüfung ging durch, dann änderte sich der Pfad

Der wichtigste Fix ist ein lehrbuchreifes Time-of-check-to-time-of-use-Rennen. Laut Changelog folgten die Datei-Tools “einem Symlink, der nach der Berechtigungsprüfung innerhalb des Arbeitsverzeichnisses ausgetauscht wurde”, und konnten “außerhalb des freigegebenen Ortes lesen oder schreiben”. Du gibst eine Änderung an src/config.ts frei, der Pfad wird aufgelöst, die Prüfung sagt ja — und zwischen diesem Ja und dem Schreibvorgang wird der Eintrag zu einem Symlink, der woanders hinzeigt.

Wichtig ist, wer diesen Austausch vornehmen kann. Ein postinstall-Skript, ein File Watcher, ein Dev-Server, ein Test-Runner oder das eigene vorherige Bash-Kommando des Agents laufen, während die Sitzung offen ist. Das Arbeitsverzeichnis ist kein ruhiger Ort, und es war nie ein vertrauenswürdiger.

Grep und Glob hatten die Lese-Variante desselben Lochs: Read(...)-Deny-Regeln wurden nicht auf Dateien angewandt, die über einen Symlink-Suchpfad erreicht wurden. Eine Deny-Regel auf secrets/** hielt beim direkten Lesen und hörte still auf zu halten, sobald dieselbe Datei über einen hineinzeigenden Symlink gefunden wurde.

Zwei Pfade, die aus der Konfiguration kamen, nicht von dir

Die anderen beiden kamen über Dateien herein, die mit einem Repository mitreisen. Plugin-Kommandos, die in einem Marketplace-Eintrag deklariert sind, konnten außerhalb des Plugin-Verzeichnisses liegen; solche Pfade werden jetzt mit einem expliziten Path-Traversal-Fehler abgelehnt. Und das Workflow-Tool las einen scriptPath außerhalb dessen, was die Sitzung lesen durfte, bevor die Berechtigungsprüfung lief — und zitierte den Inhalt anschließend in seiner Fehlermeldung, was aus einem blockierten Lesevorgang einen erfolgreichen macht.

Dasselbe Release zieht die Einstellungen weiter an

Ein halbes Dutzend weiterer Änderungen in 2.1.251 zeigen in dieselbe Richtung und behandeln ein geklontes Repository durchweg als nicht vertrauenswürdige Eingabe:

Keine davon ist für sich ein dramatischer Exploit. Zusammen schließen sie die Lücke zwischen “das Berechtigungssystem hat nein gesagt” und “die Datei blieb ungelesen”.

Aktualisieren

claude update, oder per npm neu installieren. Zwei Notizen aus derselben Woche: 2.1.250 kam am selben Tag und enthält nur Bugfixes, und 2.1.248 (27. August) brachte --restricted — gleichbedeutend CLAUDE_CODE_RESTRICTED=1 — das die Werkzeuge entfernt, die Kommandos oder Code ausführen, WebFetch streicht, sofern du es nicht in --tools nennst, Datei-Tools im Arbeitsverzeichnis hält, bypassPermissions verweigert und Benutzer-, Projekt- und lokale Einstellungsdateien vollständig ignoriert. Dieses Flag und die Fixes dieser Woche sind dasselbe Argument aus zwei Richtungen: Die Einstellungen und Pfade, die ein Repository dir reicht, sind Eingabe, keine Konfiguration.

Der Marketplace-Fix kommt dabei eine Woche, nachdem 2.1.238 Katalogen echte Reichweite gab und einem Plugin-Marketplace erlaubte, eigene Auth-Header auszustellen — je mehr ein Marketplace-Eintrag kann, desto besser muss die Verzeichnisgrenze um ihn herum halten.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Zurück