Zum Inhalt springen

Sicherheit · 17. August 2026

Claude Code /security-review: was der Sicherheitscheck übergeht - und was er zuverlässig findet

Ein Testrepo, dreimal mit /security-review in Claude Code geprüft: drei Befunde kamen jedes Mal, der vierte wechselte. Was der Befehl übergeht und was ein Lauf kostet.

Autor

Reto Lutz

Gründer & KI-Trainer

Das Wichtigste in Kürze

  • Der Befehl /security-review in Claude Code prüft nur die Änderungen des aktuellen Branch gegen den Hauptstand. Bestehender Code bleibt aussen vor, auch wenn dort eine Lücke sitzt.
  • In drei Durchläufen gegen dasselbe Testrepo kamen drei Befunde jedes Mal, der vierte wechselte: Derselbe hartcodierte Zahlungsschlüssel bekam die Konfidenzwerte 7, 8 und 9 - gemeldet wird ab 8.
  • Fünf eingebaute Problemstellen blieben in allen Läufen stumm, weil sie auf der Ausschlussliste des Befehls stehen - darunter eine Abhängigkeit mit zwei bekannten CVEs und ein Passwort im Betriebshandbuch.
  • Die über 500 Schwachstellen, die Anthropic am 5. Februar 2026 in Open-Source-Software meldete, stammen nicht von diesem Befehl, sondern aus einem Forschungsaufbau mit Claude Opus 4.6.

Stand: 17. August 2026. Geprüft mit Claude Code 2.1.233. Anthropic hat den Befehl /security-review am 6. August 2025 eingeführt; sein Prüfumfang ist seither enger geworden. Dieser Beitrag beschreibt, was der Befehl heute leistet, und belegt es mit vier eigenen Durchläufen gegen ein Testrepo - drei gegen einen Branch-Diff, einer gegen die gesamte Codebase. Quellen am Ende des Artikels.

Über /security-review in Claude Code kursieren Beschreibungen, die zwei verschiedene Dinge vermischen: den Befehl, den jeder mit einem Claude-Abo im Terminal aufrufen kann, und ein Forschungsprojekt von Anthropic, das in Open-Source-Software über 500 Schwachstellen hoher Schwere gefunden hat. Das erste ist ein Alltagswerkzeug mit einer langen Liste von Dingen, die es absichtlich nicht meldet. Das zweite lief mit einem anderen Modell in einem anderen Aufbau.

Ich habe deshalb den Anweisungstext des Befehls aus dem ausgelieferten Programm gelesen und ein Testrepo gebaut. Darin sitzen elf Problemstellen: einige, die gemeldet werden müssten, andere, die laut Anweisung stumm bleiben sollten. Drei Läufe später war das Bild klar - der harte Kern der Befunde hielt, der Rand kippte, und fünf Fälle blieben absichtlich stumm.

Was der Befehl heute prüft - und was 2025 anders war

/security-review ist ein eingebauter Befehl in Claude Code, der die Änderungen des aktuellen Branch gegen den Hauptstand des Repositorys vergleicht und dort nach ausnutzbaren Sicherheitslücken sucht. Die Befehlsreferenz beschreibt ihn als “Reviews the diff between your branch and origin’s default branch”. Bestehender Code ausserhalb dieser Änderungen wird ausdrücklich übergangen.

Das war einmal anders. In der Ankündigung vom 6. August 2025 stand: “Claude will search your codebase for potential vulnerabilities.” Die heutige Dokumentation sagt das Gegenteil: “/security-review covers only the changes on your current branch.” Viele Zusammenfassungen zitieren noch den Stand von 2025 und beschreiben damit ein Werkzeug mit deutlich grösserem Prüfumfang, als es heute hat.

Praktisch heisst das zweierlei. Der Befehl braucht ein gesetztes origin/HEAD, sonst bricht er ab, bevor er anfängt. Und er ist heute eine von vier Sicherheitsschichten in Claude Code, neben einem Plugin, das schon beim Schreiben prüft, einem zweiten für tiefere Repository-Scans und dem Code Review für Pull Requests.

Wie er arbeitet: erst suchen, dann sich selbst widerlegen

Der Befehl arbeitet in drei Schritten, und der zweite ist der interessante. Ein erster Durchgang liest den Diff und sammelt Verdachtsfälle. Für jeden Fund startet dann ein eigener Durchgang mit gegenteiligem Auftrag: nachweisen, dass es ein Fehlalarm ist. Diese Gegenprüfungen laufen parallel. Im dritten Schritt fällt alles heraus, was der Gegenprüfer mit weniger als 8 von 10 Konfidenzpunkten bestätigt hat.

