Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ContextHound — Statische Analyse-CLI, die Codebasen auf LLM-Prompt-Injection, Datenextraktion, Jailbreak und unsichere Agenten-/Tool-Schwachstellen scannt. Läuft vollständig offline, integriert sich in CI/CD und gibt Konsolen-, JSON- und SARIF-Berichte aus. | Kitploit
Tools/GitHubGitHub/iulianvostrut/contexthound
Statische AnalyseSchwachstellenscannerCode-AnalyseDatenexfiltrationDevSecOpsSecret-ErkennungLieferkettensicherheitLernen & BildungKI-Sicherheit
GitHubiulianvostrut/contexthound

ContextHound

Statische Analyse-CLI, die Codebasen auf LLM-Prompt-Injection, Datenextraktion, Jailbreak und unsichere Agenten-/Tool-Schwachstellen scannt. Läuft vollständig offline, integriert sich in CI/CD und gibt Konsolen-, JSON- und SARIF-Berichte aus.

2vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigenWebseite

ContextHound

Statisches Analysetool, das Ihre Codebasis auf LLM-Prompt-Injection- und multimodale Sicherheitslücken scannt. Läuft offline, keine API-Aufrufe erforderlich.

CI npm Node.js TypeScript License: MIT


Das ContextHound-Ökosystem

ContextHound ist in Ihrem gesamten Entwicklungs- und Browser-Workflow verfügbar:

ToolFunktionInstallation
CLI / npm-PaketScannt Ihre Codebasis auf Prompt-Injection-Sicherheitslücken. Integriert sich in GitHub Actions, gibt SARIF, JSON, HTML und mehr aus.npm install -g context-hound
VS Code-ErweiterungInline-Ergebnisse während des Codierens, Code-Aktionen, Ausgabekanal, Statusleiste.VS Code Marketplace
Browser-ErweiterungEchtzeit-Scan-Button auf jeder AI-Chat-Oberfläche, DevTools-Panel für LLM-API-Traffic, Popup-Scanner. Chrome und Firefox.Firefox: Kostenlos installieren · Chrome: in Prüfung · Quelle

☕ Unterstützen Sie das Projekt

ko-fi "Kaufe mir einen Kaffee"


Warum ContextHound?

Da LLM-gestützte Anwendungen in Produktionscodebasen immer häufiger werden, hat sich Prompt-Injection als eine der ausbeutbarsten Angriffsflächen erwiesen; die meisten Sicherheitsscanner sind sich dessen nicht bewusst.

ContextHound bringt statische Analyse in Ihre Prompt-Schicht:

  • Erkennt Injektionspfade, bevor sie ein Modell erreichen
  • Markiert durchgesickerte Anmeldeinformationen und interne Infrastruktur, die in Prompts eingebettet sind
  • Erkennt jailbreak-anfällige Formulierungen in Ihren System-Prompts
  • Identifiziert uneingeschränkte agentische Tool-Nutzung, die bewaffnet werden könnte
  • Erkennt RAG-Korpusvergiftung und abgerufene Inhalte, die als Systemanweisungen eingeschleust werden
  • Fängt codierungsbasiertes Schmuggeln (Base64-Anweisungen, die Stringfilter umgehen)
  • Markiert unsichere LLM-Ausgabeverarbeitung: JSON ohne Schema-Validierung und Markdown ohne Bereinigung
  • Erkennt multimodale Angriffsflächen: benutzerbereitgestellte Bild-URLs an Vision-APIs, Pfad-Traversal über Vision-Nachrichtendatei-Lesevorgänge, Transkriptionsausgabe in Prompts eingespeist und OCR-Text in Systemanweisungen injiziert
  • Markiert agentische Risiken: unbegrenzte Agenten-Schleifen, unvalidierte Speicherschreibvorgänge, Plan-Injektion und Tool-Parameter, die System-Prompt-Inhalte erhalten
  • Belohnt gute Sicherheitspraxis: Maßnahmen in Ihren Prompts verringern Ihren Score

Es passt in Ihren bestehenden Workflow als CLI-Befehl, ein npm-Skript oder eine GitHub Action, mit null externen Abhängigkeiten.


Funktionen


Installation

Globale Installation – fügt den Befehl hound zu Ihrem PATH hinzu:```bash npm install -g context-hound

root@kitploit:~
**Projektweise Installation** — auf ein Repository beschränkt, läuft über `npx hound` oder ein npm-Skript:```bash
npm install --save-dev context-hound

Zero-install — keine Installation erforderlich, verwendet die gecachte npm-Registrierungskopie:```bash npx context-hound scan --dir .

root@kitploit:~
## Schnellstart```bash
# Scaffold a config file
hound init

# Scan your project
hound scan --dir ./my-ai-project

# Or via npm script (scans current directory)
npm run hound

# Verbose output, shows remediations and confidence levels
hound scan --verbose

# Fail the build on any critical finding
hound scan --fail-on critical

# Export JSON and SARIF reports
hound scan --format console,json,sarif --out results

# GitHub Annotations (for CI step summaries)
hound scan --format github-annotations

# Markdown report with findings tables
hound scan --format markdown --out report

# Stream findings as JSONL (one JSON object per line)
hound scan --format jsonl | jq '.severity'

# List all rules
hound scan --list-rules

# Explain a rule (or a rule family by prefix)
hound explain INJ-001
hound explain PST --format json

# Fast PR gate — scan only files changed vs. origin/main
hound scan --diff

# Interactive HTML report (self-contained, open in browser)
hound scan --format html --out report

# Re-scan on file changes
hound scan --watch

# Parallel scanning (default is 8; tune for your machine)
hound scan --concurrency 16

# Disable incremental cache for a clean run
hound scan --no-cache

# Baseline mode — only report findings new since the last saved scan
hound scan --format json --out baseline          # save a baseline
hound scan --baseline baseline.json             # compare future scans against it

# Load a custom rule from a local plugin file
hound scan  # plugin declared in .contexthoundrc.json "plugins" field

# Only run high-confidence rules
hound scan --config .contexthoundrc.json  # set minConfidence: "high"

# Fail if any single file scores >= 40
hound scan --fail-file-threshold 40

Exitcodes:


GitHub Actions

