ktg-plugin-marketplace/plugins/llm-security/playground/test-fixtures/clean.md
Kjell Tore Guttormsen ce3891bdd0 feat(llm-security): playground Fase 3 — v7.5.0 med 18 parsere/renderere
Single-file SPA playground har nå parser + renderer for alle 18
produces_report=true-kommandoer (Fase 2: 10 høy-prio + Fase 3: 8
gjenstående: mcp-inspect, supply-check, pre-deploy, diff, watch,
registry, clean, threat-model). 18 markdown test-fixtures fungerer
som kontrakt-anker for parser-utvikling.

Komplett demo-prosjekt `dft-komplett-demo` har alle 18 rapporter
ferdig parsed inline — klikk-gjennom uten "parser ikke implementert"-
paneler. 2 nye archetypes i KEY_STATS_CONFIG: kanban-buckets (clean)
og matrix-risk (threat-model).

Bug-fix: normalizeVerdictText sjekker nå GO-WITH-CONDITIONS /
CONDITIONAL / BETINGET FØR plain GO så betinget verdict (pre-deploy
med åpne vilkår) ikke kollapser til ALLOW.

Eksponert 11 window-globaler for testing/automasjon (__store,
__navigate, __loadDemoState, __PARSERS, __RENDERERS, __CATALOG,
__inferVerdict, __inferKeyStats, __renderPageShell,
__handlePasteImport, __scheduleRender). 12 Playwright-genererte
screenshots i playground/screenshots/v7.5.0/.

A11Y-rapport (WCAG 2.1 AA): 0 blokkerende, 3 mindre forbedringer
flagget for v7.5.x patch (skip-link, heading-hierarki på project,
aria-live toast).

Versjonsbump 7.4.0 -> 7.5.0 i 10 filer (package.json, plugin.json,
CLAUDE.md header, README badge, CHANGELOG-entry, 3 scanner VERSION-
konstanter, ROADMAP, marketplace-rot README).

Ingen scanner- eller hook-behavior-changes — purely additive surface.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-05 22:15:47 +02:00

145 lines
4.8 KiB
Markdown

# Clean — Auto + Semi-Auto + Manual Remediation
---
## Header
| Field | Value |
|-------|-------|
| **Report type** | clean |
| **Target** | ~/repos/dft-marketplace |
| **Date** | 2026-05-05 |
| **Mode** | dry-run |
| **Version** | llm-security v7.4.0 |
| **Scope** | scan + remediation buckets |
| **Triggered by** | /security clean . --dry-run |
---
## Risk Dashboard
| Metric | Value |
|--------|-------|
| **Risk Score** | 45/100 |
| **Risk Band** | High |
| **Grade** | C |
| **Verdict** | WARNING |
| Severity | Count |
|----------|------:|
| Critical | 1 |
| High | 3 |
| Medium | 4 |
| Low | 2 |
| Info | 3 |
| **Total** | **13** |
**Verdict rationale:** 13 findings classified by remediation tier. 4 auto-fixable, 5 semi-auto (require user confirmation), 3 manual (architecture-level), 1 suppressed (waiver registered).
---
## Remediation Summary
| Bucket | Count | Action |
|--------|------:|--------|
| Auto | 4 | Apply deterministic fixes (no user input) |
| Semi-auto | 5 | Generate proposals, confirm with user |
| Manual | 3 | Architecture-level — human decision required |
| Suppressed | 1 | Waiver registered in `.llm-security-ignore` |
| **Total** | **13** | |
---
## Findings
### Critical
| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-001 | Secrets | agents/data-analyst.md | 47 | Hardcoded API key | LLM02 |
### High
| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-002 | Excessive Agency | agents/web-helper.md | 3 | Lethal trifecta tool combination | ASI01 |
| CLN-003 | Permissions | .claude/settings.json | 5 | Wildcard `Bash(*)` permission | ASI04 |
| CLN-004 | Injection | commands/research.md | 22 | Indirect-injection vector | LLM01 |
### Medium
| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-005 | MCP Trust | .mcp.json | 12 | Hidden imperative in MCP description | MCP05 |
| CLN-006 | Documentation | LICENSE | — | License file missing | — |
| CLN-007 | Documentation | SECURITY.md | — | Disclosure policy missing | — |
| CLN-008 | Output Handling | agents/notes.md | 89 | Markdown link-title injection sink | LLM01 |
### Low
| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-009 | Documentation | README.md | 88 | Suspicious URL in example | — |
| CLN-010 | Documentation | CHANGELOG.md | — | Missing changelog file | — |
### Info
| ID | Category | File | Line | Description | OWASP |
|----|----------|------|------|-------------|-------|
| CLN-011 | Documentation | CONTRIBUTING.md | — | Missing contributing guidelines | — |
| CLN-012 | Documentation | .gitignore | — | Missing `.env*` exclusion | — |
| CLN-013 | Documentation | LICENSE | — | License header in source files | — |
---
## Auto
| ID | Action | Description |
|----|--------|-------------|
| CLN-001 | replace-with-env-var | Replace hardcoded `sk-prod-...` with `${API_KEY}`, log replacement to .llm-security-audit.jsonl |
| CLN-006 | create-file | Create `LICENSE` file (MIT, default) |
| CLN-012 | append-line | Append `.env*` to `.gitignore` |
| CLN-013 | add-license-header | Add MIT license header to top of source files |
---
## Semi-auto
| ID | Action | Description |
|----|--------|-------------|
| CLN-003 | propose-allowlist | Propose explicit Bash allow-list based on actual usage patterns |
| CLN-004 | propose-trust-bus | Propose Trust-Bus wrapper around indirect-injection vector |
| CLN-005 | propose-rewrite | Propose rewritten MCP description without imperative pattern |
| CLN-007 | scaffold-template | Generate SECURITY.md template; user confirms ownership/SLA terms |
| CLN-008 | propose-sanitizer | Propose sanitizer for Markdown link-title sink |
---
## Manual
| ID | Action | Description |
|----|--------|-------------|
| CLN-002 | architectural-review | Lethal trifecta requires architecture-level decision: split agent OR add hook policy |
| CLN-009 | manual-edit | Suspicious URL in README example — requires editorial judgment |
| CLN-010 | manual-write | CHANGELOG.md content requires reviewing git history |
---
## Suppressed
| ID | Reason | Waiver |
|----|--------|--------|
| CLN-011 | Repo policy: solo project, no external contributions | `.llm-security-ignore` rule `category:documentation/contributing` |
---
## Recommendations
1. **Immediate:** Run with `--apply` to execute the 4 auto-fixes.
2. **High:** Walk through 5 semi-auto proposals interactively (`--interactive`).
3. **Medium:** Schedule architecture review for the 3 manual items (CLN-002, CLN-009, CLN-010).
4. **Low:** Review the suppressed item (CLN-011) annually to confirm policy still applies.
---
*Clean dry-run complete. 13 findings: 4 auto, 5 semi-auto, 3 manual, 1 suppressed.*