<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ssrfcheck (&lt;= 1.3.0) — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/ssrfcheck--1.3.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata — refreshed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 06 May 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/ssrfcheck--1.3.0/feed.xml" rel="self" type="application/rss+xml"/><item><title>ssrfcheck vulnerable to SSRF via IPv4-mapped IPv6 bypass</title><link>https://feed.craftedsignal.io/briefs/2026-05-ssrfcheck-ssrf/</link><pubDate>Wed, 06 May 2026 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-ssrfcheck-ssrf/</guid><description>ssrfcheck version 1.3.0 and earlier is vulnerable to server-side request forgery (SSRF) attacks because it fails to block private IP addresses encoded as IPv4-mapped IPv6 addresses due to WHATWG URL parsing.</description><content:encoded><![CDATA[<p>The <code>ssrfcheck</code> library, version 1.3.0 and earlier, contains a critical vulnerability that allows attackers to bypass its SSRF protection mechanisms. The vulnerability stems from the library&rsquo;s failure to properly handle IPv4 addresses encoded as IPv4-mapped IPv6 addresses (e.g., <code>http://[::ffff:127.0.0.1]/</code>). The WHATWG URL parser, which is integrated into Node.js, normalizes the IPv4 notation inside the brackets to a compressed hex form before <code>ssrfcheck</code>&rsquo;s private IP regex is executed. This normalization bypasses the regex, which is designed to match dot-notation only. As a result, applications using the <code>isSSRFSafeURL()</code> function are exposed to SSRF attacks, potentially allowing attackers to access cloud metadata, internal network resources, and localhost services. This vulnerability affects all Node.js versions greater than or equal to 10.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker identifies an application using <code>ssrfcheck</code> for URL validation.</li>
<li>The attacker crafts a malicious URL containing a private IP address encoded as an IPv4-mapped IPv6 address, such as <code>http://[::ffff:127.0.0.1]/</code>.</li>
<li>The application receives the URL from an untrusted source (e.g., user input, API parameter, webhook payload).</li>
<li>The application calls <code>isSSRFSafeURL()</code> to validate the URL.</li>
<li>The WHATWG URL parser normalizes the IPv4 notation inside the brackets (e.g., <code>127.0.0.1</code> becomes <code>7f00:1</code>).</li>
<li>The <code>isPrivateIP</code> function attempts to match the normalized IP address against its regex, but the regex fails because it expects dot notation.</li>
<li><code>isSSRFSafeURL()</code> returns true, indicating that the URL is safe.</li>
<li>The application makes an HTTP request to the attacker-controlled URL, leading to SSRF. The attacker can now access internal resources, cloud metadata, or localhost services.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this SSRF vulnerability can lead to significant security breaches. An attacker can potentially steal cloud metadata from AWS, GCP, or Azure instances by sending a request to <code>http://[::ffff:169.254.169.254]/latest/metadata</code>. This metadata often contains sensitive information such as API keys and credentials. The attacker can also pivot to internal network resources that are not exposed to the internet, accessing services on <code>10.x.x.x</code>, <code>172.16.x.x</code>, or <code>192.168.x.x</code>. Furthermore, the attacker can access services bound to loopback on the server, such as administrative interfaces at <code>http://[::ffff:127.0.0.1]/admin</code>. The bypass requires no authentication, special privileges, or non-default configurations. This vulnerability affects every version of <code>ssrfcheck</code> on every Node.js version &gt;= 10, creating a widespread risk for applications relying on this library for SSRF protection.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to a patched version of <code>ssrfcheck</code> that addresses this vulnerability.</li>
<li>As a workaround, implement a custom URL validation function that explicitly checks for IPv4-mapped IPv6 addresses and blocks them before calling <code>isSSRFSafeURL()</code>.</li>
<li>Monitor application logs for suspicious outbound HTTP requests to private IP addresses or cloud metadata endpoints.</li>
<li>Deploy the Sigma rule <code>Detect SSRF Attempt via IPv4-mapped IPv6 Address</code> to detect potential SSRF attempts in web server logs.</li>
<li>Block the IOCs listed in this brief at the network or application level to prevent attackers from exploiting this vulnerability.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>ssrf</category><category>vulnerability</category><category>node.js</category></item></channel></rss>