Security Vulnerability Report
δΈ­ζ–‡
CVE-2026-43929 CVSS 8.2 HIGH

CVE-2026-43929

Published: 2026-05-12 18:17:29
Last Modified: 2026-05-13 18:24:31

Description

ssrfcheck is a library that checks if a string contains a potential SSRF attack. In 1.3.0 and earlier, ssrfcheck fails to block Server-Side Request Forgery attacks when the target private IP address is encoded as an IPv4-mapped IPv6 address (e.g. http://[::ffff:127.0.0.1]/). The WHATWG URL parser built into Node.js silently normalizes the IPv4 notation inside the brackets to compressed hex form ([::ffff:7f00:1]) before the library's private-IP regex ever runs. The regex was written to match dot-notation only and therefore never matches any real input β€” all seven IANA private IPv4 ranges, including the AWS/GCP/Azure metadata address 169.254.169.254, are bypassed. Any application using isSSRFSafeURL() to guard HTTP requests made with user-supplied URLs is fully exposed to SSRF.

CVSS Details

CVSS Score
8.2
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N

Configurations (Affected Products)

No configuration data available.

ssrfcheck <= 1.3.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// PoC for CVE-2026-43929 // Demonstrating bypass of ssrfcheck using IPv4-mapped IPv6 const { isSSRFSafeURL } = require('ssrfcheck'); // Targeting localhost (127.0.0.1) // Standard IPv4 would be blocked, but IPv6 mapped bypasses the regex const maliciousUrl = 'http://[::ffff:127.0.0.1]:8080/admin'; console.log(`Checking URL: ${maliciousUrl}`); // The vulnerability causes this to return true (safe) when it should be false const isSafe = isSSRFSafeURL(maliciousUrl); if (isSafe) { console.log('[!] VULNERABLE: URL was deemed safe by the library.'); // Application would proceed to make the request: // fetch(maliciousUrl); } else { console.log('[+] Safe: URL was blocked.'); }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-43929", "sourceIdentifier": "[email protected]", "published": "2026-05-12T18:17:28.970", "lastModified": "2026-05-13T18:24:31.310", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "ssrfcheck is a library that checks if a string contains a potential SSRF attack. In 1.3.0 and earlier, ssrfcheck fails to block Server-Side Request Forgery attacks when the target private IP address is encoded as an IPv4-mapped IPv6 address (e.g. http://[::ffff:127.0.0.1]/). The WHATWG URL parser built into Node.js silently normalizes the IPv4 notation inside the brackets to compressed hex form ([::ffff:7f00:1]) before the library's private-IP regex ever runs. The regex was written to match dot-notation only and therefore never matches any real input β€” all seven IANA private IPv4 ranges, including the AWS/GCP/Azure metadata address 169.254.169.254, are bypassed. Any application using isSSRFSafeURL() to guard HTTP requests made with user-supplied URLs is fully exposed to SSRF."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N", "baseScore": 8.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 4.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-184"}, {"lang": "en", "value": "CWE-918"}]}], "references": [{"url": "https://github.com/felippe-regazio/ssrfcheck/security/advisories/GHSA-j4rj-2jr5-m439", "source": "[email protected]"}, {"url": "https://github.com/felippe-regazio/ssrfcheck/security/advisories/GHSA-j4rj-2jr5-m439", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}