mirror of
https://github.com/ruvnet/ruflo.git
synced 2026-11-09 14:04:06 +09:00
* dream(security): http_fetch SSRF bypass via IPv4-mapped IPv6 literals
isPrivateOrLoopback() (the SSRF guard behind the http_fetch MCP tool's
validateUrl()) never stripped the "[...]" brackets Node's URL parser keeps
in `.hostname` for IPv6 literals. Two consequences:
1. The existing fc00::/7 (ULA) and fe80::/10 (link-local) checks
(`host.startsWith('fc'/'fe80:')`) never matched anything, since `host`
always started with "[" first.
2. There was no handling at all for IPv4-mapped IPv6 literals
(`::ffff:a.b.c.d`, normalized by Node to a canonical `::ffff:xxxx:yyyy`
hex form), so wrapping a loopback/private/link-local/cloud-metadata
IPv4 address in that form bypassed the guard entirely
(e.g. http://[::ffff:127.0.0.1]/, http://[::ffff:169.254.169.254]/).
Strips brackets once up front, then decodes IPv4-mapped-IPv6 forms back to
dotted-decimal and recurses into the existing IPv4 rules instead of adding
a parallel copy. 13 new tests (8 discriminating, verified to fail on the
pre-fix source via a stash-isolated run; 5 non-discriminating controls).
Independent adversarial critique: CONFIRMED-WITH-CAVEATS. Two pre-existing,
out-of-scope gaps disclosed in-source (IPv6 "::" unspecified address and
multicast/NAT64 ranges remain unblocked).
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013bqQefaQjXhYZX2Acr9Jop
* dream(security): add 2026-10-26 research gist
Full SOTA report for tonight's security deep-dive (http_fetch SSRF
bypass via IPv4-mapped IPv6 literals) plus intelligence/swarm scan
findings and competitor comparison. No gist-publishing tool reachable
this session (same disclosed FALLBACK as every night since 2026-09-30)
— committed to this branch instead.
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013bqQefaQjXhYZX2Acr9Jop
* dream(security): update ledger for 2026-10-26
Co-Authored-By: RuFlo <ruv@ruv.net>
Claude-Session: https://claude.ai/code/session_013bqQefaQjXhYZX2Acr9Jop
---------
Co-authored-by: Claude <noreply@anthropic.com>