Füge deinem Workflow hinzu, um Merges zu blockieren, wenn das Prompt-Risiko zu hoch ist:```yaml

.github/workflows/context-hound.yml

name: Prompt Audit

on: [push, pull_request]

jobs: hound: runs-on: ubuntu-latest permissions: contents: read security-events: write

root@kitploit:~
steps:
  - uses: actions/checkout@v4

  - uses: actions/setup-node@v4
    with:
      node-version: '20'

  - run: npm install -g context-hound

  - run: hound scan --format console,sarif,github-annotations --out results.sarif

  - name: Upload to GitHub Code Scanning
    if: always()
    uses: github/codeql-action/upload-sarif@v3
    with:
      sarif_file: results.sarif
root@kitploit:~
Ergebnisse werden im **Security > Code scanning**-Tab Ihres Repositorys angezeigt. Das `github-annotations`-Format veröffentlicht Inline-PR-Kommentare und schreibt eine Zusammenfassungstabelle in die GitHub-Schrittübersicht.

---

## Konfiguration

Führen Sie `hound init` aus, um eine `.contexthoundrc.json` zu erstellen, oder erstellen Sie eine manuell:```json
{
  "include": ["**/*.ts", "**/*.js", "**/*.py", "**/*.go", "**/*.rs", "**/*.md", "**/*.txt", "**/*.yaml"],
  "exclude": [
    "**/node_modules/**",
    "**/dist/**",
    "**/tests/**",
    "**/attacks/**"
  ],
  "threshold": 60,
  "formats": ["console", "sarif"],
  "out": "results",
  "verbose": false,
  "failOn": "critical",
  "maxFindings": 50,
  "excludeRules": ["JBK-002"],
  "includeRules": [],
  "minConfidence": "medium",
  "failFileThreshold": 80,
  "concurrency": 8,
  "cache": true,
  "plugins": ["./rules/my-custom-rule.js"],
  "baseline": "./baseline.json"
}

Umgebungsvariablen-Überschreibungen

Alle wichtigen Einstellungen können zur Laufzeit ohne Bearbeitung der Konfigurationsdatei überschrieben werden:

.houndignore

Platzieren Sie eine .houndignore-Datei im Stammverzeichnis Ihres Projekts, um Ausschlussmuster hinzuzufügen, ohne .contexthoundrc.json bearbeiten zu müssen. Folgt der gleichen Glob-Syntax; Zeilen, die mit # beginnen, sind Kommentare.

Inline-Unterdrückungen

Unterdrücken Sie einen bekannten Fehlalarm direkt im Quellcode – ohne eine Regel für das gesamte Repository deaktivieren zu müssen. Direktiven werden in jedem Dateityp erkannt (die umgebende Kommentar-Syntax spielt keine Rolle):```ts // hound-disable-next-line INJ-001 -- userInput is a validated enum const prompt = Summarise the ${userInput} report;

const cmd = run(${shell}); // hound-disable-line CMD-001

// hound-disable RAG-007 -- trusted internal corpus only context.push(doc.metadata.title); context.push(doc.metadata.author); // hound-enable RAG-007

root@kitploit:~
- `hound-disable-line [RULE...]` — Unterdrückt Fundstellen in derselben Zeile
- `hound-disable-next-line [RULE...]` — Unterdrückt Fundstellen in der folgenden Zeile
- `hound-disable [RULE...]` … `hound-enable [RULE...]` — Unterdrückt einen Block (wird am Dateiende automatisch geschlossen)
- Lassen Sie Regel-IDs weg, um **alle** Regeln an dieser Stelle zu unterdrücken; listen Sie eine oder mehrere (durch Leerzeichen/Kommas getrennt) auf, um den Bereich einzugrenzen
- Text nach `--` ist eine freiformatierte Begründung, die in Berichten angezeigt wird

Führen Sie mit `--report-unused-suppressions` aus, um Direktiven aufzulisten, die keiner Fundstelle mehr entsprechen, damit tote Unterdrückungen bereinigt werden können:```bash
hound scan --report-unused-suppressions

Regelvoreinstellungen

Aktivieren Sie eine kuratierte Teilmenge von Regeln mit --preset anstatt IDs aufzulisten. Voreinstellungen vereinigen sich mit allen includeRules, die Sie bereits haben, und mehrere können kombiniert werden:```bash hound scan --preset owasp-llm-top10 hound scan --preset mcp,agentic hound scan --list-presets # show all presets and their rule patterns

root@kitploit:~
| Voreinstellung | Regeln |
|--------|-------|
| `owasp-llm-top10` | INJ, JBK, EXF, OUT, RAG, TOOL, SCH, DOS, VIS |
| `injection` | INJ, RAG, ENC |
| `jailbreak` | JBK |
| `exfiltration` | EXF |
| `agentic` | AGT, MCP, TOOL |
| `mcp` | MCP |
| `supply-chain` | SCH |
| `prompt-files` | INJ, JBK, EXF, ENC, SKL |

### pre-commit-Hook

ContextHound wird mit einem [pre-commit](https://pre-commit.com)-Hook ausgeliefert. Fügen Sie ihn Ihrer `.pre-commit-config.yaml` hinzu:```yaml
repos:
  - repo: https://github.com/IulianVOStrut/ContextHound
    rev: v2.0.0
    hooks:
      - id: contexthound
        # optional — scan only changed files and fail on high-severity findings:
        # args: ["--diff", "HEAD", "--fail-on", "high"]

Benutzerdefinierte Regel-Plugins

Jede .js-Datei, die ein Rule oder Rule[] exportiert, kann als Plugin geladen werden:```js // my-rule.js module.exports = { id: 'CUSTOM-001', title: 'Proprietary data pattern in prompt', severity: 'high', confidence: 'high', category: 'injection', remediation: 'Remove internal identifiers from prompts.', check(prompt) { if (prompt.text.includes('INTERNAL_PATTERN')) { return [{ evidence: 'INTERNAL_PATTERN', lineStart: 1, lineEnd: 1 }]; } return []; }, };

root@kitploit:~
Verweise es in der `.contexthoundrc.json`:```json
{ "plugins": ["./my-rule.js"] }

