5.3 KiB
5.3 KiB
Expected Findings Catalog
This documents all security findings the scanners should detect in the evil-project-health/ fixture.
Expected verdict: BLOCK (risk score 100/100)
Note: This catalog covers the ~56 deterministic findings from the 7 scanners. The full security assessment (
security-assessment.md) reports ~85 findings because it includes ~25 additional findings from the LLM-powered agents (skill-scanner, mcp-scanner, posture-assessor).
Unicode Scanner (UNI)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | HIGH | SKILL.fixture.md | Zero-width space (U+200B) between visible words (2 instances) |
| 2 | CRITICAL | SKILL.fixture.md | Invisible line containing only zero-width chars (U+200B, U+200C, U+200D, U+FEFF) |
| 3 | CRITICAL | SKILL.fixture.md | Unicode Tag steganography (U+E0063...) encoding hidden command |
| 4 | HIGH | SKILL.fixture.md | BIDI override (U+202E) in section header |
| 5 | MEDIUM | SKILL.fixture.md | Cyrillic homoglyph in "data" (U+0430 replacing Latin 'a') |
| 6 | MEDIUM | health-check-agent.fixture.md | Cyrillic homoglyphs in "scan" (U+0441 replacing 'c', U+0430 replacing 'a') |
Entropy Scanner (ENT)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | HIGH+ | SKILL.fixture.md | Base64 blob (84 chars) — decodes to curl command with env exfiltration |
| 2 | HIGH+ | telemetry.mjs | ENCODED_CONFIG base64 blob (same payload) |
| 3 | MEDIUM | telemetry.mjs | High-entropy auth_credential string (32 chars) |
Permission Mapper (PRM)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | HIGH | health.fixture.md | Read-only intent words ("analyze", "report") with Bash+Write+Edit tools |
| 2 | HIGH | health.fixture.md | Dangerous tool combination (Bash + Write + Edit) |
| 3 | MEDIUM | health-check-agent.fixture.md | Haiku model on security-sensitive agent (security keywords + Bash) |
| 4 | INFO | health-check-agent.fixture.md | Overprivileged agent (8 tools including Task + WebFetch) |
| 5 | MEDIUM | health-check-agent.fixture.md | Task + Bash combination on agent |
| 6 | MEDIUM | hooks.fixture.json | Ghost hook: PostToolUse script not found (post-bash-telemetry.mjs) |
| 7 | MEDIUM | hooks.fixture.json | Ghost hook: SessionStart script not found (session-beacon.mjs) |
| 8 | MEDIUM | hooks.fixture.json | Ghost hook: PreToolUse script not found (pre-write-intercept.mjs) |
Dependency Auditor (DEP)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | HIGH | package.json | Typosquatting: "expresss" → "express" (Levenshtein distance 1) |
| 2 | MEDIUM | package.json | Typosquatting: "lodsah" → "lodash" (Levenshtein distance 2) |
| 3 | HIGH | package.json | Typosquatting: "node-fethc" → "node-fetch" (Levenshtein distance 1) |
| 4 | HIGH | package.json | Typosquatting: "axois" → "axios" (Levenshtein distance 1) |
| 5 | HIGH | package.json | Typosquatting: "jset" → "jest" (Levenshtein distance 1) |
| 6 | HIGH | package.json | Typosquatting: "eslitn" → "eslint" (Levenshtein distance 1) |
| 7 | HIGH | package.json | Suspicious postinstall script (curl + URL) |
| 8 | HIGH | package.json | Suspicious preinstall script (child_process + exec + wget + URL) |
| 9 | LOW | package.json | Unpinned version: lodsah@* |
| 10 | LOW | package.json | Unpinned version: node-fethc@latest |
| 11 | LOW | package.json | Unpinned version: jset@* |
| 12 | LOW | package.json | Unpinned version: eslitn@latest |
| 13 | LOW | package.json | Unpinned version: requets@>=2.0.0 |
Taint Tracer (TNT)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | CRITICAL | telemetry.mjs | process.env → fetch() — environment exfiltration |
| 2 | CRITICAL | telemetry.mjs | req.body → execSync() — command injection |
| 3 | HIGH | telemetry.mjs | process.argv → writeFileSync() — path traversal |
| 4 | CRITICAL | telemetry.mjs | user_input → eval() — code injection |
| 5 | CRITICAL | telemetry.mjs | process.env → execSync() — indirect command execution |
| 6 | HIGH | telemetry.mjs | req.query → fetch() — SSRF |
Git Forensics (GIT)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | INFO | — | New directory (no git history to analyze) |
Network Mapper (NET)
| # | Severity | File | Finding |
|---|---|---|---|
| 1 | HIGH | health.fixture.md | ngrok-free.app URL |
| 2 | HIGH | health-check-agent.fixture.md | webhook.site URL |
| 3 | HIGH | SKILL.fixture.md | ngrok-free.app URL |
| 4 | HIGH | SKILL.fixture.md | requestbin.com URL |
| 5 | HIGH | SKILL.fixture.md | pipedream.net URL |
| 6 | HIGH | SKILL.fixture.md | pastebin.com URL |
| 7 | HIGH | SKILL.fixture.md | bit.ly URL (shortener) |
| 8 | HIGH | SKILL.fixture.md | webhook.site URL |
| 9 | MEDIUM | SKILL.fixture.md | IP-based URL (192.168.1.100:8080) |
| 10 | HIGH | telemetry.mjs | ngrok-free.app URL |
| 11 | HIGH | telemetry.mjs | webhook.site URL |
| 12 | MEDIUM | telemetry.mjs | IP-based URL (45.33.32.156) |
Summary
| Scanner | Expected Count | Severity Range |
|---|---|---|
| UNI | 5-6 | CRITICAL, HIGH, MEDIUM |
| ENT | 3-4 | CRITICAL, HIGH, MEDIUM |
| PRM | 8-10 | HIGH, MEDIUM, INFO |
| DEP | 13-15 | HIGH, MEDIUM, LOW |
| TNT | 6-8 | CRITICAL, HIGH |
| GIT | 0-1 | INFO |
| NET | 10-12 | HIGH, MEDIUM |
| Total | ~56 |