ip-address, SSRF Bypass, No CVE ID provided (Medium) -DC-Sep2026-2600

Listen to this Post

The `ip-address` library’s `Address6.isLinkLocal()` method incorrectly identifies link-local addresses. It checks for `fe80::/64` instead of the correct `fe80::/10` range. Link-local unicast is defined as the entire `/10` prefix under RFC 4291 §2.4 and the IANA IPv6 Special-Purpose Address Registry. The method compares the first 64 bits of an address against a literal string that only matches fe80:0000:0000:0000, so it accepts only 2⁶⁴ of the 2¹¹⁸ addresses in fe80::/10. As a result, addresses like fe81::1, fe8f::1, and `febf::1` are not recognized as link-local, even though they should be. The library contradicts itself: `getType()` returns ‘Link-local unicast’ for these addresses, `getScope()` returns ‘Link local’, and `isHostInSubnet(new Address6(‘fe80::/10’))` returns true, while `isLinkLocal()` returns false. This inconsistency allows an attacker to bypass SSRF filters that rely on isLinkLocal(). An application using this method to block internal requests would allow requests to link-local addresses outside the `fe80::/64` range. This can lead to access to neighboring machines or the on-link router on the server’s own segment. The vulnerability affects all versions up to 10.5.0. The fix involves testing against `fe80::/10` using the `isHostInSubnet` predicate.

DailyCVE Form:

Platform: ip-address
Version: <= 10.5.0
Vulnerability: SSRF bypass
Severity: Medium
date: Not specified

Prediction: Unknown

What Undercode Say:

npm i [email protected]
const { Address6 } = require('ip-address');
function isBlocked(host) {
const a = new Address6(host);
return a.isLoopback() || a.isLinkLocal() || a.isPrivate() || a.isMulticast() || a.isUnspecified();
}
for (const h of ['fe80::1', 'fe81::1', 'febf::1', 'fe80:0:0:1::1']) {
const a = new Address6(h);
console.log(isBlocked(h) ? 'BLOCK' : 'ALLOW', h, '-> getType()', a.getType());
}

Exploit: (Educational Purposes!)

const { Address6 } = require('ip-address');
const target = 'fe81::1';
const address = new Address6(target);
console.log(address.isLinkLocal()); // false
console.log(address.getType()); // 'Link-local unicast'
// A guard using isLinkLocal() would allow this address.

Protection:

const LINK_LOCAL = new Address6('fe80::/10');
const linkLocal = new Address6(host).isHostInSubnet(LINK_LOCAL);

Impact:

Allows SSRF to link-local addresses outside fe80::/64, reaching hosts on the server’s own segment.

🎯Let’s Practice Exploiting & Learn Patching For Free:

🎓 Live Courses & Certifications:

Join Undercode Academy for Verified Certifications

🚀 Request a Custom Project:

Secure, high-velocity infrastructure and disruptive technological engineering. Contact our engineering team for high-tier development and proprietary systems:
[email protected]
💎 Smart Architecture | 🛡️ Secure by Design | ⭐ Trusted by Thousands

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top