Was macht sast-skills?
Verwandle deinen LLM-Coding-Assistenten in einen vollwertigen SAST-Scanner. Drop-in Agenten-Fähigkeiten für Claude Code, Codex, Opencode, Cursor und jeden Assistenten, der CLAUDE.md / AGENTS.md Skill-Ordner lädt.
Claude Code mit Opus wird für die Qualität empfohlen; jedes leistungsfähige Modell funktioniert.
Highlights
- 31 Fähigkeiten über 28 Schwachstellenklassen — Injection, defekte Zugriffskontrolle, schwache Kryptografie, Dateihandhabung, Lieferkette, Geschäftslogik und LLM-spezifische Risiken (Prompt Injection, unsichere Ausgabebehandlung).
- Vier-Phasen-Orchestrierung — Aufklärung → parallele Erkennung → konsolidierter Bericht → evidenzbasierte Priorisierung, vollständig gesteuert über
CLAUDE.md/AGENTS.md. - Idempotent und wiederaufnehmbar — jede Phase überspringt Arbeit, deren Ausgabe bereits existiert; nach dem Beheben von Problemen erneut ausführen, um nur veraltete Ergebnisse zu aktualisieren.
- Maschinenlesbare Ausgabe — jede Fähigkeit gibt kanonisches JSON aus;
sast-skills exportaggregiert zu JSON, SARIF 2.1.0 oder HTML für GitHub Code Scanning und CI. - Assistentenübergreifend — identische Fähigkeiten werden für Claude Code (
.claude/skills) und jedenAGENTS.md-Assistenten (.agents/skills) ausgeliefert. - Zero-Config-CLI —
install/update/uninstall/doctor/export, veröffentlicht aus GitHub Actions mit npm-Provenienz (SLSA-Attestierung).
Ablauf
Der Orchestrator führt vier Phasen aus — Aufklärung, parallele Erkennung, Synthese und Priorisierung:
flowchart TD
U(["Benutzer: Schwachstellenscan ausführen"]) --> R{"CLAUDE.md / AGENTS.md Orchestrator"}
R --> S1["Schritt 1 — sast-analysis<br/>Codebasis- und Architekturzuordnung"]
S1 -->|sast/architecture.md| S2["Schritt 2 — paralleler Schwachstellenscan<br/>28 Fähigkeiten: Aufklärung, batchgeprüft, Zusammenführung"]
S2 -->|sast/*-results.md und *-results.json| S3["Schritt 3 — sast-report<br/>Konsolidieren und bewerten"]
S3 -->|sast/final-report.md| S4["Schritt 4 — sast-triage<br/>Falsch-Positiv-Eliminierung,<br/>Schweregradanpassung mit Nachweisen"]
S4 -->|sast/final-report-triaged.md und triaged.json| EXP["npx sast-skills export<br/>JSON, SARIF, HTML"]
EXP --> CS(["GitHub Code Scanning, CI, Dashboards"])
Jeder Schritt ist idempotent: Wenn seine Ausgabedatei bereits existiert, überspringt der Orchestrator sie. Führe den Scan nach der Behebung von Problemen erneut aus, um nur veraltete Ergebnisse zu aktualisieren.
Was er erkennt
Alle Fähigkeiten folgen dem gleichen Drei-Phasen-Muster: Aufklärung → batchgeprüfte Verifikation (parallele Unteragenten, 3 pro Batch) → Zusammenführung. Jede schreibt einen menschenlesbaren Markdown-Bericht und eine kanonische JSON-Ergebnisdatei, die sast-skills export aggregiert.
Aufklärung & Synthese
| Fähigkeit | Rolle |
|---|---|
sast-analysis | Codebasis-Aufklärung, Architekturzuordnung, Bedrohungsmodell |
sast-report | Konsolidieren klassenspezifischer Ergebnisse in einen bewerteten Bericht |
sast-triage | Entfernen von Falsch-Positiven und Anpassen von Schweregraden mit Codebasis-Nachweisen |
Injection
| Fähigkeit | Schwachstellenklasse |
|---|---|
sast-sqli | SQL-Injection |
sast-nosql | NoSQL-Injection (Mongo, Firestore, DynamoDB) |
sast-ldap | LDAP-Filter-/DN-Injection |
sast-graphql | Unsichere GraphQL-Dokumentkonstruktion |
sast-xss | Cross-Site Scripting |
sast-ssti | Server-Side Template Injection |
sast-rce | Remote Code Execution (Befehlsinjection, eval, unsichere Deserialisierung) |
sast-xxe | XML External Entity |
sast-ssrf | Server-Side Request Forgery |
sast-openredirect | Offene Weiterleitung (Phishing / OAuth-Token-Diebstahl) |
Zugriffskontrolle & Authentifizierung
| Fähigkeit | Schwachstellenklasse |
|---|---|
sast-idor | Insecure Direct Object Reference |
sast-missingauth | Fehlende Authentifizierung / defekte funktionsbezogene Autorisierung |
sast-jwt | Unsichere JWT-Implementierungen |
sast-csrf | Cross-Site Request Forgery |
sast-cors | CORS-Fehlkonfiguration |
Dateien, Kryptografie & Laufzeit
| Fähigkeit | Schwachstellenklasse |
|---|---|
sast-pathtraversal | Pfad-/Verzeichnis-Traversal |
sast-fileupload | Unsicherer Dateiupload |
sast-crypto | Schwache Primitiven, schlechte Modi, IV-Wiederverwendung, schwacher PRNG |
sast-prototype | JavaScript-Prototype-Pollution |
sast-redos | Katastrophales Backtracking-Regex-DoS |
sast-race | Wettlaufbedingungen und TOCTOU |
Datenexposition & Lieferkette
| Fähigkeit | Schwachstellenklasse |
|---|---|
sast-hardcodedsecrets | API-Schlüssel / Tokens / Anmeldeinformationen im kundenseitigen Code |
sast-pii | PII- und Anmeldeinformations-Lecks in Logs / Telemetrie / Fehlerseiten |
sast-deps | Bekannt anfällige Abhängigkeiten (CVE in Lockfiles) |
sast-iac | Unsichere IaC (Dockerfile / Terraform / Kubernetes / GitHub Actions) |
Geschäftslogik & LLM-spezifisch
| Fähigkeit | Schwachstellenklasse |
|---|---|
sast-businesslogic | Preis-Manipulation, Workflow-Umgehung, Belohnungsmissbrauch |
sast-promptinjection | Nicht vertrauenswürdiger Text, der einen LLM-Prompt erreicht (OWASP LLM #1) |
sast-llmoutput | Unbestätigte LLM-Ausgabe, die Code / HTML / SQL / Shell-Sinks erreicht (OWASP LLM #2) |
Installation
npx sast-skills install
Der Installer fragt, welchen Assistenten er anvisieren soll (claude / agents / all) und ob in das aktuelle Projekt oder das Benutzer-Home-Verzeichnis installiert werden soll (project / global). Um Eingabeaufforderungen zu überspringen:
npx sast-skills install --yes --assistant claude --scope project
Wenn Ihr Projekt bereits eine
CLAUDE.mdoderAGENTS.mdenthält, weigert sich der Installer standardmäßig, sie zu überschreiben — sichern Sie sie oder verwenden Sie--force.
Manuelle Installation (ohne npx / npm)
Verwenden Sie diesen Pfad, wenn Sie npx nicht ausführen können (Unternehmens-Proxy, npm-Registrierung nicht erreichbar, Offline-Umgebung) oder wenn Sie auf die Quelle dieses Forks statt auf das veröffentlichte npm-Paket setzen möchten. Der CLI-Installer macht nur zwei Dinge — die Orchestrator-Einstiegsdatei im Projektstamm ablegen und jede Fähigkeiten-SKILL.md in das richtige versteckte Verzeichnis spiegeln — also reproduziert ein einfaches cp -R es genau.
1. Holen Sie sich die gebündelten Dateien
git clone https://github.com/mstfknn/sast-skills.git
Alles, was Sie brauchen, befindet sich unter sast-skills/sast-files/:
sast-files/
├── CLAUDE.md # Orchestrator-Einstieg für Claude Code
├── AGENTS.md # Orchestrator-Einstieg für Gemini CLI / Codex / OpenCode / Cursor
├── .claude/skills/sast-*/SKILL.md # 31 Fähigkeiten im Claude Code-Format
└── .agents/skills/sast-*/SKILL.md # Gleiche 31 Fähigkeiten gespiegelt für AGENTS.md-Assistenten
Die beiden Fähigkeitenbäume werden durch npm run sync synchron gehalten — der Inhalt ist identisch, nur der Verzeichnisname unterscheidet sich.
2a. Für Claude Code installieren
Setzen Sie SAST_SRC auf den Clone-Pfad, damit die folgenden Befehle kopierbar bleiben:
export SAST_SRC=/absoluter/pfad/zu/sast-skills
cd /pfad/zu/ihrem-projekt
Projektbereich (empfohlen — versioniert zusammen mit Ihrem Repository):
cp "$SAST_SRC/sast-files/CLAUDE.md" ./CLAUDE.md
cp -R "$SAST_SRC/sast-files/.claude" ./
Wenn Sie bereits eine projektbezogene
CLAUDE.mdverwenden, überschreiben Sie sie nicht — Claude Code liest nur eineCLAUDE.mdpro Projekt. Führen Sie stattdessen den Orchestrator-Inhalt (den Vier-Phasen-Ablauf) in Ihre bestehende Datei zusammen.
Globaler Bereich (Fähigkeiten in jedem Projekt verfügbar; Orchestrator wird weiterhin pro Projekt kopiert):
mkdir -p ~/.claude/skills
cp -R "$SAST_SRC/sast-files/.claude/skills/." ~/.claude/skills/
# Dann in jedem Projekt, in dem Sie den Scan-Ablauf wünschen:
cp "$SAST_SRC/sast-files/CLAUDE.md" /pfad/zu/ihrem-projekt/CLAUDE.md
2b. Für Gemini CLI (und andere AGENTS.md-Assistenten) installieren
export SAST_SRC=/absoluter/pfad/zu/sast-skills
cd /pfad/zu/ihrem-projekt
cp "$SAST_SRC/sast-files/AGENTS.md" ./AGENTS.md
cp -R "$SAST_SRC/sast-files/.agents" ./
AGENTS.md ist die assistentenübergreifende Konvention, die von Gemini CLI, Codex CLI, OpenCode und Cursor beachtet wird. Wenn Ihre Version von Gemini CLI nach GEMINI.md sucht, benennen Sie sie um — der Inhalt bleibt unverändert:
mv AGENTS.md GEMINI.md
3. Installation überprüfen
# Projektbereich (Claude Code)
ls CLAUDE.md && ls .claude/skills/ | head
# Projektbereich (Gemini / AGENTS.md)
ls AGENTS.md && ls .agents/skills/ | head
# Globaler Bereich (Claude Code)
ls ~/.claude/skills/ | head
Sie sollten alle 31 sast-*-Fähigkeitenverzeichnisse sehen. Öffnen Sie das Projekt in Ihrem Assistenten und geben Sie "Schwachstellenscan ausführen" ein — der Orchestrator in CLAUDE.md / AGENTS.md steuert von dort die vier Phasen.
4. Manuelle Installation aktuell halten
cd "$SAST_SRC" && git pull
# Führen Sie die cp-Befehle aus Schritt 2a / 2b erneut aus, um zu aktualisieren — sie sind idempotent.
Wenn Sie den Clone behalten, ist cd "$SAST_SRC" && git pull && <cp erneut ausführen> das manuelle Äquivalent zu npx sast-skills update.
CLI-Befehle
| Befehl | Was er tut |
|---|---|
npx sast-skills install | Kopiert CLAUDE.md / AGENTS.md und den Fähigkeitenbaum in Ihr Projekt oder $HOME |
npx sast-skills update | Aktualisiert eine bestehende Installation mit den aktuell gebündelten Fähigkeitendateien |
npx sast-skills uninstall | Entfernt installierte Fähigkeiten; weigert sich, eine modifizierte CLAUDE.md ohne --force zu löschen |
npx sast-skills doctor | Überprüft eine Installation und meldet OK / MISSING / MODIFIED pro Datei; beendet sich mit Fehler bei Problemen |
npx sast-skills export --input sast/ --format sarif --output report.sarif | Aggregiert sast/*-results.json in JSON, SARIF 2.1.0 oder HTML |
npx sast-skills export --input sast/ --triaged --format sarif | Bevorzugt das priorisierte sast/triaged.json gegenüber rohen Einzelfähigkeitenergebnissen |
npx sast-skills --version | Gibt die installierte CLI-Version aus |
Installations-Flags
| Flag | Zweck |
|---|---|
--yes | Nicht interaktiv; erforderlich, wenn stdin kein TTY ist |
--assistant <claude|agents|all> | Welcher Fähigkeitenbaum installiert werden soll |
--scope <projekt|global> | Installation in ./.claude/skills/ oder $HOME/.claude/skills/ |
--target <pfad> | Explizites Installationsziel (überschreibt --scope) |
--force | Überschreibt eine vorhandene CLAUDE.md / AGENTS.md |
--dry-run | Gibt den Dateiplan aus ohne zu schreiben |
Ausführen eines Scans
Öffnen Sie nach der Installation das Projekt in Ihrem KI-Assistenten und fragen Sie:
Schwachstellenscan ausführen
oder
Finde Schwachstellen in dieser Codebasis
Der Orchestrator übernimmt. Er führt automatisch alle vier Phasen aus, respektiert die Idempotenz (erneute Ausführungen übernehmen nur, was fehlt) und schreibt alles in sast/ im Stammverzeichnis Ihres Projekts.
Ausgabedateien
| Datei | Beschreibung |
|---|---|
sast/architecture.md | Technologie-Stack, Architektur, Einstiegspunkte, Datenflüsse |
sast/*-results.md | Ergebnisse pro Schwachstellenklasse (menschenlesbar) |
sast/*-results.json | Kanonische maschinenlesbare Ergebnisse (von sast-skills export verwendet) |
sast/final-report.md | Konsolidierter Rohbericht nach Schweregrad sortiert |
sast/final-report-triaged.md | Priorisierter Bericht — Falsch-Positive entfernt, Schweregrade mit Nachweisen angepasst |
sast/triaged.json | Kanonische priorisierte Ergebnisse (bevorzugt von sast-skills export --triaged) |
Ergebnis-Schema
Jede Fähigkeit schreibt sast/<skill>-results.json als einfache Ergebnisliste:
{
"findings": [
{
"id": "sast-sqli-0001",
"skill": "sast-sqli",
"severity": "critical|high|medium|low|info",
"title": "SQL injection in /api/user",
"description": "…",
"location": { "file": "src/api/user.js", "line": 42, "column": 10 },
"remediation": "…"
}
]
}
sast-skills export aggregiert diese Dateien in ein Dokument, das in einen run-Umschlag eingewickelt ist — { "run": { "tool": "sast-skills", "version": "<cli-version>" }, "findings": [...] } — und stempelt die Version der CLI, die den Bericht erstellt hat. Der Priorisierungsschritt schreibt sast/triaged.json in derselben umschlossenen Form.
Priorisierte Ergebnisse fügen triage_status (confirmed|upgraded|downgraded|false_positive), triage_original_severity (wenn sich der Schweregrad geändert hat) und triage_evidence mit konkreten Codebasis-Zitaten hinzu.
CI-Integrationen
GitHub Code Scanning (SARIF)
Composite-Aktion unter .github/actions/scan/action.yml:
- uses: mstfknn/sast-skills/.github/actions/scan@main
with:
input: sast/
output: sast-skills.sarif
Dies führt sast-skills export --format sarif aus und lädt das Ergebnis über github/codeql-action/upload-sarif@v3 in Code Scanning hoch.
Pre-Commit-Hook
Kopieren Sie hooks/pre-commit nach .git/hooks/pre-commit, um sast-skills doctor jeden Commit überwachen zu lassen.
Docker
docker build -t sast-skills .
docker run --rm -v "$PWD:/work" sast-skills export --input sast/ --format sarif --output report.sarif
Das gebündelte Dockerfile basiert auf node:20-alpine mit sast-skills als Einstiegspunkt.
Überprüfen & Fehlerbehebung
# Ist die Installation in der erwarteten Form?
npx sast-skills doctor --target . --assistant claude
# Versionsprüfung
npx sast-skills --version
npm view sast-skills version # neueste Version in der Registrierung
# Upgrade
npx sast-skills update
doctor beendet sich mit 0, wenn jede gebündelte Datei im Ziel mit der Kopie der installierten Version übereinstimmt, und mit 1, wenn eine Datei MISSING oder MODIFIED ist. MODIFIED bedeutet, dass die Datei von der gebündelten Kopie abweicht — zu erwarten, wenn Sie die Einstiegsdatei bearbeiten, ansonsten ein Signal, update auszuführen.
Mitwirken
Siehe CONTRIBUTING.md. Entwickler-Loop:
npm install
npm test # vitest-Suite (TDD-Guard aktiviert)
npm run sync # .claude/skills → .agents/skills spiegeln
node scripts/scaffold-skill.js sast-foo # neue Fähigkeit in beiden Bäumen anlegen
node scripts/register-skill.js sast-foo foo "Foo" "Foo injection description"
npm run lint:md # markdownlint