# Scan Diff Against Baseline

---

## Header

| Field | Value |
|-------|-------|
| **Report type** | diff |
| **Target** | ~/repos/dft-marketplace |
| **Date** | 2026-05-05 |
| **Baseline** | 2026-04-29 |
| **Version** | llm-security v7.4.0 |
| **Scope** | scan + posture diff |
| **Triggered by** | /security diff . |

---

## Risk Dashboard

| Metric | Value |
|--------|-------|
| **Current Grade** | B |
| **Baseline Grade** | C |
| **Risk Score** | 28/100 |
| **Risk Band** | Medium |
| **Verdict** | WARNING |

| Severity | New | Resolved | Unchanged |
|----------|----:|---------:|----------:|
| Critical | 0 | 1 | 0 |
| High | 1 | 2 | 1 |
| Medium | 2 | 3 | 4 |
| Low | 0 | 1 | 2 |
| Info | 1 | 0 | 5 |
| **Total** | **4** | **7** | **12** |

**Verdict rationale:** Net improvement (7 resolved, 4 new). Baseline had 1 CRITICAL (resolved), 2 HIGH (resolved). Grade C → B. One new HIGH on permission scope warrants review before celebrating.

---

## New (4)

| ID | Severity | Category | File | Description | OWASP |
|----|----------|----------|------|-------------|-------|
| DIF-001 | high | Permissions | .claude/settings.json | New `Edit(*)` wildcard added in commit 4a8c1f | ASI04 |
| DIF-002 | medium | Injection | commands/research-v2.md | New command introduced indirect-injection vector | LLM01 |
| DIF-003 | medium | Supply Chain | package-lock.json | New dependency `husky@9.0.11` (no prior baseline) | LLM03 |
| DIF-004 | info | Documentation | docs/CHANGELOG.md | Changelog gained sensitive path reference (not exploitable) | — |

---

## Resolved (7)

| ID | Severity | Category | File | Resolution |
|----|----------|----------|------|-----------|
| BAS-001 | critical | Secrets | agents/data-analyst.md | API key removed, env-var reference added |
| BAS-002 | high | Excessive Agency | agents/web-helper.md | Hook policy added blocking [Bash, Read, WebFetch] trifecta |
| BAS-003 | high | MCP Trust | .mcp.json | airbnb-mcp removed |
| BAS-004 | medium | Output Handling | agents/notes.md | Markdown link-title sink sanitized |
| BAS-005 | medium | Memory | CLAUDE.md | Encoded base64 imperative removed |
| BAS-006 | medium | Injection | commands/summarize.md | Indirect-injection wrapped in Trust-Bus |
| BAS-007 | low | Documentation | README.md | Suspicious URL pattern in example removed |

---

## Unchanged (12)

| ID | Severity | Category | File | Notes |
|----|----------|----------|------|-------|
| BAS-008 | high | Permissions | .claude/settings.json | Bash wildcard remains — pending grant-narrowing |
| BAS-009 | medium | Permissions | agents/test-runner.md | Tool list still includes Edit |
| BAS-010 | medium | MCP Trust | .mcp.json | Per-update drift on `postgres-readonly` (12.3% > 10%) |
| BAS-011 | medium | Other | scripts/setup.sh | curl|sh pattern in install hint |
| BAS-012 | medium | Other | tests/fixtures/poisoned.md | Test fixture flagged (intentional) |
| BAS-013 | low | Documentation | docs/setup.md | Outdated security-advisory link |
| BAS-014 | low | Documentation | LICENSE | License file present but old SPDX format |
| BAS-015 | info | Other | .gitignore | Still missing `.env*` exclusion rule |
| BAS-016 | info | Other | LICENSE | (info-level note) |
| BAS-017 | info | Other | CHANGELOG.md | Format compliance note |
| BAS-018 | info | Other | SECURITY.md | Still missing |
| BAS-019 | info | Other | CONTRIBUTING.md | Still missing |

---

## Moved (0)

No findings shifted file-locations between baseline and current.

---

## Recommendations

1. **High:** Audit DIF-001 — `Edit(*)` wildcard adds Edit-to-anywhere capability. Replace with explicit allow-list.
2. **Medium:** Review DIF-002 (commands/research-v2.md) and DIF-003 (husky pin) before merge.
3. **Medium:** Continue working on the 12 unchanged findings — BAS-008 (Bash wildcard) is the highest-impact remaining item.

---

*Diff complete. Net improvement: -3 findings (4 new, 7 resolved). Grade C → B.*