Plugin-Regeln unterliegen denselben excludeRules-, includeRules- und minConfidence-Filtern wie eingebauten Regeln.

Baseline / Diff-Modus

Speichern Sie eine Baseline nach einem ersten Scan, und melden Sie dann nur neue Ergebnisse bei nachfolgenden Scans:```bash

Save baseline

hound scan --format json --out baseline

Future scans only report new issues

hound scan --baseline baseline.json

root@kitploit:~
Findings are matched by `ruleId + file` — Zeilenverschiebungen lösen keine falschen Neu-Fund-Meldungen aus.

### Nur geänderte Dateien (`--diff`)

Für schnelle Pull-Request-Prüfungen durchsuchen Sie nur die Dateien, die sich gegenüber einem Git-Referenz geändert haben, anstatt des gesamten Baums:```bash
hound scan --diff               # vs. origin/main (default)
hound scan --diff main          # vs. a named branch
hound scan --diff HEAD~5        # vs. an arbitrary ref

Umfasst festgeschriebene, bereitgestellte, unbereitgestellte und nicht ignorierte, aber nicht verfolgte Dateien. Wenn Git nicht verfügbar ist oder der Referenz nicht aufgelöst werden kann (z. B. ein flacher CI-Klon), gibt ContextHound eine Warnung aus und führt stattdessen einen vollständigen Scan durch, anstatt stillschweigend durchzugehen. Kombinieren Sie mit --baseline für einen Diff auf Befundebene, oder verwenden Sie --diff allein für das schnellste PR-Feedback.


Risikobewertung

Jeder Befund trägt Risikopunkte, berechnet als:``` risk_points = severity_weight × confidence_multiplier

root@kitploit:~
Punkte werden summiert, auf 100 begrenzt und klassifiziert:

| Score | Level | Suggested action |
|-------|-------|-----------------|
| 0-29 | 🟢 Niedrig | Keine Maßnahme erforderlich |
| 30-59 | 🟡 Mittel | Vor dem Merge prüfen |
| 60-79 | 🟠 Hoch | Vor dem Merge beheben |
| 80-100 | 🔴 Kritisch | Bereitstellung blockieren |

Wenn Ihre Prompts explizite Sicherheitssprache enthalten (Eingabe-Trennzeichen, Anweisungen zur Verweigerung der Preisgabe, Tool-Allowlists), werden die Risikopunkte für diesen Prompt proportional reduziert.

---

## Regeln

### A. Injection (INJ)

| ID | Severity | Beschreibung |
|----|----------|-------------|
| INJ-001 | High | Direkte Benutzereingabe ohne Trennzeichen in Prompt eingefügt |
| INJ-002 | Medium | Fehlende „Behandle Benutzerinhalt als Daten“-Grenzsprache |
| INJ-003 | High | RAG/abgerufener Kontext ohne Trennzeichen für nicht vertrauenswürdige Inhalte eingefügt |
| INJ-004 | High | Tool-Nutzungsanweisungen durch Benutzerinhalt überschreibbar |
| INJ-005 | High | Serialisiertes Benutzerobjekt (`JSON.stringify`) direkt in eine Prompt-Vorlage interpoliert |
| INJ-006 | Medium | HTML-Kommentar mit versteckten Anweisungsverben in benutzergesteuertem Inhalt |
| INJ-007 | Medium | Benutzereingabe in Codeblock-Trennzeichen ohne vorheriges Entfernen von Backticks eingeschlossen |
| INJ-008 | High | HTTP-Anfragedaten (`req.body`, `req.query`, `req.params`) in `role: "system"`-Vorlagenstring interpoliert |
| INJ-009 | Critical | HTTP-Anfragekörper direkt als `messages`-Array geparst — Angreifer kontrolliert Rolle und Inhalt |
| INJ-010 | High | Klartext-Rollenlabel-Transkript (`User:`, `Assistant:`, `system:`) durch Verkettung nicht vertrauenswürdiger Eingabe erstellt |
| INJ-011 | High | Browser-DOM oder URL-Quelle (`window.location`, `document.cookie`, `getElementById`) direkt in LLM-Aufruf eingespeist |
| INJ-012 | High | Gesprächsverlauf ohne Bereinigung in `messages`-Array eingestreut |
| INJ-013 | High | Tool-/Funktionsaufrufergebnis ohne Bereinigung in `messages` eingefügt |
| INJ-014 | High | LLM-Vervollständigung als Benutzerrollen-Inhalt in einen nachfolgenden LLM-Aufruf weitergeleitet |
| INJ-015 | High | Nicht vertrauenswürdige externe Eingabe (HTTP/CLI/DOM) fließt in einen Prompt — namensagnostische **Taint-Analyse**, folgt Aliasen, berücksichtigt Bereinigungen |

### B. Exfiltration (EXF)

| ID | Severity | Beschreibung |
|----|----------|-------------|
| EXF-001 | Critical | Prompt verweist auf Geheimnisse, API-Schlüssel oder Anmeldeinformationen |
| EXF-002 | Critical | Prompt weist Modell an, System-Prompt oder versteckte Anweisungen preiszugeben |
| EXF-003 | High | Prompt zeigt Zugriff auf vertrauliche oder private Daten an |
| EXF-004 | High | Prompt enthält interne URLs oder Infrastruktur-Hostnamen |
| EXF-005 | High | Sensible Variable (Token, Passwort, Schlüssel) als Base64 in der Ausgabe codiert |
| EXF-006 | High | Vollständiger Prompt oder `message`-Array via `console.log` / `logger.*` ohne Schwärzung protokolliert |
| EXF-007 | Critical | Tatsächlicher Geheimniswert in Prompt eingebettet zusammen einer „niemals preisgeben“-Anweisung |

### C. Jailbreak (JBK)

| ID | Severity | Beschreibung |
|----|----------|-------------|
| JBK-001 | Critical | Bekannter Jailbreak-Satz erkannt („ignore instructions“, „DAN“, usw.) |
| JBK-002 | High | Schwache Sicherheitsformulierung („always comply“, „no matter what“) |
| JBK-003 | High | Rollenspiel-Notausstieg, der Sicherheitsbeschränkungen untergräbt |
| JBK-004 | High | Agent angewiesen, ohne Bestätigung oder menschliche Überprüfung zu handeln („proceed automatically“, „no confirmation needed“) |
| JBK-005 | High | Spurenlöschungs- oder Vertuschungsanweisung („delete logs“, „leave no trace“) |
| JBK-006 | High | Policy-Legitimitätsrahmen kombiniert mit einer unsicheren Handlungsanfrage („as a penetration tester, escalate privileges“) |
| JBK-007 | High | Modellidentitäts-Spoofing — behauptet, ein anderes KI-Modell zu sein, kombiniert mit einer Sicherheitsumgehungsanweisung |
| JBK-008 | High | Prompt-Komprimierungsangriff — Anweisung, den System-Prompt zu komprimieren oder zusammenzufassen |
| JBK-009 | High | Verschachtelte Anweisungsinjektion — imperative Befehle, eingewickelt in einen „sicheren/harmlosen Zusammenfassungs/Übersetzungs“-Rahmen |

### D. Unsafe Tool Use (TOOL)

| ID | Severity | Beschreibung |
|----|----------|-------------|
| TOOL-001 | Critical | Unbegrenzte Tool-Ausführung („run any command“, „browse anywhere“, Backtick-Shell-Ersetzung) |
| TOOL-002 | Medium | Tool-Nutzung ohne Allowlist oder Nutzungsrichtlinie beschrieben |
| TOOL-003 | High | Code-Ausführung ohne Sandbox-Einschränkungen erwähnt |
| TOOL-004 | Critical | Tool-Beschreibung oder Schema-Feld aus einer benutzergesteuerten Variable bezogen |
| TOOL-005 | Critical | Tool-Name oder Endpunkt-URL aus benutzergesteuerter Eingabe (`req.body`, `req.query`, usw.) bezogen |

### E. Command Injection (CMD)

Erkennt anfällige Muster im Code rund um KI-Tools, bei denen eine erfolgreiche Prompt-Injection zu einer vollständigen Befehlsausführung eskalieren kann. Basierend auf echten CVEs, die von Cyera Research Labs (2025) in Googles Gemini CLI gefunden wurden.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| CMD-001 | Critical | Shell-Befehl mit unbereinigter Variableninterpolation erstellt — JS/TS (`execSync(\`cmd ${var}\``), Python (`subprocess.run(f"cmd {var}")`), PHP (`shell_exec($var)`), Go (`exec.Command` + `fmt.Sprintf`), Rust (`Command::new` + `format!`) |
| CMD-002 | High | Unvollständige Befehlsersetzungsfilterung: blockiert `$()` aber nicht Backticks oder umgekehrt |
| CMD-003 | High | Dateipfad von `glob.sync` oder `readdirSync` direkt in einem Shell-Befehl ohne Bereinigung verwendet |
| CMD-004 | Critical | Python `subprocess.run`/`subprocess.call` mit `shell=True` und einem Variablen- oder f-String-Befehlsargument aufgerufen |
| CMD-005 | Critical | PHP `shell_exec`, `system`, `passthru`, `exec` oder `popen` mit einem `$variable`-Argument aufgerufen |

