Skip to content

test(proxy): fuzz the wire parsers + document the proxy as in-scope (HF Issue 1) - #90

Merged
rappdw merged 3 commits into
mainfrom
security/proxy-fuzz-vuln
Jul 28, 2026
Merged

test(proxy): fuzz the wire parsers + document the proxy as in-scope (HF Issue 1)#90
rappdw merged 3 commits into
mainfrom
security/proxy-fuzz-vuln

Conversation

@rappdw

@rappdw rappdw commented Jul 28, 2026

Copy link
Copy Markdown
Owner

HF-incident analysis Issue 1 (Medium — defence-in-depth on the highest-value component; LOW disclosure).

The incident's escape was a zero-day in the sandbox's egress proxy — the one component mandatory to trust, directly reachable by the contained agent, and parsing attacker-influenced wire bytes. Sandy's proxy is in that same position, so its parsers should be proven robust, not assumed.

  • proxy/fuzz_test.go: FuzzExtractSNI / FuzzParseServerName / FuzzExtractHTTPHost with degenerate/truncated/oversized seed corpora. Invariant: never panic (a panic crashes the proxy process = the agent's only egress route). 8s local fuzzing per target found no crashers (2M+ execs each).
  • THREAT_MODEL §7: documents the proxy as an in-scope tier-3 attack surface, not just a control.
  • Dependabot already covers proxy/go.mod (gomod, weekly) — the finding's dependency-advisory item is already in place.

⚠️ Follow-up (workflow-scope blocked): the CI wiring — a 30s -fuzztime gate per target + an advisory govulncheck step in the proxy job — is not in this PR because pushing .github/workflows/ requires a workflow-scoped token, which this session's gh token lacks. The exact change is ready to apply (see the maintainer note). govulncheck currently flags 21 stdlib vulns (toolchain go1.24.1, fixed in ≥1.24.4) — which is precisely why it's advisory and why the proxy image now auto-refreshes its golang base monthly (Issue 3, #89).

The sandy-isolation-test 'attack the proxy' scenario (malformed handshakes, oversized SNI, header smuggling, DNS abuse, connection exhaustion) is tracked in that separate repo.

rappdw and others added 3 commits July 28, 2026 15:19
…ssue 1)

The HF incident broke containment via a zero-day IN the sandbox's egress proxy —
the component that parses attacker-influenced wire bytes from the agent it
contains. Sandy's proxy is in the same position, so prove (not assume) its
parsers are robust.

- proxy/fuzz_test.go: FuzzExtractSNI / FuzzParseServerName / FuzzExtractHTTPHost
  with degenerate/truncated/oversized seed corpora. Invariant: never panic (a
  panic crashes the proxy = the agent's only egress route). 8s local fuzzing
  found no crashers (2M+ execs/target).
- THREAT_MODEL §7: the proxy is documented as an in-scope tier-3 attack surface,
  not just a control.
- Dependabot already covers proxy/go.mod (gomod, weekly) — no change needed.

NOTE: the CI wiring (a 30s -fuzztime gate + advisory govulncheck in the proxy
job) is NOT in this commit — pushing .github/workflows/ needs a workflow-scoped
token, which this session's gh token lacks. The change is saved for a
workflow-scoped push. The sandy-isolation-test 'attack the proxy' scenario is
tracked in that repo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rappdw
rappdw merged commit eb4ae29 into main Jul 28, 2026
2 checks passed
@rappdw
rappdw deleted the security/proxy-fuzz-vuln branch July 28, 2026 15:39
rappdw added a commit that referenced this pull request Jul 28, 2026
…ow-up) (#97)

Completes HF-incident Issue 1: the proxy CI job now runs a short 30s -fuzztime
pass per wire-parser fuzz target (FuzzExtractSNI/ParseServerName/ExtractHTTPHost,
a HARD gate — any crasher fails the build) and govulncheck as ADVISORY
(continue-on-error): stdlib patch latency is remediated by the proxy image's
monthly golang-base refresh (Issue 3) + Dependabot on miekg/dns, so a new CVE
surfaces without hard-breaking every unrelated proxy PR.

Split from #90 because pushing .github/workflows/ needs a workflow-scoped token.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant