CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-101913

CVE-2026-101913: Link-Local Address Validation Bypass in ip-address Library Enables SSRF

Alon Barad
Alon Barad
Software Engineer

Sep 29, 2026·6 min read·3 visits

Executive Summary (TL;DR)

A logic bug in the ip-address library (< 10.5.1) causes isLinkLocal() to fail to identify valid link-local IPv6 addresses outside the fe80::/64 subnet, enabling SSRF bypasses.

A validation bypass exists in the ip-address library prior to version 10.5.1. The Address6.isLinkLocal() method inaccurately restricted link-local classifications to the fe80::/64 subnet, failing to cover the complete RFC 4291 fe80::/10 allocation. This allows attackers to bypass SSRF filters relying on this library to safeguard local network boundaries.

Vulnerability Overview

The ip-address npm package is a widely utilized utility library in JavaScript and TypeScript environments for parsing, validating, and manipulating IPv4 and IPv6 network addresses. Applications frequently employ this library within input validation pipelines and security boundary checks to prevent Server-Side Request Forgery (SSRF) and to restrict outbound connections to designated safe ranges.

This vulnerability, tracked as CVE-2026-101913, stems from an incorrect classification logic in the library's link-local check. It is categorized under CWE-697 (Incorrect Comparison) and can lead directly to CWE-918 (Server-Side Request Forgery).

The attack surface exists anywhere user-controlled input is parsed by Address6 and filtered using the isLinkLocal() method before initiating outbound server requests. Because the library fails to identify certain valid link-local addresses, security filters are bypassed, exposing local physical or virtual networks to unauthorized access.

Root Cause Analysis

According to RFC 4291 §2.4, the prefix fe80::/10 is reserved globally for IPv6 link-local unicast communications. This allocation spans a broad range of addresses from fe80:: to febf::, requiring only the first 10 bits of the address structure to match the binary sequence 1111 1110 10. Operating systems, network cards, and routing frameworks natively recognize the entire /10 subnet as link-local.

In versions of the ip-address library prior to version 10.5.1, the validation logic in Address6.isLinkLocal() was restricted to a static, hardcoded comparison against a 64-bit binary literal string. This comparison enforced that bits 10 through 63 must be strictly set to zero, matching only the fe80::/64 prefix commonly utilized by Stateless Address Autoconfiguration (SLAAC).

This narrow evaluation introduced a logical discrepancy between the library's validation and the system's underlying routing engine. When an input address like fe81::1 or fe80:0:0:1::1 was parsed, isLinkLocal() returned false. However, the host operating system's networking stack resolved and routed the subsequent outbound packets to adjacent hosts on the local link, creating a complete security boundary bypass.

Code Analysis

To understand the exact programmatic mistake, let us analyze the code transition in src/ipv6.ts that occurred in version 10.5.1. The old code utilized a strict string check that was highly brittle and did not scale to proper subnet masking.

Here is the comparison between the vulnerable and patched code paths:

// VULNERABLE CODE - ip-address <= 10.5.0
isLinkLocal(): boolean {
  if (this.is4()) {
    const embedded = this.embeddedIPv4();
    if (embedded) {
      return embedded.isLinkLocal();
    }
  }
 
  // Zeroes are required, i.e. we can't check isHostInSubnet with 'fe80::/10'
  if (
    this.getBitsBase2(0, 64) ===
    '1111111010000000000000000000000000000000000000000000000000000000'
  ) {
    return true;
  }
 
  return false;
}
// PATCHED CODE - ip-address >= 10.5.1
isLinkLocal(): boolean {
  if (this.is4()) {
    const embedded = this.embeddedIPv4();
    if (embedded) {
      return embedded.isLinkLocal();
    }
  }
 
  // Delegation to the proper subnet validation engine using the correct /10 definition
  return this.isHostInSubnet(LINK_LOCAL_SUBNET);
}

In the patched version, the developer registered LINK_LOCAL_SUBNET as a static Address6 instance containing 'fe80::/10'. By delegating the evaluation to the existing isHostInSubnet() mechanism, the library correctly evaluates the first 10 bits and ignores any variations in the subsequent bits, resolving the logical error.

Exploitation Methodology

Exploiting this validation flaw requires minimal effort and is highly reliable since the vulnerability depends solely on logical comparison differences between the application and the network layer. The prerequisites are an unauthenticated input interface that executes HTTP requests or TCP connections and validates the destination using ip-address.

The exploit flow starts with the attacker generating a target address that resides within the fe80::/10 range but outside the fe80::/64 boundary. An example of such an address is fe80:0:0:1::1 or fe81::1. The attacker supplies this IP inside a payload to the vulnerable endpoint (e.g., http://[fe81::1]/status).

When the endpoint parses the input, the validation wrapper invokes isLinkLocal(), which returns false due to the logical limitation. The security check is bypassed, and the HTTP client executes the request. The underlying system socket routes the packet to the local interface, establishing a connection with adjacent administrative interfaces or services on the local link.

Here is a visual representation of the attack execution path:

Security Impact Assessment

The primary risk associated with this vulnerability is unauthenticated Server-Side Request Forgery (SSRF). Attackers can leverage the bypass to reach adjacent internal systems, local administrative interfaces, and local hypervisor metadata endpoints that are typically restricted from external network access.

While the scope of the attack is constrained to link-local adjacent assets, the information leakage can be severe if local systems trust adjacent nodes without authentication. This vulnerability allows port scanning of the local link, interaction with adjacent system services, and potential extraction of configuration data.

The vulnerability is assessed with a CVSS v4.0 base score of 6.3 (Medium). The score reflects a Network-based, Low complexity attack vector that requires no privileges or user interaction, but results in Low confidentiality impact on both the vulnerable system and subsequent systems (VC:L, SC:L).

Remediation and Hardening

The recommended remediation is to upgrade the ip-address dependency to version 10.5.1 or higher. This update replaces the flawed comparison logic with robust subnet-mask evaluations for the complete fe80::/10 range.

npm install ip-address@10.5.1

If immediate package upgrade is impossible, developers can mitigate the flaw by implementing a manual prefix check. The application should reject any IPv6 address where the first 10 bits in binary translate to 1111111010 (corresponding to the fe80::/10 space).

Additionally, applications should adopt defensive-in-depth principles. This includes pinning the IP address resolved from DNS immediately, enforcing zero-trust egress rules at the network layer, and restricting local link-local routing rules for application host systems.

Technical Appendix

CVSS Score
6.3/ 10

Affected Systems

Applications utilizing the JavaScript/TypeScript 'ip-address' package for security validation.
AttributeDetail
CWE IDCWE-697, CWE-918
Attack VectorNetwork (Unauthenticated)
CVSS v4.06.3 (Medium)
EPSS StatusNot yet listed
ImpactBypass of SSRF network boundary controls
Exploit StatusNo active wild exploitation tracked
KEV StatusNot listed

References & Sources

  • [1]NVD Detail Page
  • [2]CVE.org Record
  • [3]GitHub Security Advisory
  • [4]Release Page (v10.5.1)

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•17 minutes ago•CVE-2026-88058
8.6

CVE-2026-88058: Cross-Site Scripting via Server-Side Serialization Discrepancy in @angular/platform-server

A high-severity Cross-Site Scripting (XSS) vulnerability in Angular server-side rendering (SSR) component allows unauthenticated attackers to execute arbitrary client-side JavaScript. The flaw is caused by a parsing discrepancy between the server-side DOM emulator, Domino, and standard client-side browser HTML5 parsers. When serializing ProcessingInstruction nodes inside raw-content fallback elements, Domino fails to escape matching ancestor closing tags, causing the client-side parser to transition out of raw-text mode prematurely and execute subsequent sibling elements as active HTML.

Alon Barad
Alon Barad
3 views•9 min read
•about 1 hour ago•CVE-2026-101910
6.9

CVE-2026-101910: Server-Side Request Forgery Bypass via NAT64 Local-Use Address Range in ip-address Library

A validation bypass vulnerability exists in the npm package `ip-address` from version 10.2.0 to 10.5.1. The library's `Address6.isPrivate()` classifier fails to recognize the NAT64 local-use prefix range 64:ff9b:1::/48 as a restricted, private subnet. In networks implementing NAT64 routing configurations, an attacker can exploit this flaw to execute Server-Side Request Forgery (SSRF) and bypass local trust-boundary validations.

Alon Barad
Alon Barad
2 views•6 min read
•about 3 hours ago•CVE-2026-84394
7.5

CVE-2026-84394: Host Confusion and SSRF Bypass via Parser Discrepancy in fast-uri

An interpretation conflict in the fast-uri library allows unauthenticated remote attackers to bypass Server-Side Request Forgery filters due to inconsistent handling of malformed bracket notation in hostnames.

Alon Barad
Alon Barad
4 views•6 min read
•about 4 hours ago•CVE-2026-84292
7.5

CVE-2026-84292: Authority Injection in fast-uri via Unvalidated Port Component

An authority injection vulnerability exists in the serialization components of fast-uri (versions before 2.4.6, 3.1.7, and 4.1.4) where unvalidated port components can contain authority delimiters (such as '@'). This results in host demotion to userinfo, redirection of traffic to an arbitrary attacker-controlled host, and downstream Server-Side Request Forgery (SSRF) without causing parser errors in standard clients.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 5 hours ago•CVE-2026-87859
5.3

CVE-2026-87859: Log Injection Vulnerability in Morgan HTTP Request Logger

CVE-2026-87859 is a medium-severity log injection vulnerability in the Node.js morgan HTTP request logger middleware. Prior to version 1.12.1, the internal sanitization utility fails to escape double-quote characters within logged fields, enabling unauthenticated remote attackers to inject arbitrary text, close log fields early, and spoof critical metadata in downstream log parsers.

Alon Barad
Alon Barad
5 views•8 min read
•about 7 hours ago•CVE-2026-88932
5.3

CVE-2026-88932: Uncontrolled Resource Consumption (Denial of Service) via orphaned disk writes on aborted uploads in multer

An uncontrolled resource consumption vulnerability exists in the multer middleware for Node.js (versions 2.2.0 through 2.3.0) when handling aborted multipart uploads using disk storage. Due to an asynchronous race condition in path resolution, files can become permanently orphaned on disk, leading to storage exhaustion and denial of service.

Alon Barad
Alon Barad
7 views•6 min read