### F. RAG Poisoning (RAG)

Erkennt architektonische Fehler in Retrieval-Augmented-Generation-Pipelines, die es abgerufenen oder aufgenommenen Inhalten erlauben, systemseitige Anweisungen zu überschreiben.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| RAG-001 | High | Abgerufener oder externer Inhalt der Rolle `system` in einem `messages`-Array zugewiesen |
| RAG-002 | High | Anweisungsähnliche Phrasen („system prompt:“, „always return“, „never redact“) in einer Dokumentenaufnahmeschleife erkannt |
| RAG-003 | High | Agent-Gedächtnisspeicher direkt aus benutzergesteuerter Eingabe ohne Validierung geschrieben |
| RAG-004 | Medium | Prompt weist Modell an, abgerufenen Kontext als höchste Priorität zu behandeln und Entwickleranweisungen zu überschreiben |
| RAG-005 | Medium | Provenienzfreies Retrieval — Chunks ohne Prüfung der Quellmetadaten in Prompt eingefügt |
| RAG-006 | High | Kein ACL- oder Vertrauensstufenfilter angewendet, bevor das Retrieval in den Prompt gelangt |

### G. Encoding (ENC)

Erkennt codierungsbasierte Injektions- und Umgehungstechniken, bei denen Base64 oder ähnliche Codierungen verwendet werden, um Anweisungen an stringbasierten Filtern vorbeizuschmuggeln.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| ENC-001 | Medium | `atob`, `btoa` oder `Buffer.from(x, 'base64')` auf einer benutzergesteuerten Variable in der Nähe der Prompt-Konstruktion aufgerufen |
| ENC-002 | High | Versteckte Unicode-Steuerzeichen (Nullbreitenzeichen, bidirektionale Überschreibungen) in der Nähe von Anweisungsschlüsselwörtern erkannt |

### H. Output Handling (OUT)

Behandelt die Ausgabeseite der LLM-Pipeline — wie Ihre Anwendung Modellantworten verarbeitet. Unsichere Verarbeitung kann eine Prompt-Injection-Nutzlast in einen Exploit auf Anwendungsebene verwandeln.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| OUT-001 | Critical | `JSON.parse()` (JS/TS) oder `json.loads()` (Python) auf LLM-Ausgabe ohne Schema-Validierung (Zod, AJV, Joi, Pydantic, Marshmallow, usw.) aufgerufen |
| OUT-002 | Critical | LLM-generiertes Markdown oder HTML ohne DOMPurify oder gleichwertigen Bereiniger gerendert |
| OUT-003 | Critical | LLM-Ausgabe direkt als Argument für `exec()`, `eval()` oder `db.query()` verwendet |
| OUT-004 | Critical | Python `eval()` oder `exec()` mit LLM-generierter Ausgabe als Argument aufgerufen |

### I. Multimodal (VIS)

Behandelt Vertrauensgrenzverletzungen spezifisch für Vision, Audio/Video und OCR-Pipelines. Multimodale Eingaben sind ein aufkommender Injektionsvektor: Ein Angreifer, der eine Bild-URL, eine Audiodatei oder ein gescanntes Dokument kontrolliert, kann die Muster dieser Regeln nutzen, um Anweisungen in das Modell einzuschleusen.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| VIS-001 | Critical | Benutzergelieferte Bild-URL oder Base64-Daten ohne Domain- oder MIME-Validierung an eine Vision-API weitergeleitet (gpt-4o, Claude 3, Gemini Vision) |
| VIS-002 | Critical | `fs.readFile`/`readFileSync` mit einem benutzergesteuerten Pfad in einer Datei aufgerufen, die auch eine Vision-API-Nachricht erstellt — Pfad-Traversal in multimodale Eingabe |
| VIS-003 | High | Audio/Video-Transkriptionsausgabe (Whisper, AssemblyAI, Deepgram, usw.) direkt ohne Bereinigung in Prompt-Nachrichten eingespeist — RAG-Vergiftung durch Audioquelle |
| VIS-004 | High | OCR-Ausgabe (Tesseract, Google Vision) in eine `role: "system"`-Nachricht oder System-Prompt-Variable interpoliert |

### J. Skills Marketplace (SKL) — v1.1

Zielt auf OpenClaw `SKILL.md`-Dateien und alle Markdown-Dateien in `skills/`-Verzeichnissen ab. Schlägt an bei Selbstautorisierungsangriffen, Remote-Skill-Laden, injizierten Anweisungen, unsicherem Befehlsversand, Zugriff auf sensible Pfade, Privilegieneskalationsbehauptungen und hartcodierten Anmeldeinformationen im YAML-Frontmatter.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| SKL-001 | Critical | Skill-Körper weist Agenten an, andere Skill-Dateien zu schreiben oder zu ändern — Selbstautorisierungsangriff, der über Agent-Neustarts hinweg bestehen bleibt |
| SKL-002 | Critical | Skill-Körper weist Agenten an, Skills von einer externen URL abzurufen oder zu laden — erlaubt Angreifer, Skill-Verhalten nach der Installation zu ändern |
| SKL-003 | Critical | Skill-Körper enthält Prompt-Injektionsphrasen, die auf Kernanweisungen des Agenten abzielen (`ignore previous instructions`, `you are now unrestricted`, usw.) |
| SKL-004 | High | Skill-Frontmatter verwendet `command-dispatch: tool` mit `command-arg-mode: raw` — leitet rohe Benutzereingabe an ein Tool weiter und umgeht die Sicherheitslogik des Modells |
| SKL-005 | High | Skill-Körper verweist auf sensible Dateisystempfade (`~/.ssh`, `~/.env`, `/etc/passwd`, `../../`) für den Agenten zum Lesen und potenziellen Exfiltrieren |
| SKL-006 | High | Skill-Körper beansprucht erhöhte Privilegien oder weist Agenten an, andere installierte Skills zu überschreiben oder zu deaktivieren |
| SKL-007 | Critical | Hartcodierter Anmeldeinformationswert (API-Schlüssel, Token, Passwort) im YAML-Frontmatter gefunden — für jeden offengelegt, der den Skill erhält oder installiert |
| SKL-008 | Critical | Heartbeat C2 — Skill plant periodischen Remote-Abruf, um nach einer sauberen Installation stillschweigend seine eigenen Anweisungen zu überschreiben |
| SKL-009 | Critical | Agentenidentitätsverweigerung — Skill weist Agenten an zu leugnen, KI zu sein, zu behaupten, menschlich zu sein, oder eine trügerische Persona anzunehmen |
| SKL-010 | Critical | Anti-Scanner-Umgehung — Skill enthält Text, der explizit dazu entwickelt wurde, Sicherheitsaudit-Tools in die Irre zu führen |
| SKL-011 | Critical | SOUL.md / IDENTITY.md-Persistenz — Skill schreibt Anweisungen in Agentenidentitätsdateien, die eine Deinstallation überleben |
| SKL-012 | High | Selbstverbreitender Wurm — Skill weist Agenten an, sich per SSH oder `curl\|bash` auf erreichbare Hosts auszubreiten |
| SKL-013 | High | Autonome Finanztransaktionen — Skill führt Kryptotransaktionen aus oder hält private Schlüssel ohne pro-Transaktions-Benutzerbestätigung |

> **Scanning von OpenClaw-Skills:** Führen Sie `npx hound scan --dir ./skills` aus oder fügen Sie `**/skills/**/*.md` und `**/SKILL.md` zu Ihrer `include`-Konfiguration hinzu. ContextHound gibt Skill-Dateien automatisch als `code-block` für mehrzeilige Regelanalyse aus.

### K. Agentic (AGT) — v1.3 / v1.9

Zielt auf Risiken ab, die spezifisch für mehrstufige agentische Systeme sind: unbegrenzte Ausführungsschleifen, unvalidierte Speicherschreibvorgänge, Benutzereingabe, die in Agentenplanung einfließt, Vertrauensgrenzverletzungen zwischen Agenten und OWASP Agentic AI Security Issues (ASI)-Lücken.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| AGT-001 | Critical | Tool-Call-Parameter empfängt System-Prompt-Inhalt — `tool_call`/`function_call`-Argumentwert enthält `system:`- oder `instructions:`-Feldinhalte |
| AGT-002 | High | Agentenschleife ohne Iterations- oder Zeitüberschreitungsschutz — keine `max_iterations`, `max_steps`, `max_turns`, `timeout` oder `recursion_limit` in Agentenkonfiguration oder -code |
| AGT-003 | High | Agentenspeicher aus unvalidierter LLM-Ausgabe geschrieben — `memory.save()`, `memory.add()` oder `vectorstore.upsert()` mit einer rohen Modellantwortvariable aufgerufen |
| AGT-004 | High | Plan-Injection — Benutzereingabe direkt in Agentenplanungs-, Aufgaben- oder Ziel-Prompt ohne Vertrauensgrenzen-Umhüllung interpoliert |
| AGT-005 | Critical | Agent vertraut beanspruchter Identität ohne kryptografische Verifikation — Vertrauensentscheidung basierend auf `agentId`-, `sender`-, `source`- oder `from_agent`-Feld ohne HMAC-, JWT- oder Shared-Secret-Verifikation |
| AGT-006 | High | Rohe Agentenausgabe ohne Validierung als Eingabe für einen anderen Agenten verkettet — `.run()`, `.invoke()` oder `.generate()` mit direktem `.output`/`.content`/`.result` eines anderen Agenten als Argument aufgerufen |
| AGT-007 | Critical | Agentenselbstmodifikation — Agent überschreibt zur Laufzeit seinen eigenen `system_prompt`, `instructions` oder `tools`-Liste mit LLM-generiertem Inhalt |
| AGT-008 | Critical | ASI03 — Agent ruft `assumeRole`, `grantAccess` oder `setPermissions` mit einem aus LLM-Ausgabe abgeleiteten Wert auf; Privilegieneskalation durch Prompt-Injection |
| AGT-009 | High | ASI04 — Agent lädt zur Laufzeit ein Tool oder Plugin aus einem variablen Pfad oder dynamischen Import, was Supply-Chain-Substitution ermöglicht |
| AGT-010 | High | ASI07 — Rohe Agentenausgabe per `send`/`route`/`dispatch` ohne HMAC, JWT-Signierung oder Schema-Validierung an einen anderen Agenten weitergeleitet |
| AGT-011 | High | ASI08 — Fehler im Agentenplanschritt still abgefangen (kein Rethrow, kein Fehlerzustands-Flag); nachgelagerte Schritte fahren mit schlechtem oder unvollständigem Zustand fort |

