Six original V-2 threat classes plus five net-new V-8 findings. Severity shows V-2 → V-8 adjudication where applicable; status is mapped to the closure or non-closure evidence in _audit/.
Identity-spoofing — single OWNER email, OTP-only IdP
Severity: P0 / P1
P1 policy relies on a single email address authenticated via Cloudflare One-Time PIN. Compromise of the Gmail account (phish, SIM-swap, credential stuffing) yields full Access. Recommended fix: swap to Google IdP with auth_method=google. Operator-gated; not yet executed.
Evidence: N-23 CF hardening § "Deferred work" (Google IdP swap)
Service-token 1-year lifetime + no rotation runbook
Severity: P0
Four connector service tokens had 1-year lifetimes (expiring 2027-05-11) with no rotation schedule. Reduced to 30-day lifetime + fresh client_id+secret pairs on 2026-05-10. Old tokens DELETEd. Blast radius reduced from 365 days to 30 days.
Evidence: N-23 CF hardening — 4 tokens rotated 8760h → 720h on 2026-05-10
Bearer-replay — static origin secret, no nonce or expiry
Severity: P1 (V-2) → P3 (V-8 overrule)
Origin bearer is constant-time-compared but static. V-2 proposed short-lived JWT. V-8 overruled to P3: replay requires bearer extraction + TLS break + replay inside the CF tunnel (mTLS cloudflared↔edge). Revisit only if bearer ever transits outside the CF tunnel boundary.
Evidence: V-8 adjudication §1 row B3 — downgraded to P3, negative ROI today
Loopback-bypass on MCP middleware
Severity: P0 (V-2) → env-gate (V-8 third option)
V-2 demanded full removal (P0). Internal stack reconciled as intentional design (no escalation). V-8 overruled both: env-gate default-off (2 lines + 1 test) eliminates the audit-flaggable pattern while preserving dev-convenience. Not yet implemented. The internal threat-model document does NOT yet cover loopback bypass rationale.
Evidence: V-8 §2 adjudication; no GRIFFAI_MCP_ALLOW_LOOPBACK_BYPASS flag in tree yet
Missing origin rate-limits — DLP-failure exposure
Severity: P0
No CF rate-limiting (Free tier) and no origin throttle. A leaked service token enables bulk DB extraction with no signal. Planned fix: slowapi keyed on CF-Access-Client-Id (3h estimate). Closes V-2 #5 (DLP) + V-2 #6 (audit-attribution) in one PR. Not yet shipped.
Evidence: V-8 must-fix-now §4 item 2 — scoped, design committed, no code shipped
Audit-trail gap — no per-connector attribution at origin
Severity: P1 (V-2) → P0 (V-8 federal-AV lens)
No per-connector logging at origin; cannot tell which of the 4 service tokens issued which request without paid-tier CF Logpush. V-8 escalated to P0 under NIST SP 800-53 AU-2/AU-3/AU-12 baseline for FedRAMP Moderate. Remediation bundled with rate-limit work above.
Evidence: V-8 escalation table; bundled with V-2 #5 remediation
SQLite WAL-mode + busy_timeout for concurrent writes
Severity: MEDIUM (M-H under fed-AV)
Silent corruption risk on the 232k-item memory DB under concurrent writes. Safety-adjacent for an AV reasoning chain. Effort: 2h code + 1h test.
Evidence: V-8 §3 NF-1; deferred to before multi-connector concurrent workload
Windows Defender firewall rule has no IaC / regression guard
Severity: LOW (P1 under fed-AV)
Load-bearing LAN restriction (192.168.1.0/24 inbound on 8787/8788) has no script, no verification, no regression guard. Effort: 1h to ship deploy/Set-OriginFirewall.ps1.
Evidence: V-8 §3 NF-2
No route-dependency regression guard on verify_bearer
Severity: LOW (architectural)
No pytest fixture that asserts every FastAPI route still has Depends(verify_bearer) wired. Future route addition could silently skip bearer auth. Effort: 1h.
Evidence: V-8 §3 NF-3
A:\ drive type unverified — secrets on potentially-removable drive
Severity: MEDIUM
.cf-service-tokens.local.json lives on A:\ which per persistent memory is the spinner-tier backup drive. If hot-swap/external, physical extraction bypasses NTFS ACLs. 5-minute verification not yet performed.
Evidence: V-8 §3 NF-4; cross-reference to feedback_jwgh02_drive_tier_policy.md
cloudflared.exe — no SHA-256 / Authenticode verification, version 0.0.0.0
Severity: MEDIUM (P0 under EO 14028 §4)
Binary self-reports version 0.0.0.0 (manual drop, no auto-update). No pre-flight hash verification. EO 14028 §4 software supply-chain traceability requires version + patch SLA. Effort: 1h.
Evidence: V-8 §3 NF-5; cloudflared was manual-drop, not winget