01 · Suchen

Ein Durchgang über den Diff

Liest die Änderungen, versteht den Kontext im Repository, sammelt Verdachtsfälle. Gesammelt wird ab 80 Prozent Zutrauen in die Ausnutzbarkeit - gemeldet wird erst nach Schritt 03.

02 · Widerlegen

Je Fund ein Gegenprüfer

Parallel, unabhängig, mit dem Auftrag, den Fund als Fehlalarm zu entlarven. Darf dabei weder Befehle ausführen noch Dateien schreiben.

18 harte Ausschlüsse

03 · Aussortieren

Die Schwelle bei 8 von 10

Wer weniger Konfidenz bekommt, erscheint im Bericht nicht. Übrig bleiben Funde mit Datei, Zeile, Angriffsszenario und Fixvorschlag.

Der Ablauf eines Durchlaufs. Die Gegenprüfung im zweiten Schritt ist der Grund, warum der Bericht am Ende kurz bleibt.

Diese Bauweise erklärt, warum Berichte von /security-review so viel knapper ausfallen als die Ausgabe eines klassischen Scanners: Sie zielt auf wenige belastbare Funde. Wie Claude Code Teilaufgaben generell auf parallele Instanzen verteilt, zeigt der Beitrag über Dynamic Workflows.

Der Test: elf Fälle, drei Läufe, jedes Mal vier Befunde

Ich habe ein Wegwerf-Repository gebaut - ein fiktives Auftragsportal aus Node, Express und SQLite mit einer React-Komponente - und auf einem Feature-Branch 68 Zeilen in vier Dateien geändert. In diesen Zeilen sitzen elf Problemstellen: drei fallen eindeutig in die Kategorien, die der Befehl prüft, fünf stehen ebenso eindeutig auf seiner Ausschlussliste, zwei liegen im Graubereich dazwischen, und eine sitzt im Basis-Commit und damit ausserhalb des Diffs.

Zur Offenlegung gehört: Ich habe die Fälle konstruiert, nachdem ich die Ausschlussliste gelesen hatte. Der Test prüft also, ob die dokumentierten Ausschlüsse in der Praxis greifen - er entdeckt sie nicht. Drei Durchläufe sind eine Stichprobe, kein Datensatz. Läufe 1 und 2 wurden mit demselben Befehl gestartet, Lauf 3 zusätzlich mit maschinenlesbarer Ausgabe für die Kostenmessung. Alle drei liefen mit meinen eigenen Arbeitsanweisungen im Kontext, weshalb die Berichte auf Deutsch herauskamen und einen Abschnitt über die verworfenen Fälle anhängten, den der Befehl so nicht vorsieht. Für die Auswertung war das ein Glücksfall: Er macht sichtbar, was sonst unsichtbar aussortiert wird.

Eingebauter FallLauf 1Lauf 2Lauf 3
SQL-Injection in der KundensucheHIGH, 10HIGH, 9HIGH, 9
Path Traversal beim BelegabrufHIGH, 9HIGH, 9HIGH, 9
Command-Injection im PDF-ExportHIGH, 8HIGH, 9HIGH, 8
Hartcodierter Zahlungsschlüsselverworfen, 7HIGH, 8HIGH, 9
Passwortvergleich im KlartextMEDIUM, 8verworfennicht gemeldet
Die fünf Fälle von der Ausschlusslistestummstummstumm
Vorbestehende SQL-Injection im Basis-Commitstummstummstumm

SQL-Injection, Path Traversal und Command-Injection sind die gute Nachricht: gefunden in jedem Lauf, mit Konfidenzwerten zwischen 8 und 10 und jedes Mal mit einem konkreten Angriffspfad. Bei der Command-Injection fiel allen drei Durchgängen auf, dass im Repository kein Body-Parser eingerichtet ist und der Endpunkt deshalb heute gar nicht erreichbar wäre. Sie meldeten den Fund trotzdem als schwerwiegend, weil eine einzige nachgezogene Zeile ihn scharf schaltet.

Was er bewusst nicht meldet

Fünf der elf Fälle blieben in allen drei Läufen stumm, und keiner davon aus Versehen. Die Anweisung enthält eine Liste harter Ausschlüsse mit achtzehn Einträgen unter 17 Nummern - die 16 ist doppelt vergeben - und dazu 12 Präzedenzfälle. Die Läufe begründeten ihre Verwerfungen fast durchgehend mit der passenden Regel; nur der Login ohne Versuchsbegrenzung fiel im ersten Lauf kommentarlos unter den Tisch.