### L. MCP Security (MCP) — v1.7 / v1.8

Behandelt Vertrauensgrenz- und Supply-Chain-Risiken, die spezifisch für das Model Context Protocol sind. MCP führt eine neue Angriffsfläche ein: Tool-Beschreibungen, Transport-URLs, Ereignis-Nutzlasten und gemeinsamer serverübergreifender Zustand können alle Injektions- oder Privilegieneskalations-Nutzlasten tragen.

| ID | Severity | Beschreibung |
|----|----------|-------------|
| MCP-001 | Critical | MCP-Tool-Beschreibung ohne Bereinigung in LLM-Prompt injiziert — roher `tool.description`-Wert in `role: "system"` oder `messages.push()` verwendet |
| MCP-002 | High | MCP-Tool mit dynamischem Namen oder Beschreibung registriert — erstes Argument von `server.tool()` ist eine Variable oder ein Template-Literal, was Rug-Pull-Angriffe nach der Genehmigung ermöglicht |
| MCP-003 | High | MCP sampling/createMessage-Handler ohne menschliche Genehmigungssicherung — `setRequestHandler(CreateMessageRequestSchema)` ohne `requireHumanApproval`-, `confirm`- oder `approve`-Prüfung |
| MCP-004 | Medium | MCP-Transport-URL aus Variable konstruiert — `SSEClientTransport` oder `WebSocketClientTransport` mit `new URL(variable)` anstelle eines statischen Strings initialisiert |
| MCP-005 | High | MCP stdio-Transport verwendet `shell: true` — macht den Befehlsstring shell-interpoliert und injizierbar, wenn ein Argument benutzergesteuert ist |
| MCP-006 | Critical | MCP Confused Deputy — Auth-Token aus MCP-Anfrage ohne erneute Validierung an nachgelagerte API weitergeleitet; `Authorization`-Header-Wert direkt von `request.params`, `context` oder `event` bezogen |
| MCP-007 | High | Cross-MCP-Kontextvergiftung — geteilter/globaler Kontextspeicher aus MCP-Ausgabe ohne Hash-, Signatur- oder Provenienzprüfung geschrieben |
| MCP-008 | High | MCP stdio-Transportbefehl aus variablem Pfad geladen — `StdioClientTransport`/`StdioServerTransport` `command:`-Feld ist eine Variable anstelle eines statischen String-Literals |
| MCP-009 | High | MCP-Sitzungs-ID als Authentifizierungsentscheidung ohne Ablaufprüfung verwendet — `sessionId`/`connectionId`-Gleichheitsvergleich ohne TTL, `expiresAt` oder `isExpired`-Schutz (Replay-Angriff) |
| MCP-010 | Critical | MCP-Transportereignis-Nutzlast ohne Bereinigung in LLM-Kontext injiziert — Ereignis-/Nachrichten-`.data`, `.content` oder `.payload` direkt in `messages.push()` oder einem `content:`-Feld verwendet |

---

## Beispielausgabe```
=== ContextHound Prompt Audit ===

src/prompts/assistant.ts (file score: 73)
  [HIGH] INJ-001: Direct user input concatenation without delimiter
    File: src/prompts/assistant.ts:12
    Evidence: Answer the user's question: ${userInput}
    Confidence: medium
    Risk points: 23
    Remediation: Wrap user input with clear delimiters (e.g., triple backticks)
                 and label it as "untrusted user content".

  [CRITICAL] EXF-001: Prompt references secrets, API keys, or credentials
    File: src/prompts/assistant.ts:8
    Evidence: The database password is: secret123.
    Confidence: high
    Risk points: 50
    Remediation: Remove all secret values from prompts. Use environment
                 variables server-side; never embed credentials in prompt text.

────────────────────────────────────────────────────────
Repo Risk Score: 87/100 (CRITICAL)
Threshold: 60
Total findings: 5
By severity: critical: 2  high: 2  medium: 1

✗ FAILED - score meets or exceeds threshold.

