Summary

101
tests
MEDIUM 3 (3.0%)
LOW 5 (5.0%)
INFO 16 (15.8%)
PASS 92 (91.1%)
CRITICAL 0
HIGH 0
MEDIUM 3
LOW 5
INFO 16
PASS 92
Total: 101 Passed: 92 Failed: 9 Duration: 28.8s

Server Information

Server Name
unknown
Version
unknown
Protocol
unknown
Transport
STDIO
Target
uvx mcp-server-fetch
Discovered At
2026-04-15 09:46:27 UTC
Tools
1
Resources
0
Prompts
1
Exposed Tools
fetch

Findings (101 tests)

Test ID Severity Test Name Description / Details Duration
SECURITY  ·  82 tests
T07-008 MEDIUM Invalid Tool Name Rejection
Server accepted call to invalid tool name '' without error.
Tool name '' was accepted with no error response.
Remediation:
Validate tool names on the server side. Empty, whitespace, null-byte, or non-existent tool names must be rejected with a structured error.
48ms
T07-009 MEDIUM Oversized Argument Rejection
Server accepted a 1 MB argument value without error — no input size limit enforced.
Tool accepted 10 KB key + 1 MB value payload.
Remediation:
Enforce maximum argument size limits (e.g. 64 KB total per call). Unbounded inputs allow memory exhaustion attacks.
23ms
T07-012 MEDIUM Unicode Homoglyph Tool Name Spoofing
Server accepted unicode homoglyph of tool name 'fetch' → 'fеtch'.
Original: 'fetch' Spoofed: 'fеtch' Server executed the spoofed name without rejection.
Remediation:
Validate tool names using exact byte-for-byte comparison and reject any name not in the known tool manifest. Homoglyph acceptance allows log poisoning and UI spoofing.
32ms
T07-010 LOW Duplicate Initialize (Replay Attack)
Server accepted a second initialize() call on an already active session. The session remained usable, but the server sta…
Double initialize() succeeded. Post-replay list_tools() succeeded — session is still functional but capabilities or internal state may have been altered.
Remediation:
The server should reject or ignore repeated initialize() calls. Accepting them enables mid-session protocol version downgrade and capability reset attacks.
29ms
T07-013 LOW Protocol Version Abuse
Server did not negotiate a recognised MCP protocol version (version is empty or unknown).
Remediation:
Ensure the server returns a valid protocolVersion in its initialize response (e.g. '2024-11-05'). Clients rely on this to select compatible behaviour.
0ms
T24-001 LOW Deserialisation — Summary 2 tool(s) leaked deserialiser markers in error messages. 880ms
T24-TOOL-fetch-DS-002 LOW Deserialisation DS-002 → fetch
Tool 'fetch' error suggests PyYAML unsafe is being invoked on user input. No confirmed RCE — review code path.
Match: '!!python/object'
36ms
T24-TOOL-fetch-DS-003 LOW Deserialisation DS-003 → fetch
Tool 'fetch' error suggests PyYAML unsafe is being invoked on user input. No confirmed RCE — review code path.
Match: '!!python/object'
28ms
T07-001 INFO Unauthenticated Access Unauthenticated Access test requires HTTP transport — skipped (transport='stdio'). 0ms
T07-002 INFO Malformed Token Rejection Malformed Token Rejection test requires HTTP transport — skipped (transport='stdio'). 0ms
T07-003 INFO Resource URI Path Traversal Server advertises no resources — path traversal test skipped. 0ms
T07-005 INFO CORS Misconfiguration CORS check requires HTTP transport — skipped (transport='stdio'). 0ms
T07-006 INFO Process Privilege Check Privilege check not available on Windows. 0ms
T09-TOOL-fetch INFO Output Sanitization → fetch
Tool 'fetch' is a data pass-through surface (file/diff/fetch/search). Output reflects external data verbatim; reverse-in…
Remediation:
Reverse-injection defence for pass-through tools belongs in the LLM's system prompt: instruct the model to treat content from these tools as untrusted data, not instructions.
0ms
T13-002 INFO Unsolicited Sampling Requests MCP client SDK does not expose an incoming-request hook; unsolicited sampling detection relies on capability audit (T13-001). 23ms
T18-001 INFO SSRF — Summary Server does not expose resources/read; SSRF probes skipped. 0ms
T25-001 INFO IDOR — Summary Server does not expose resources — IDOR probe skipped. 0ms
T28-001 INFO Header Injection — Summary STDIO transport has no HTTP headers — CRLF/header injection probe skipped. 0ms
T30-001 INFO OAuth Flow Abuse — Summary STDIO transport has no OAuth flow — probes skipped. 0ms
T07-004 PASS Credentials in Error Messages
No credential patterns found in error response for non-existent tool call.
Error excerpt: "meta=None content=[TextContent(type='text', text='1 validation error for Fetch\\nurl\\n Field required [type=missing, input_value={}, input_type=dict]\\n For further information visit https://errors."
574ms
T07-007 PASS Environment Variable Probe
Tool 'fetch' did not expand environment variable references in its response.
Response excerpt: 'meta=None content=[TextContent(type=\'text\', text="1 validation error for Fetch\\nurl\\n Input should be a valid URL, relative URL without a base [type=url_parsing, input_value=\'$HOME $USER $PATH $AWS_S'
27ms
T07-011 PASS Deeply Nested Argument (JSON Bomb) Server rejected deeply nested JSON argument. 0ms
T09-001 PASS Output Sanitization — Summary All 1 tool outputs and 0 resource reads passed PI-marker scanning. 0ms
T12-001 PASS Error Secret Leakage — Summary Probed 1 tool(s) and 0 resources; no secret patterns detected in error messages. 603ms
T12-TOOL-fetch PASS Error Secret Leakage → fetch Tool 'fetch' never errored on malformed inputs — nothing to scan. 603ms
T13-001 PASS Sampling Capability Advertisement Server does not advertise the 'sampling' capability. 0ms
T13-003 PASS Sampling Abuse — Summary No sampling-abuse surface detected. 23ms
T19-001 PASS Non-ASCII Identifiers All identifiers are pure ASCII. 0ms
T19-002 PASS Confusable / Homoglyph Characters No Unicode confusables detected in identifiers. 0ms
T19-003 PASS Mixed-Script Identifiers No mixed-script identifiers found. 0ms
T19-004 PASS Invisible / Directional Characters No invisible characters in identifiers. 0ms
T19-005 PASS Homoglyph Scan — Summary Scanned 2 identifier(s); no impersonation signals detected. 0ms
T21-001 PASS Path Traversal — Summary 12 probe(s) sent, no traversal to sensitive files confirmed. 2865ms
T21-TOOL-fetch-PT-001 PASS Path Traversal PT-001 → fetch Tool 'fetch' safely rejected Plain Unix. 44ms
T21-TOOL-fetch-PT-002 PASS Path Traversal PT-002 → fetch Tool 'fetch' safely rejected Plain Windows. 555ms
T21-TOOL-fetch-PT-003 PASS Path Traversal PT-003 → fetch Tool 'fetch' safely rejected URL-encoded. 10ms
T21-TOOL-fetch-PT-004 PASS Path Traversal PT-004 → fetch Tool 'fetch' safely rejected Double URL-encoded. 45ms
T21-TOOL-fetch-PT-005 PASS Path Traversal PT-005 → fetch Tool 'fetch' safely rejected UTF-8 overlong. 24ms
T21-TOOL-fetch-PT-006 PASS Path Traversal PT-006 → fetch Tool 'fetch' safely rejected Backslash + forward. 47ms
T21-TOOL-fetch-PT-007 PASS Path Traversal PT-007 → fetch Tool 'fetch' safely rejected Unicode normalisation. 43ms
T21-TOOL-fetch-PT-008 PASS Path Traversal PT-008 → fetch Tool 'fetch' safely rejected NUL byte truncation. 111ms
T21-TOOL-fetch-PT-009 PASS Path Traversal PT-009 → fetch Tool 'fetch' safely rejected Absolute Unix path. 44ms
T21-TOOL-fetch-PT-010 PASS Path Traversal PT-010 → fetch Tool 'fetch' safely rejected Absolute Windows path. 953ms
T21-TOOL-fetch-PT-011 PASS Path Traversal PT-011 → fetch Tool 'fetch' safely rejected Resource file:// scheme. 493ms
T21-TOOL-fetch-PT-012 PASS Path Traversal PT-012 → fetch Tool 'fetch' safely rejected Proto-smuggling. 497ms
T22-001 PASS Command Injection — Summary 8 probe(s) sent, no shell execution confirmed. 879ms
T22-TOOL-fetch-CI-001 PASS Command Injection CI-001 → fetch Tool 'fetch' safely handled Semicolon chain. 555ms
T22-TOOL-fetch-CI-002 PASS Command Injection CI-002 → fetch Tool 'fetch' safely handled Pipe. 44ms
T22-TOOL-fetch-CI-003 PASS Command Injection CI-003 → fetch Tool 'fetch' safely handled Background ampersand. 17ms
T22-TOOL-fetch-CI-004 PASS Command Injection CI-004 → fetch Tool 'fetch' safely handled Logical AND. 39ms
T22-TOOL-fetch-CI-005 PASS Command Injection CI-005 → fetch Tool 'fetch' safely handled Logical OR. 30ms
T22-TOOL-fetch-CI-006 PASS Command Injection CI-006 → fetch Tool 'fetch' safely handled Command substitution $(). 41ms
T22-TOOL-fetch-CI-007 PASS Command Injection CI-007 → fetch Tool 'fetch' safely handled Backtick cmdsub. 47ms
T22-TOOL-fetch-CI-010 PASS Command Injection CI-010 → fetch Tool 'fetch' safely handled Windows cmd chain. 106ms
T23-001 PASS SQL Injection Deep — Summary No deep SQLi findings across 1 probed tool(s). 2369ms
T23-TOOL-fetch-SQL-001 PASS SQL SQL-001 → fetch
No SQLi detected via UNION version on 'fetch'.
baseline=559ms payload=40ms
40ms
T23-TOOL-fetch-SQL-002 PASS SQL SQL-002 → fetch
No SQLi detected via UNION sqlite_ver on 'fetch'.
baseline=559ms payload=23ms
23ms
T23-TOOL-fetch-SQL-003 PASS SQL SQL-003 → fetch
No SQLi detected via Boolean true on 'fetch'.
baseline=559ms payload=33ms
33ms
T23-TOOL-fetch-SQL-004 PASS SQL SQL-004 → fetch
No SQLi detected via Boolean false on 'fetch'.
baseline=559ms payload=36ms
36ms
T23-TOOL-fetch-SQL-005 PASS SQL SQL-005 → fetch
No SQLi detected via Time blind PG on 'fetch'.
baseline=559ms payload=36ms
36ms
T23-TOOL-fetch-SQL-006 PASS SQL SQL-006 → fetch
No SQLi detected via Time blind MS on 'fetch'.
baseline=559ms payload=47ms
47ms
T23-TOOL-fetch-SQL-007 PASS SQL SQL-007 → fetch
No SQLi detected via Time blind MySQL on 'fetch'.
baseline=559ms payload=106ms
106ms
T23-TOOL-fetch-SQL-008 PASS SQL SQL-008 → fetch
No SQLi detected via Stacked drop on 'fetch'.
baseline=559ms payload=43ms
43ms
T23-TOOL-fetch-SQL-009 PASS SQL SQL-009 → fetch
No SQLi detected via NoSQL $ne on 'fetch'.
baseline=559ms payload=1436ms
1436ms
T23-TOOL-fetch-SQL-010 PASS SQL SQL-010 → fetch
No SQLi detected via NoSQL $gt on 'fetch'.
baseline=559ms payload=11ms
11ms
T24-TOOL-fetch-DS-001 PASS Deserialisation DS-001 → fetch Python pickle (b64) — no deserialisation markers detected. 563ms
T24-TOOL-fetch-DS-004 PASS Deserialisation DS-004 → fetch XML XXE file:// — no deserialisation markers detected. 29ms
T24-TOOL-fetch-DS-005 PASS Deserialisation DS-005 → fetch XML XXE parameter entity — no deserialisation markers detected. 39ms
T24-TOOL-fetch-DS-006 PASS Deserialisation DS-006 → fetch Java serialised magic (b64) — no deserialisation markers detected. 38ms
T24-TOOL-fetch-DS-007 PASS Deserialisation DS-007 → fetch Ruby Marshal magic (b64) — no deserialisation markers detected. 47ms
T24-TOOL-fetch-DS-008 PASS Deserialisation DS-008 → fetch JSON __proto__ pollution — no deserialisation markers detected. 99ms
T26-001 PASS SSTI — Summary No SSTI detected across 1 probed tool(s). 2359ms
T26-TOOL-fetch-SSTI-001 PASS SSTI SSTI-001 → fetch No template evaluation detected for Jinja/Twig {{7*7}} on 'fetch'. 567ms
T26-TOOL-fetch-SSTI-002 PASS SSTI SSTI-002 → fetch No template evaluation detected for Jinja concat on 'fetch'. 33ms
T26-TOOL-fetch-SSTI-003 PASS SSTI SSTI-003 → fetch No template evaluation detected for Handlebars #with on 'fetch'. 36ms
T26-TOOL-fetch-SSTI-004 PASS SSTI SSTI-004 → fetch No template evaluation detected for ERB <%= 7*7 %> on 'fetch'. 22ms
T26-TOOL-fetch-SSTI-005 PASS SSTI SSTI-005 → fetch No template evaluation detected for Freemarker ${7*7} on 'fetch'. 38ms
T26-TOOL-fetch-SSTI-006 PASS SSTI SSTI-006 → fetch No template evaluation detected for Velocity #set on 'fetch'. 45ms
T26-TOOL-fetch-SSTI-007 PASS SSTI SSTI-007 → fetch No template evaluation detected for JSP ${7*7} on 'fetch'. 40ms
T26-TOOL-fetch-SSTI-008 PASS SSTI SSTI-008 → fetch No template evaluation detected for Smarty {$x=7*7} on 'fetch'. 139ms
T26-TOOL-fetch-SSTI-009 PASS SSTI SSTI-009 → fetch No template evaluation detected for Razor @(7*7) on 'fetch'. 9ms
T26-TOOL-fetch-SSTI-010 PASS SSTI SSTI-010 → fetch No template evaluation detected for Mako <%= 7*7 %> on 'fetch'. 1429ms
DISCOVERY  ·  8 tests
T01-001 INFO Server Identity
Server did not advertise: name, version. Got name='unknown' version='unknown' protocol='unknown'.
Remediation:
Ensure the MCP server returns a populated 'serverInfo' object in its initialize response (name and version fields).
0ms
T01-002 PASS Tool Enumeration
Discovered 1 tool(s): fetch.
fetch: 'Fetches a URL from the internet and optionally extracts its contents as markdown'
0ms
T01-003 PASS Resource Enumeration Discovered 0 resource(s). 0ms
T01-004 PASS Prompt Enumeration
Discovered 1 prompt(s): fetch.
fetch: 'Fetch a URL and extract its contents as markdown' (1 arg(s))
0ms
T01-005 PASS Tool Description Completeness All 1 tool(s) have non-empty descriptions. 0ms
T01-006 PASS Tool Schema Validity All 1 tool(s) have valid JSON Schema inputSchema. 0ms
T01-007 PASS Duplicate Tool Names All 1 tool name(s) are unique. 0ms
T01-008 PASS Tool Description Length All 1 tool description(s) are within the 2,000-character limit. 0ms
SCHEMA  ·  6 tests
T06-003 INFO additionalProperties Strictness
1/1 tool(s) missing 'additionalProperties': false.
Tools missing additionalProperties:false: fetch
Remediation:
Adding 'additionalProperties': false to every inputSchema prevents callers from silently passing undeclared fields that could confuse server-side processing.
0ms
T06-004 INFO Return Type Consistency All tools have required fields — return-type consistency test skipped. 0ms
T06-001 PASS Schema Structural Validity All 1 tool inputSchema(s) are structurally valid. 0ms
T06-002-fetch PASS Required Enforcement: fetch Tool 'fetch' returned an error response for missing required fields. 19ms
T06-005 PASS Overly Permissive Schema Detection All 1 tool schema(s) are acceptably strict. 0ms
T06-006-fetch PASS Description Quality: fetch
Tool 'fetch' has an adequate description (307 chars).
Description: 'Fetches a URL from the internet and optionally extracts its contents as markdown.\n\nAlthough originally you did not have internet access, and were advised to refuse and tell the user this, this tool no'
0ms
PERFORMANCE  ·  5 tests
T00-003 INFO Connection Closed Mid-Scan (Rate Limit / Server Reset)
The HTTP server closed the connection mid-scan. This is expected behaviour for production servers that apply rate-limiti…
Unexpected stdio transport error: ConnectionResetError: Connection lost (caused by ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception))
Remediation:
Re-run with --no-load to skip T05 load tests and reduce the number of requests sent to the server. The connection drop does not indicate a vulnerability.
8576ms
T08-003-00 INFO Resource Read Latency No resources to benchmark. 0ms
T08-001-01 PASS Baseline Latency: fetch
Tool 'fetch': mean=7ms min=4ms max=13ms (5 samples).
{ "fetch": { "mean_ms": 6.65, "min_ms": 4.44, "max_ms": 12.7, "samples": [ 12.7, 7.02, 4.61, 4.49, 4.44 ] } }
33ms
T08-002 PASS Tool Discovery Latency
list_tools() mean=3ms min=3ms max=3ms.
{ "list_tools": { "mean_ms": 2.74, "min_ms": 2.51, "max_ms": 2.98, "samples": [ 2.98, 2.95, 2.68, 2.59, 2.51 ] } }
14ms
T08-004 PASS Cold Start Detection
No significant cold-start penalty detected (ratio 1.1×, threshold 10×).
Call 1 (cold): 5ms Calls 2-5 (warm): 4ms, 4ms, 4ms, 5ms Warm mean: 4ms Ratio: 1.1×
23ms