Denial of Service bleibt unerwähnt, und mit ihm die Regex mit katastrophalem Backtracking und der ungebremste Login. Veraltete Drittbibliotheken sind ebenfalls ausgenommen; mein Testrepo enthielt ein Paket mit zwei bekannten CVEs, das in keinem Lauf auftauchte. Fehlende Berechtigungsprüfungen in Browser-Code gelten als unproblematisch, weil sie ohnehin auf den Server gehören. Und der Befehl übergeht Befunde in Dokumentationsdateien: Das Datenbank-Passwort im Betriebshandbuch haben alle drei Läufe erkannt, keiner hat es gemeldet.

Ein sechster Fall blieb ebenfalls stumm, aber aus anderem Grund. Die vorbestehende SQL-Injection aus dem Basis-Commit steht auf keiner Ausschlussliste, sie liegt schlicht ausserhalb des Diffs. Alle drei Läufe hatten sie gesehen und aus dem Bericht verwiesen. Für einen gewachsenen Bestand gibt der Befehl keine Antwort.

Das ist kein Mangel, sondern die Bauart: Der Befehl bewacht neue Änderungen, er inventarisiert nicht. Es heisst aber auch, dass ein leerer Bericht keine Aussage über den Zustand einer Anwendung macht. Anthropic formuliert das im eigenen Hilfe-Center so: “While automated security reviews help identify many common vulnerabilities, they should complement, not replace, your existing security practices and manual code reviews.”

Warum derselbe Fund einmal gemeldet wurde und einmal nicht

Jeder Lauf meldete genau vier Funde, und der vierte war jedes Mal ein anderer. Am deutlichsten zeigen das die Läufe 1 und 2: gleicher Befehl, gleicher Diff, gleiche Umgebung - und trotzdem ein anderes Ergebnis. Lauf 1 meldete den Passwortvergleich im Klartext und filterte den hartcodierten Zahlungsschlüssel mit Konfidenz 7 aus, einen einzigen Punkt unter der Schwelle. Lauf 2 tat genau das Umgekehrte. Über alle drei Durchläufe bekam derselbe Schlüssel - ein Wert im Format sk_live_… mitten im Quellcode - die Konfidenzwerte 7, 8 und 9.

Lauf 1 hat sein Ausfiltern sogar begründet. Er sah einen Konflikt zwischen der Prüfkategorie für hartcodierte Schlüssel und dem Ausschluss “Secrets or sensitive data stored on disk (these are handled by other processes)” und entschied im Zweifel gegen die Meldung. Beide Regeln stehen in der Anweisung. Ausgerechnet der Fall, den Zusammenfassungen gern als Stärke führen - das Finden vergessener Zugangsschlüssel -, sitzt an der wackeligsten Stelle des Regelwerks. Auch der stabile Kern hat einen Rand: Die Command-Injection lag in zwei von drei Läufen mit genau 8 auf der Meldeschwelle.

Bemerkenswert ist, dass Anthropic diese Eigenschaft selbst dokumentiert - für das Security-Plugin, das denselben Unterbau nutzt: “Scans are nondeterministic: two scans of the same code can surface different findings.” Wer die Streuung für einen Messfehler hält, liest die Dokumentation nicht.

Zur Einordnung: Eine Studie, die die Streuung zwischen identischen Läufen misst, habe ich in der Recherche nicht gefunden - nur Arbeiten zur Empfindlichkeit gegenüber unterschiedlichen Prompt-Formulierungen und Aussagen von Marktteilnehmern. Der DAST-Anbieter StackHawk schreibt “You can run the same scan twice and get different findings” und nennt das für compliance-getriebene Programme eine echte Einschränkung. Das sind Marktbeobachtungen, keine Messungen; meine drei Läufe auch nicht.

Anthropic selbst geht mit dieser Eigenschaft offen um. Zu den Sicherheitsregeln im zugehörigen Plugin steht in der Dokumentation: “These rules are guidance for the reviewer, not deterministic guardrails.” Und an anderer Stelle: “the review model can miss issues. Treat the plugin as one layer of defense in depth, not a complete security solution.”

Die 500 gefundenen Lücken stammen von einem anderen Aufbau

Die Zahl, die in fast jeder Darstellung auftaucht, ist echt - aber sie gehört nicht zu diesem Befehl. Anthropics Frontier Red Team schrieb am 5. Februar 2026: “So far, we’ve found and validated more than 500 high-severity vulnerabilities.” Das Team liess Claude Opus 4.6 in einer virtuellen Maschine mit Standardwerkzeugen und Fuzzern laufen. Der Beitrag hält ausdrücklich fest, man habe weder Spezialanweisungen noch ein eigenes Gerüst mitgegeben: “nor did we provide a custom harness”. /security-review kommt darin nicht vor.

Zwei Präzisierungen gehen in Nacherzählungen regelmässig verloren. Anthropic schreibt durchgehend “high-severity”, nicht “critical” - in der CVSS-Systematik ist das eine Stufe tiefer. Und als der Beitrag erschien, waren die Funde intern validiert und noch nicht von Maintainern bestätigt; das Wort CVE fällt in keiner der beiden Primärquellen.

Das prominenteste Einzelbeispiel ist ein Pufferüberlauf in der GIF-Bibliothek CGIF: Sie nimmt an, komprimierte Daten seien stets kleiner als die Rohdaten - was fast immer stimmt und sich mit einer vollen LZW-Symboltabelle brechen lässt. Der oft zitierte Satz zur Testabdeckung ist im Original ein Konjunktiv: “even if CGIF had 100% line- and branch-coverage, this vulnerability could still remain undetected”. Das ist eine Aussage über die Grenzen von Fuzzing, kein Bericht über einen Lauf, der versagt hätte. Gefunden hat das Modell die Lücke über die Annahme im Kopf des Entwicklers, nicht über ein Muster im Code.

Was ein Lauf kostet und wohin der Code geht

Mein dritter Durchlauf lief mit Kostenmessung. Für 68 geänderte Zeilen in vier Dateien fielen rechnerisch 4.23 USD an Modellkosten an, gerechnet mit Claude Opus 5, dem teuersten verfügbaren Modell. Mit einem Abo zahlen Sie das nicht separat, die Nutzung zehrt am Kontingent. Bei API-Abrechnung pro Pull Request sollten Sie die Grössenordnung trotzdem kennen. Für seinen verwalteten Code Review nennt Anthropic 15 bis 25 USD pro Review.

Wichtiger als der Preis ist für die meisten Betriebe die Frage, wohin der Code geht. Die Antwort steht in der Dokumentation: “Claude Code runs locally. To interact with the LLM, Claude Code sends data over the network. This data includes all user prompts and model outputs.” Lokal heisst also, dass das Programm auf Ihrem Rechner läuft - nicht, dass der Quellcode im Haus bleibt.

Drei Punkte gehören vor der Einführung geklärt. Die Abostufe entscheidet über das Training: Pro und Max laufen unter Konsumentenbedingungen, bei denen Anthropic mit den übermittelten Daten trainieren darf, sofern die Einstellung aktiv ist - Claude Code eingeschlossen. Kommerziell bewahrt Anthropic die Daten 30 Tage auf, bei Konsumentenkonten mit Trainingsfreigabe fünf Jahre. Und eine EU- oder Schweizer Datenregion gibt es für die Anthropic-API nicht. Details im Vergleich der Geschäftsabos von ChatGPT, Claude und Copilot und im Beitrag zum revDSG im KMU.

Ein Detail, das gern übersehen wird: Claude Code legt seine Sitzungsprotokolle im Klartext unter ~/.claude/projects/ ab, standardmässig 30 Tage lang. Was serverseitig gelöscht wird, liegt lokal weiter auf dem Gerät.

Eigene Prüfregeln hinterlegen - und die Warnung vor Prompt Injection

Firmenspezifische Prüfregeln lassen sich hinterlegen, aber nicht am eingebauten Befehl - dessen Anweisungstext steckt im Programm. Der Weg führt über das öffentliche Repository anthropics/claude-code-security-review: Dort liegt eine Datei security-review.md, die Sie nach .claude/commands/ in Ihr Projekt kopieren und dort anpassen. Für die GitHub-Action-Variante gibt es Parameter für zusätzliche Prüfkategorien, ein eigenes Filterregelwerk und ausgenommene Verzeichnisse.

Zwei Dinge aus demselben Repository gehören in jede Abwägung. Das README warnt: “This action is not hardened against prompt injection attacks and should only be used to review trusted PRs.” Eine automatische Prüfung von Beiträgen externer Mitwirkender lässt also fremden Text auf den Prüfer wirken. Und der Pflegezustand: letzter Commit am 11. Februar 2026, keine Releases, 78 offene Issues bei 5’865 Sternen (Stand 16. August 2026). Warum es stillsteht, sagt Anthropic nicht.

Wenn Sie den ganzen Bestand prüfen wollen

Für einen Betrieb, der Software entwickeln lässt, ist der Branch-Diff selten die interessante Frage. Die lautet: Was steckt in dem, was seit Jahren läuft? Dafür gibt es zwei Wege, beide geprüft.

Der offizielle Weg ist das Claude-Security-Plugin. Es wird mit /plugin install claude-security@claude-plugins-official nachgerüstet und kennt den Vollscan von Haus aus - laut Dokumentation sogar ohne Git: “Change scans need a git repository; full scans of an unversioned directory still work.” Anthropic beschreibt es als Mehr-Agenten-Scan, der die Architektur kartiert, ein Bedrohungsmodell baut und jeden Fund unabhängig gegenprüfen lässt. Es läuft lokal und zählt gegen das Nutzungskontingent; einen Preis pro Scan nennt Anthropic nicht. Voraussetzung ist ein Bezahlplan mit eingeschalteten Dynamic Workflows und Python 3.9.6.

Der Umweg funktioniert auch. Zeigt origin/HEAD auf einen leeren Wurzel-Commit, ist der Diff die gesamte Codebase. Ich habe das gegen dasselbe Testrepo laufen lassen: Der erste Befund war die SQL-Injection aus dem Basis-Commit, die vorher dreimal aussortiert worden war - diesmal mit Konfidenz 10 von 10. Insgesamt fünf Befunde statt vier, 4.08 USD, 5,6 Minuten für 89 Zeilen.

Was der Umweg nicht ändert, ist die Ausschlussliste. Auch dieser Lauf schwieg zur CVE-behafteten Abhängigkeit, zum fehlenden Rate-Limiting und zum Passwort im Betriebshandbuch. Der Trick erweitert den Eingabeumfang, nicht die Prüfkategorien - und Anthropic hält für das Plugin fest: “The plugin doesn’t replace your existing source-code security tools.”

Häufige Fragen

Ersetzt /security-review einen Sicherheitsscanner?

Nein. Der Befehl meldet ganze Klassen von Problemen bewusst nicht, darunter veraltete Abhängigkeiten mit bekannten Lücken und alles rund um Denial of Service. Anthropic verweist in der eigenen Dokumentation ausdrücklich darauf, dass statische Analyse und Dependency-Scanner im automatisierten Build weiterhin nötig sind.

Prüft der Befehl meine ganze Anwendung?

Nein, nur die Änderungen des aktuellen Branch. In meinem Test hat er eine vorbestehende Lücke dreimal erkannt und dreimal aus dem Bericht verwiesen. Für den Bestand gibt es das Claude-Security-Plugin oder den Umweg über den leeren Git-Baum - beides oben beschrieben.

Geht mein Quellcode an Anthropic?

Ja. Claude Code läuft auf dem eigenen Rechner, überträgt für die Auswertung aber sämtliche Eingaben und Ausgaben an das Modell. Ob dieser Code zum Training verwendet werden darf, hängt an der Abostufe: Team und Enterprise schliessen es vertraglich aus, Pro und Max nicht.

Was kostet ein Durchlauf?

In meinen Messungen 4.08 bis 4.23 USD rechnerische Modellkosten, gerechnet mit dem teuersten Modell. Innerhalb eines Abos zehrt das am Nutzungskontingent statt an einer eigenen Rechnung; bei API-Abrechnung ist es der reale Preis.

Praxis-Fazit

Was sich real verschiebt, ist der Zeitpunkt: Ein Sicherheitsblick, der früher am Projektende oder gar nicht stattfand, passt jetzt vor den Commit. Die drei Befunde, die in jedem Lauf kamen, und die beiden, die sich den vierten Platz teilten, hätte kein Team ignorieren wollen. Gleichzeitig ist der Bericht schmaler, als er aussieht: Er sagt nichts über Altbestand, nichts über Abhängigkeiten, nichts über das Verhalten der laufenden Anwendung, und er kann beim nächsten Durchlauf anders ausfallen.

Der brauchbare Umgang damit ist Kalibrierung statt Vertrauen. Wenn Sie diese Woche einen Schritt machen wollen: Lassen Sie /security-review einmal über einen echten Branch laufen und lesen Sie den Bericht mit der Ausschlussliste daneben. Interessanter als das, was drinsteht, ist die Frage, welche Ihrer Risiken gar nicht erst geprüft wurden.


Quellen (geprüft 17. August 2026):

Kennenlernen buchen