Projektstruktur```

src/ ├── cli.ts # CLI entry point (Commander.js) ├── types.ts # Shared TypeScript types ├── config/ │ ├── defaults.ts # Default include/exclude globs and settings │ └── loader.ts # .contexthoundrc.json loader + env var overrides ├── scanner/ │ ├── discover.ts # File discovery via fast-glob │ ├── extractor.ts # Prompt extraction (raw, code, structured) │ ├── languages.ts # LLM API trigger patterns per language extension │ ├── cache.ts # Incremental scan cache (.hound-cache.json) │ └── pipeline.ts # Orchestrates the full scan; parallel + cache + plugins ├── rules/ │ ├── types.ts # Rule interface and scoring helpers │ ├── injection.ts # INJ-* rules │ ├── exfiltration.ts # EXF-* rules │ ├── jailbreak.ts # JBK-* rules │ ├── unsafeTools.ts # TOOL-* rules │ ├── commandInjection.ts # CMD-* rules │ ├── rag.ts # RAG-* rules │ ├── encoding.ts # ENC-* rules │ ├── outputHandling.ts # OUT-* rules │ ├── multimodal.ts # VIS-* rules │ ├── skills.ts # SKL-* rules │ ├── agentic.ts # AGT-* rules │ ├── mcp.ts # MCP-* rules │ ├── supplyChain.ts # SCH-* rules │ ├── dos.ts # DOS-* rules │ ├── mitigation.ts # Mitigation presence detection │ └── index.ts # Rule registry ├── runtime/ │ ├── index.ts # createGuard() — runtime message inspection API │ ├── inspect.ts # Core inspection logic for live message arrays │ └── types.ts # RuntimeMessage, InspectResult, GuardConfig types ├── scoring/ │ └── index.ts # Risk score calculation and rule filtering └── report/ ├── console.ts # ANSI-coloured terminal output ├── json.ts # JSON report builder ├── sarif.ts # SARIF 2.1.0 report builder ├── githubAnnotations.ts# GitHub Actions annotation formatter ├── markdown.ts # Markdown report with findings tables ├── jsonl.ts # JSONL streaming formatter └── html.ts # Self-contained interactive HTML report attacks/ # Example injection strings (not executed against models) tests/ ├── fixtures/ # Sample prompts for testing ├── rules.test.ts # Unit tests for all rules ├── scoring.test.ts # Unit tests for scoring logic ├── scanner.test.ts # Integration tests for the scan pipeline ├── extractor.test.ts # Unit tests for prompt extraction ├── formatters.test.ts # Unit tests for all report formatters ├── mitigation.test.ts # Unit tests for mitigation detection └── cli.test.ts # CLI integration tests (init, list-rules, exit codes) .github/ ├── action.yml # Reusable composite GitHub Action └── workflows/ └── context-hound.yml # CI workflow

root@kitploit:~
## Benchmark

ContextHound enthält einen markierten Benchmark-Datensatz zur Messung der Falsch-Positiv- und Erkennungsraten. Führen Sie ihn nach dem Erstellen aus:```bash
npm run benchmark

Der Benchmark durchsucht zwei Fixture-Verzeichnisse:

VerzeichnisZweck
benchmarks/safe/5 Dateien mit echten sicheren Mustern — erwarten Sie 0 Funde
benchmarks/unsafe/8 Dateien mit echten Schwachstellen — jeweils eine Regel

Ergebnisse auf v1.4.0:``` File-level FP rate: 0.0% (0 / 5 safe files produced findings) Detection rate: 100.0% (8/8 expected findings triggered)

root@kitploit:~
Der Benchmark beendet sich mit Exit-Code 1, wenn Fehlalarme (false positives) oder übersehene Bedrohungen (false negatives) gefunden werden, was ihn als CI-Qualitätsgate für Regeländerungen geeignet macht. Um eine Testvorlage hinzuzufügen, legen Sie eine Datei in `benchmarks/safe/` oder `benchmarks/unsafe/` ab und aktualisieren Sie `benchmarks/labels.json` mit den erwarteten Funden.

### Präzision/Recall pro Regel

Der Benchmark gibt außerdem eine **Signaltabelle pro Regel** aus (schlechtestes F1 zuerst), sodass Regeln mit geringer Präzision leicht zu erkennen sind – True/False Positives, False Negatives, Präzision, Recall und F1 für jede gekennzeichnete Regel. Die FP-Zahlen stammen aus den `safe/` Testvorlagen (Ground Truth: null Funde); TP/FN stammen aus den gekennzeichneten `unsafe/` Testvorlagen. Übergeben Sie `--report <path>`, um auch einen maschinenlesbaren JSON-Bericht für Dashboards oder CI-Trendverfolgung auszugeben:```bash
npm run benchmark -- --report bench-report.json

Browser-Erweiterung

Die ContextHound-Browsererweiterung bringt Echtzeit-Prompt-Injection-Erkennung in Chrome und Firefox. Sie verwendet die gleiche Regel-Engine wie die CLI, lokal kompiliert und gebündelt – keine Netzwerkanfragen, kein Backend.

Status: Die Firefox-Erweiterung ist live – Installation von Firefox Add-ons. Die Chrome-Einreichung wartet auf die Überprüfung durch den Web Store. Quelltext verfügbar unter github.com/IulianVOStrut/ContextHound-Extensions.

Funktionen

Scan-Pille Ein leichtgewichtiger Indikator erscheint neben jedem KI-Chat-Eingabefeld auf jeder Webseite. Während Sie tippen, scannt die Erweiterung den Text gegen 70 Erkennungsregeln und zeigt einen Risikowert und Ergebnisse in einem Dropdown-Panel an – keine Seitennavigation erforderlich.

DevTools-Panel Öffnen Sie die Browser-Entwicklertools und wählen Sie den Reiter 'ContextHound', um den Live-LLM-API-Datenverkehr zu überwachen. Die Erweiterung fängt ausgehende Anfragen an OpenAI, Anthropic, Google Gemini, Mistral, Groq, Cohere, DeepSeek und andere Dienste ab und scannt sowohl den Anforderungstext als auch die Antwort auf Injection-Inhalte. Ein Badge in der Symbolleiste zeigt den höchsten Risikowert an, der in der aktuellen Sitzung gesehen wurde.

Popup-Scanner Klicken Sie auf das Symbol in der Symbolleiste, um manuell Text einzufügen und zu scannen. Nützlich, um einen Prompt oder eine Systemanweisung von Dritten zu überprüfen, bevor Sie sie verwenden.

Wie die Browsererweiterung Anforderungstexte erfasst

Die DevTools-HAR-API (onRequestFinished) von Chrome und Firefox enthält nicht zuverlässig die Bytes des Anforderungstexts für Streaming/SSE-Antworten, die die meisten KI-Chat-Dienste verwenden. Die Erweiterung löst dies mit einem zweischichtigen Ansatz:

  1. chrome.webRequest.onBeforeRequest fängt rohe Anforderungsbytes im Service Worker ab, bevor die Anfrage gesendet wird, und speichert sie kurz in chrome.storage.session (TTL: 5 Minuten).
  2. Wenn onRequestFinished ausgelöst wird und postData fehlt, ruft die DevTools-Seite den zwischengespeicherten Körper vom Service Worker über eine POP_BODY_CACHE-Nachricht ab.

