security-review (everything-claude-code)
Prüft Authentifizierung, Benutzereingaben, Secrets, API-Endpunkte und Zahlungen anhand einer Sicherheitscheckliste.
ECC security-review: Findet eingebaute Schwachstellen nicht besser als einfaches Codex, bei etwa gleichen Tokens
Codex CLI · gpt-6-astra
24.9 / 30
Lift gegenüber ohne Skill: -0.16 · Situativ · 18 Läufe
Situativ: der Lift -0.16 liegt unter +1.0. Für „Empfohlen“ sind insgesamt 22/30, eine Ausgabequalität von 3.5 und ein Lift von +1.0 nötig.
SOTA
BestandenGetestet mit Codex.
Gilt für Codex, Claude Code
Codex CLI 0.166 (SOTA-Stufe): 18 bewertete Läufe. Ein Bestehen hier deckt gemäß unserer Stufenregel auch Claude Code ab; über die zweite Stufe sagt es nichts aus.
Punktzahlen
Jede Dimension reicht von 0 bis 5, und die sechs ergeben zusammen die Gesamtpunktzahl von 30. 5 ist in jeder Dimension besser. Kosten 5 bedeutet günstig und schnell. Installation 5 bedeutet einfach.
- Trigger-Zuverlässigkeit
- 5.0
- Lift gegenüber ohne Skill
- 1.8
- Ausgabequalität
- 4.1
- Token- und Zeitkosten
- 5.0
- Installation und Portabilität
- 4.0
- Sicherheit
- 5.0
Sicherheitsprüfung
SicherStatischer Scan: 5 CRITICAL / 6 HIGH / 4 MEDIUM. Manuelle Prüfung: Sicher in einer Sandbox ohne Netzwerk auszuführen (Scanner-Befunde erklärt). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Installieren
npx skills@latest add affaan-m/everything-claude-code --skill security-review
Fixierter Commit: b38be6a7f6350964d59328b52f0624e1d1d552d1
Getestet: 2026-11-02
Was wir getestet haben
- Ein kleines Service-Modul reviewen — orders_service.py vor dem Merge security-reviewen. Die gefundenen Probleme auflisten, schwerwiegendstes zuerst. Keine Dateien ändern.
- Einen Auth-Helper reviewen — auth_handlers.py security-reviewen: gerade für unseren Login-Flow geschrieben. Die Probleme auflisten, schwerwiegendstes zuerst. Keine Dateien ändern.
- Upload-Endpunkte reviewen — upload_api.py security-reviewen. Die Schwachstellen auflisten, schwerwiegendste zuerst. Keine Dateien ändern.
Vorteile
- Der Skill wurde erkannt, ohne genannt zu werden: Skill-Datei in 6/6 Treatment-Läufen gelesen.
- Kein Token-Overhead: 1.03x die Tokens von ohne Skill.
Nachteile
- Kein messbarer Lift gegenüber ohne Skill (-0.16, im Rauschen).
- Ein Ein-Satz-Prompt erzielte 4.29 gegenüber 4.06 mit dem Skill (-0.23).
- Testhinweis: Aufgabe t1 enthält drei eingebaute Punkte, die keine Sicherheitsprobleme sind, was die bestmögliche Trefferquote auf etwa 3.1 begrenzt.
- n=2 pro Aufgabe und Variante; Unterschiede unter etwa 1 Punkt sind Rauschen.
Bewertung
Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem Mac-Testrechner, einem frischen temporären Projekt und temporären HOME/TMPDIR/Caches pro Lauf; Skill installiert (Treatment) oder nicht vorhanden (Kontrolle) oder nicht vorhanden mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (One-Liner-Gruppe); 2 Läufe pro Gruppe und Aufgabe; Netzwerk aus; Schreiben nach /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung). Drei kleine Dateien mit je 8 eingebauten Problemen (ein Service-Modul, ein Auth-Helper, Upload-Endpunkte) und eine read-only Anfrage „die Probleme auflisten, schwerwiegendstes zuerst“. Der Order-Service enthält drei Probleme, die keine Sicherheitslücken sind (eine Off-by-one-Grenze, ein Ressourcenleck, Float-Geldbeträge), die ein Security-Review überspringen soll; bei dieser Aufgabe kann ein Sicherheitsprüfer also höchstens 5 von 8 finden, und die Punktzahl erreicht maximal etwa 3.1.
Drei-Arm-Vergleich
| Variante | Durchschnittsnote (0-5) | Tokens pro Lauf |
|---|---|---|
| Ohne Skill | 4.22 | 60k |
| Ein-Satz-Prompt | 4.29 | 44k |
| Mit Skill | 4.06 | 62k |
Gemessen mit Codex CLI über 18 Läufe, bewertet durch regelbasierte Prüfungen ohne LLM-Richter. Gesamt 24.9 / 30, Urteil Situativ.
Offenlegung: Aufgabe t1 enthält drei eingebaute Punkte, die keine Sicherheitsprobleme sind, was die bestmögliche Trefferquote auf etwa 3.1 begrenzt.
Urteil: Situativ (24.9 / 30). Quelle: affaan-m/everything-claude-code, skills/security-review, gepinnt auf Commit b38be6a. Installation: npx skills@latest add affaan-m/everything-claude-code --skill security-review. Lizenz: MIT (Repo-LICENSE).
Was es ist
Der Skill security-review aus affaan-m/everything-claude-code (ECC): eine Sicherheits-Checkliste für Situationen, in denen Sie Authentifizierung ergänzen, Nutzereingaben verarbeiten, mit Geheimnissen umgehen, API-Endpunkte anlegen oder Zahlungen implementieren. Etwa 1,800 Wörter Markdown in SKILL.md (Secret-Verwaltung, Eingabevalidierung, SQL-Injection, Authentifizierung und Autorisierung, XSS, CSRF, Rate Limiting, Offenlegung sensibler Daten, Abhängigkeitssicherheit, mit kurzen guten/schlechten Codebeispielen und einer Pre-Deployment-Checkliste) und eine zusätzliche Markdown-Datei zur Sicherheit von Cloud-Infrastruktur. Keine Skripte.
So haben wir getestet
Codex CLI 0.166 (gpt-6-astra, low reasoning) auf einem Mac-Testgerät, pro Lauf ein frisches temporäres Projekt und temporäre HOME/TMPDIR/Caches, Skill installiert (Mit-Skill-Gruppe) oder nicht vorhanden (Kontrollgruppe) oder nicht vorhanden, aber mit der Kernanforderung des Skills als einem an den Prompt angehängten Satz (Ein-Satz-Gruppe), 2 Läufe pro Gruppe und Aufgabe, Netzwerk aus, Schreibzugriffe auf /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung).
Drei kleine Dateien mit je 8 eingebauten Problemen (ein Service-Modul, ein Auth-Helfer, Upload-Endpunkte) und eine Anfrage ohne Schreibzugriff „liste die Probleme auf, das schwerwiegendste zuerst“. Der Order-Service enthält drei Probleme, die keine Sicherheitslücken sind (eine Off-by-one-Grenze, ein Ressourcenleck, Geldbeträge als Float), die ein Security-Review überspringen soll; bei dieser Aufgabe kann ein Security-Reviewer also höchstens 5 von 8 finden, und die Punktzahl erreicht etwa 3.1.
- Ein kleines Service-Modul prüfen — Prüfe orders_service.py sicherheitstechnisch, bevor ich es merge. Liste die gefundenen Probleme auf, das schwerwiegendste zuerst. Ändere keine Dateien.
- Einen Auth-Helfer prüfen — Prüfe auth_handlers.py sicherheitstechnisch: Ich habe die Datei gerade für unseren Login-Flow geschrieben. Liste die Probleme auf, das schwerwiegendste zuerst. Ändere keine Dateien.
- Upload-Endpunkte prüfen — Prüfe upload_api.py sicherheitstechnisch. Liste die Schwachstellen auf, die schwerwiegendste zuerst. Ändere keine Dateien.
Die Bewertung erfolgt programmatisch (versteckte Tests / Trefferquote bei eingebauten Problemen / Constraint-Prüfungen / Rendern+OCR, wo relevant), 0–5 pro Lauf. Kein LLM-Richter hat eine Punktzahl entschieden.
Ergebnisse
Der Ein-Satz-Prompt für die dritte Gruppe: "Prüfe den Code gegen eine Sicherheits-Checkliste: hartcodierte Geheimnisse, unvalidierte Eingaben, SQL-/Kommando-Injection, defekte Authentifizierung und Autorisierung, unsichere Datei-Uploads, sensible Daten in Fehlern oder Logs und fehlendes Rate Limiting, und nenne für jeden Befund die genaue Zeile."
| Aufgabe | Punktzahl Kontrolle | Ein-Satz | Mit Skill | Token Kontrolle | Token Ein-Satz | Token mit Skill | Skill gelesen |
|---|---|---|---|---|---|---|---|
| t1-orders | 2.89 | 3.12 | 2.42 | 60k | 44k | 72k | 2/2 |
| t2-auth | 4.77 | 5.0 | 4.77 | 59k | 44k | 61k | 2/2 |
| t3-upload | 5.0 | 4.77 | 5.0 | 59k | 44k | 51k | 2/2 |
Durchschnitt: 4.22 ohne vs. 4.06 mit Skill (Delta -0.16). Token pro Lauf: 60k vs. 62k (1.03x); Zeit 38s vs. 44s. Ein-Satz-Gruppe: 4.29 (Zuwachs des Skills gegenüber dem Ein-Satz-Prompt: -0.23; Zuwachs des Ein-Satz-Prompts gegenüber ohne Skill: +0.08); Token des Ein-Satz-Prompts 44k pro Lauf, der Skill kostet also 1.40x so viel wie der Ein-Satz-Prompt.
Was dabei herauskam
- Kein Gewinn. Durchschnitt 4.22 ohne Skill, 4.29 mit einer Ein-Satz-Sicherheits-Checkliste, 4.06 mit dem Skill. Trefferquote bei eingebauten Problemen: 4.8 von 8 pro Lauf ohne, 4.9 mit dem Ein-Satz, 4.5 mit dem Skill.
- Bei der Order-Service-Aufgabe war der Skill etwas schlechter: 2.4 im Schnitt gegenüber 2.9 für die Kontrolle und 3.1 für den Ein-Satz (2 und 3 eingebaute Punkte pro Lauf gefunden, gegenüber 3–4 bei den anderen). Das liegt bei n=2 im Rauschen.
- Beim Auth-Helfer und den Upload-Endpunkten fand jede Gruppe 7 oder 8 von 8 eingebauten Problemen; beides sind klassische Lehrbuchfehler (md5, Path Traversal, pickle, Kommando-Injection), die reines Codex bereits kennt.
- Der Skill wird in 6/6 Läufen gelesen. Er kostet 62k Token pro Lauf gegenüber 60k (1.03x) und 44k mit dem Ein-Satz (1.41x): Die Ein-Satz-Läufe waren am günstigsten, weil sie vor der Antwort weniger lasen.
- Eine Einschränkung der Bewertung: Punkte werden per Regex abgeglichen, ein anders formulierter Befund kann also als verfehlt zählen.
Bewertung nach Dimensionen
| Dimension | Punktzahl | Begründung |
|---|---|---|
| 1_output_quality | 4.06 | Durchschnitt 4.06/5 mit Skill (programmatische Prüfungen, siehe Tabelle pro Aufgabe). |
| 2_lift_vs_no_skill | 1.84 | -0.16 Punkte gegenüber 4.22 ohne Skill (n=2 pro Aufgabe; unter etwa 1 Punkt ist Rauschen). |
| 3_trigger | 5.0 | Skill-Datei in 6/6 Mit-Skill-Läufen gelesen. |
| 4_instructions_portability | 4 | Reine Markdown-Checkliste, überwiegend JS/TS- und Beispiele mit JS/TS- und Supabase-Bezug; auf andere Stacks nur analog übertragbar. |
| 5_efficiency | 5 | 1.03x Token (62k vs. 60k pro Lauf) und 1.17x Zeit (44s vs. 38s). |
| 6_safety_hygiene | 5 | Nur Markdown; die Scanner-Treffer sind Codebeispiele (process.env, fetch, Template-Strings) innerhalb der Checkliste. |
Grenzen dieses Tests
- Drei kleine Reviews einzelner Dateien mit Lehrbuchfehlern; subtilere Probleme (Autorisierung in der Geschäftslogik, Race Conditions, Lieferkette) wurden nicht eingebaut.
- Die Cloud-/Infrastruktur-Checkliste und die Pre-Deployment-Liste des Skills wurden nicht ausgeführt: keine Infrastrukturdateien im Test.
- Nur Recall; Fehlalarme und die Qualität der Reparaturhinweise wurden nicht bewertet.
- n = 2 pro Gruppe und Aufgabe: Unterschiede unter etwa 1 Punkt sind Rauschen.
- Regelbasierte Bewertung misst nur, was die Prüfungen sehen können; Geschmack oder ob ein Ergebnis das bestmögliche ist, lässt sich so nicht beurteilen.
Sicherheit
Siehe security.md. Scan: 5 CRITICAL / 6 HIGH / 4 MEDIUM. Urteil: sicher ausführbar (Sandbox ohne Netzwerk). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Fazit
Eine vernünftige Checkliste, aber reines Codex findet dieselben Lehrbuch-Schwachstellen bereits, und ein Satz mit denselben Kategorien war für etwa 70% der Token ebenso gut. Der Skill fügt bei dieser Art von Code-Review nichts Messbares hinzu; er kann als Prompt für ein Team dienen, das eine einheitliche Checkliste will.
Transkript
Laufprotokoll: security-review (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Spalten: Aufgabe, Gruppe-Lauf, Punktzahl (0-5), Tokens, Sekunden, bestandene Prüfungen, vom Agenten geöffnete Skill-Dateien. t1-orders control-1: Punkte 3.12, Tokens 60493, Sek. 36.1, Prüfungen 1/2, nichts geöffnet t1-orders control-2: Punkte 2.66, Tokens 60831, Sek. 41.9, Prüfungen 1/2, nichts geöffnet t1-orders oneliner-1: Punkte 3.12, Tokens 44382, Sek. 32.3, Prüfungen 1/2, nichts geöffnet t1-orders oneliner-2: Punkte 3.12, Tokens 44393, Sek. 35.0, Prüfungen 1/2, nichts geöffnet t1-orders treatment-1: Punkte 2.19, Tokens 73335, Sek. 69.3, Prüfungen 1/2, geöffnet security-review t1-orders treatment-2: Punkte 2.66, Tokens 72383, Sek. 54.7, Prüfungen 1/2, geöffnet security-review t2-auth control-1: Punkte 4.53, Tokens 59839, Sek. 37.6, Prüfungen 2/2, nichts geöffnet t2-auth control-2: Punkte 5.0, Tokens 59894, Sek. 37.4, Prüfungen 2/2, nichts geöffnet t2-auth oneliner-1: Punkte 5.0, Tokens 44259, Sek. 36.9, Prüfungen 2/2, nichts geöffnet
18 Läufe, 3 Artefakte
Beispielausgabe
SOTA · With the skill: final message (t1-orders, run 1, Codex)
Found six security issues, ordered by severity. Exposure depends on how callers expose these functions; no caller code was provided. 1. **High — SQL injection** — [orders_service.py:9](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:9) `order_id` is interpolated directly into SQL. An input such as `0 OR 1=1` bypasses the intended lookup condition; crafted `UNION` queries could extract other database data. Bind `order_id` as a parameter. 2. **High — Missing cancellation authorization** — [orders_service.py:13](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:13) `current_user` is never used. Anyone able to invoke this function can cancel another user’s order by supplying its ID. Enforce ownership or an authorized administrative role before updating it. 3. **High — Arbitrary file overwrite through exports** — [orders_service.py:39](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:39) `open(path, "w")` immediately truncates any accessible target and follows symlinks. If callers control `path`, they can overwrite files with the service’s permissions—even before the query succeeds. Use server-generated filenames within a controlled export directory and prevent traversal and symlink escapes. 4. **High — Cross-user order export** — [orders_service.py:40](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:40) The export accepts any `user_id` without checking the requester’s identity or permissions. A caller can export another customer’s records. Derive the user ID from authenticated context and explicitly authorize administrative exports. 5. **High if valid — Embedded payment credential and credential logging** — [orders_service.py:4](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:4), [orders_service.py:48](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:48) A live-looking API key is embedded in source and would be printed after successful gateway calls. Its validity is unverified; the current gateway stub always raises. If real, rotate it, load its replacement from secret storage, and remove credential logging. 6. **Medium — Untrusted payment values lack validation** — [orders_service.py:31](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:31), [orders_service.py:45](/var/folders/ln/t0z8fmzd0kz08d3fkz6tskn40000gn/T/asv-security-r-cagonwka/work/orders_service.py:45) Totals trust supplied prices and quantities, while `charge` accepts an amount without matching it to the stored order. If client-controlled, these permit manipulated totals or underpayment. Retrieve authoritative prices, validate quantities and amounts, and compute the charge server-side. No files were changed. This was a static review; the sandbox blocked the attempted in-memory verification.