Problem
The argument fuzzer (fuzzer/argument.rs) covers 8 injection categories (path traversal, command injection, SQL, LDAP, NoSQL, format string, template injection, XML) but is missing two high-value classes documented in real MCP server attacks:
SSRF (Server-Side Request Forgery)
VIPER-MCP (arXiv:2605.21392) scanned 39,884 MCP server repos and found SSRF as one of the three most common vulnerability classes — MCP servers commonly act as HTTP proxies where a url argument is user-controlled. Common bypass patterns that evade naive allowlists:
- Protocol schemes:
file://, gopher://, dict://, ftp://, jar://
- Cloud metadata endpoints:
169.254.169.254, fd00:ec2::254, metadata.google.internal
- Localhost bypass variants:
0.0.0.0, [::], 127.1, 2130706433 (decimal IP), 0x7f000001 (hex)
- URL encoding bypasses:
http://127.0.0.1%20@evil.com, http://evil.com#@127.0.0.1
ReDoS (Regex Denial of Service)
If a tool's inputSchema declares a "pattern" constraint, the server's regex engine validates inputs against it. Catastrophic backtracking payloads against vulnerable patterns can cause per-request CPU exhaustion. fuzzd already reads inputSchema — it should generate ReDoS payloads targeted at declared patterns.
Acceptance criteria
SSRF
ReDoS
Tests
References
Problem
The argument fuzzer (
fuzzer/argument.rs) covers 8 injection categories (path traversal, command injection, SQL, LDAP, NoSQL, format string, template injection, XML) but is missing two high-value classes documented in real MCP server attacks:SSRF (Server-Side Request Forgery)
VIPER-MCP (arXiv:2605.21392) scanned 39,884 MCP server repos and found SSRF as one of the three most common vulnerability classes — MCP servers commonly act as HTTP proxies where a
urlargument is user-controlled. Common bypass patterns that evade naive allowlists:file://,gopher://,dict://,ftp://,jar://169.254.169.254,fd00:ec2::254,metadata.google.internal0.0.0.0,[::],127.1,2130706433(decimal IP),0x7f000001(hex)http://127.0.0.1%20@evil.com,http://evil.com#@127.0.0.1ReDoS (Regex Denial of Service)
If a tool's
inputSchemadeclares a"pattern"constraint, the server's regex engine validates inputs against it. Catastrophic backtracking payloads against vulnerable patterns can cause per-request CPU exhaustion. fuzzd already readsinputSchema— it should generate ReDoS payloads targeted at declared patterns.Acceptance criteria
SSRF
ssrfpayload category toArgumentFuzzerwith the URL variants aboveurl,endpoint,uri,href,link,src,host,targetSsrfAttemptcase label for these fuzz casesReDoS
"pattern": "<regex>", generate(a+)+b-style catastrophic backtracking payloads against that specific regexReDoSAttemptwith the specific pattern being probedTests
url-named string fieldsinputSchemaincludes apatternfieldReferences