Datenschutz

Die Erweiterung sammelt keine Benutzerdaten. Das gesamte Scannen erfolgt lokal. Siehe Datenschutzerklärung.


Einschränkungen

  • Regeln verwenden Regex und strukturelle Heuristiken, keine vollständige semantische Analyse. Falschpositive sind möglich; überprüfen Sie Ergebnisse immer im Kontext.
  • Prompts werden nicht gegen ein Modell ausgeführt; dies ist rein statische Analyse.
  • Die Extraktion verwendet Mustervergleich anstelle eines vollständigen AST. Komplexe dynamische Prompt-Konstruktionen können übersehen werden.
  • Für Sprachen außer JS/TS (Python, Go, Rust usw.) wird eine Datei nur dann analysiert, wenn ein Import einer LLM-Bibliothek erkannt wird. Dateien, die Prompts ohne einen erkannten Import konstruieren, werden nicht extrahiert.

Mitwirken

Beiträge sind willkommen. So fügen Sie eine neue Regel hinzu:

  1. Fügen Sie sie in die entsprechende Datei in src/rules/ ein (oder erstellen Sie eine neue für eine neue Kategorie)
  2. Registrieren Sie sie in src/rules/index.ts
  3. Fügen Sie mindestens einen positiven und einen negativen Testfall in tests/rules.test.ts hinzu
  4. Führen Sie npm test aus, um zu überprüfen, ob alle Tests bestehen

Lizenz

MIT

Tool herunterladen
95 SicherheitsregelnÜber 14 Kategorien: Injection, Exfiltration, Jailbreak, unsichere Tool-Nutzung, Command Injection, RAG-Vergiftung, Codierung, Ausgabehandhabung, multimodal, Skills-Marktplatz, agentisch, MCP, Lieferkette, DoS
Numerischer Risikoscore (0-100)Normalisierter Repository-Score mit niedrigen, mittleren, hohen und kritischen Schwellenwerten
Erkennung von GegenmaßnahmenExplizite Sicherheitssprache in Ihren Prompts verringert Ihren Score
7 AusgabeformateKonsole, JSON, SARIF, GitHub Annotations, Markdown, JSONL-Streaming und interaktives HTML
GitHub Action inkludiertLässt CI bei hohem Risiko fehlschlagen und lädt SARIF-Ergebnisse automatisch hoch
Mehrsprachiges ScannenErkennt LLM-API-Nutzung in Python, Go, Rust, Java, C#, PHP, Ruby, Swift, Kotlin, Vue, Bash – nicht nur TypeScript/JavaScript
RegelfilterungexcludeRules/includeRules mit Präfix-Glob-Syntax (CMD-*); minConfidence-Filter
Inkrementeller Cache.hound-cache.json überspringt unveränderte Dateien bei erneuten Läufen; --no-cache zum Deaktivieren
Plugin-SystemLädt benutzerdefinierte Regeln aus lokalen .js-Dateien über "plugins": ["./my-rule.js"] in der Konfiguration
Baseline-/Diff-Modus--baseline results.json – nur Ergebnisse melden und bei Funden fehlschlagen, die nicht in einem vorherigen Scan vorhanden waren
Watch-Modus--watch scannt bei Dateiänderungen erneut und zeigt Delta-Ergebnisse
Paralleles ScannenGleichzeitige Dateiverarbeitung (--concurrency <n>, Standard 8)
Vollständig offlineKeine API-Aufrufe, keine Telemetrie, keine kostenpflichtigen Abhängigkeiten
CodeBedeutung
0Bestanden – Score unter Schwellenwert, keine failOn-Verletzung
1Nicht behandelter Fehler oder ungültige Argumente
2Schwellenwert überschritten – Repository-Score ≥ Schwellenwert oder Datei-Schwellenwert überschritten
3--fail-on-Verletzung – Fund der angegebenen Schwere gefunden
OptionStandardBeschreibung
include**/*.{ts,tsx,js,jsx,py,go,rs,java,kt,cs,php,rb,swift,vue,sh,bash,hs,md,txt,yaml,yml,json}Glob-Muster zum Scannen
exclude**/node_modules/**, **/dist/**, etc.Glob-Muster zum Ignorieren
threshold60Fehler, wenn der Repository-Score bei oder über diesem Wert liegt (Exit-Code 2)
formats["console"]Ausgabeformate: console, json, sarif, github-annotations, markdown, jsonl, html
outautoBasispfad für Dateiausgabe
verbosefalseBehebungsvorschläge und Konfidenz pro Fund anzeigen
failOnnicht gesetztExit-Code 3 beim ersten Fund von: critical, high oder medium
maxFindingsnicht gesetztNach N Funden abbrechen
excludeRules[]Regel-IDs oder Präfix-Globs zum Überspringen (z. B. "CMD-*", "JBK-002")
includeRules[]Nur diese Regel-IDs ausführen (leer = alle ausführen)
minConfidencenicht gesetztRegeln unterhalb dieser Konfidenz überspringen: low, medium oder high
failFileThresholdnicht gesetztFehler (Exit-Code 2), wenn eine einzelne Datei einen Score bei oder über diesem Wert hat
concurrency8Max. gleichzeitig verarbeitete Dateien
cachetrueInkrementellen Scan-Cache aktivieren (.hound-cache.json); auf false setzen oder --no-cache verwenden, um zu deaktivieren
plugins[]Pfade zu lokalen .js-Regel-Plugins; jedes muss ein Rule oder Rule[] exportieren
baselinenicht gesetztPfad zu einem vorherigen JSON-Bericht; nur Funde, die nicht in der Baseline enthalten sind, werden gemeldet
VariableÜberschreibt
HOUND_THRESHOLDthreshold
HOUND_FAIL_ONfailOn
HOUND_MIN_CONFIDENCEminConfidence
HOUND_VERBOSEverbose (wahrheitsgemäß: 1, true, yes)
HOUND_CONFIGPfad zur Konfigurationsdatei