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-101912

CVE-2026-101912: Cross-Family IP Address Subnet Containment Logic Bypass in ip-address Library

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 30, 2026·6 min read·37 visits

Executive Summary (TL;DR)

A logical error in the ip-address library allows cross-family IP comparisons (IPv4 vs. IPv6) to collide. This enables attackers to bypass IP-based filters and access controls by submitting crafted IPv6 addresses that mimic private IPv4 subnets.

The ip-address library is vulnerable to a logical bypass in its subnet containment methods. The functions isInSubnet() and isHostInSubnet() do not verify that compared addresses belong to the same IP family before performing masking checks. Under specific circumstances, an IPv6 address can share leading bit patterns with an IPv4 subnet, causing the containment check to evaluate as true. This allows attackers to bypass access control lists, firewalls, and server-side request forgery protection layers in applications relying on the library.

Vulnerability Overview

The ip-address library is a widely utilized package in the JavaScript and TypeScript ecosystems for parsing, manipulating, and validating IPv4 and IPv6 addresses. Security-sensitive systems frequently use this package to implement IP-based access control lists, firewalls, and server-side request forgery filtering mechanisms. When applications evaluate network boundaries, they rely on containment utilities to verify if a given IP address belongs to a specific range.

CVE-2026-101912 identifies a serious logical flaw within the subnet containment validation functions defined in src/common.ts. These functions, including isInSubnet() and isHostInSubnet(), perform comparisons on binary-masked strings. However, they fail to verify that both the subnet and the host belong to the same IP family before performing the evaluation. This incorrect comparison leads to a false-positive equivalence when checking disjoint network types.

The vulnerability is classified under CWE-697 (Incorrect Comparison) and CWE-843 (Access of Resource Using Incompatible Type, also known as Type Confusion). Because of the dynamic nature of JavaScript type matching, the library allows an Address6 object to be processed within an Address4 containment verification context. If the leading bits of an IPv6 address align with the prefix of an IPv4 subnet, the library incorrectly determines that the host is contained within that subnet.

Root Cause Analysis

The underlying security issue resides in the shared utility functions within src/common.ts of the ip-address codebase. The function isHostInSubnet() compares the masked binary representation of a target address against the masked binary representation of the host. Specifically, it retrieves the subnet mask of the network operand and applies that mask length to the binary representation of the host address.

When a mask is applied via the .mask(n) helper, the library computes the leading bits up to the length n and returns them as a zero-padded binary string. For an IPv4 address, the binary length is at most 32 bits, whereas for an IPv6 address, it is 128 bits. If a short subnet mask is applied to both, the library only evaluates the first n bits of each address representation.

Consider the comparison between the IPv4 subnet 10.0.0.0/8 and the IPv6 address a00::1. The first octet of the IPv4 address is 10, which yields the 8-bit binary string 00001010. The first 16-bit block of the IPv6 address a00::1 is 0a00, which converts to the binary sequence 0000101000000000. Masking this IPv6 address to 8 bits extracts the identical binary sequence 00001010. The comparison of these two strings evaluates to true despite the addresses belonging to disjoint network layers.

Code Analysis

To understand the exact structural vulnerability, we must examine the implementation of the isHostInSubnet function prior to version 10.7.1. The vulnerable logic did not contain any validation checks to enforce type or bit-width consistency between the two compared entities.

// Vulnerable code in src/common.ts before v10.7.1
export function isHostInSubnet(this: Address4 | Address6, address: Address4 | Address6) {
  // The function directly calls mask on the host and compares it to the address mask
  // No validation is performed on 'this' versus 'address' classes or lengths
  return this.mask(address.subnetMask) === address.mask();
}

The patched version introduces a strict verification check that compares the padded binary string lengths before executing the masking comparison. Because IPv4 addresses pad to 32 characters and IPv6 addresses pad to 128 characters, any type mismatch is caught immediately before the string equivalence comparison.

// Patched code in src/common.ts in v10.7.1
export function isHostInSubnet(this: Address4 | Address6, address: Address4 | Address6) {
  // Confirm that both address classes have matching binary zero-padded lengths
  // This isolates 32-bit IPv4 addresses from 128-bit IPv6 addresses
  if (this.binaryZeroPad().length !== address.binaryZeroPad().length) {
    return false;
  }
 
  return this.mask(address.subnetMask) === address.mask();
}

This remediation ensures that cross-family comparison attempts always return false, neutralizing the logical flaw.

Exploitation & Proof-of-Concept

Exploitation of CVE-2026-101912 requires a target application to accept arbitrary IP address inputs and validate them against a restricted subnet using the ip-address library. Common targets include administrative dashboards, forward proxies, or webhooks that employ IP-based access control lists (ACLs) to block internal connections.

An attacker can craft a specific IPv6 address designed to collide with a restricted internal IPv4 range. In a typical Server-Side Request Forgery (SSRF) bypass scenario, the application might block private IP ranges (such as 10.0.0.0/8). By supplying the IPv6 address a00::1, which evaluates to the same leading 8-bit sequence as 10.0.0.0/8, the containment check evaluates to true. If the application logic permits requests based on this containment check, the filter is bypassed.

This diagram displays the process by which different families produce matching binary patterns, resulting in the security bypass.

Impact Assessment

The security impact of CVE-2026-101912 depends heavily on the context in which the ip-address library is used. In applications utilizing the library to enforce network isolation, this vulnerability can lead to authorization bypasses, access control list evasion, or server-side request forgery. The CVSS v4.0 base score is calculated at 6.3, reflecting medium severity with partial integrity impact.

An attacker exploiting this flaw cannot execute arbitrary code directly through the library itself, but they can subvert routing or proxy constraints to query internal microservices. In cloud environments, this may expose sensitive internal metadata endpoints, such as the Instance Metadata Service (IMDS). Evasion of access controls on administrative interfaces can also lead to unauthorized data disclosure if backend APIs are exposed to external queries.

The Exploit Prediction Scoring System (EPSS) score is 0.0037, indicating a low probability of active exploitation in typical deployments. However, because the logical flaw is deterministic, security researchers can easily replicate the behavior to identify vulnerable ingress points.

Remediation & Defensive Guardrails

The primary remediation strategy is upgrading the ip-address package to version 10.7.1 or later. This version enforces strict length comparisons, preventing type collisions between IPv4 and IPv6 addresses. Development teams must update their package manifests and rebuild their environments to apply the patch.

If upgrading is not immediately possible, applications should implement input sanitization to ensure that only a single IP family is processed within a given validation loop. Explicitly verifying that the input string does not contain colon characters before checking against an IPv4 subnet provides an immediate workaround. Normalizing all incoming IP representations prior to passing them to validation methods reduces the risk of type confusion.

// Temporary mitigation workaround
function safeSubnetCheck(userInput, allowedSubnet) {
  const isUserV6 = userInput.includes(':');
  const isSubnetV6 = allowedSubnet.includes(':');
  
  if (isUserV6 !== isSubnetV6) {
    return false; // Force fail if families mismatch
  }
  // Proceed to standard evaluation safely
}

Additionally, implementing strict firewall rules at the network layer provides defense-in-depth, ensuring that logical bypasses within application code do not translate to successful network connections.

Official Patches

Beau GundersonCode Fix Commit (Family Check)
Beau GundersonSister Code Fix Commit (Input length limit)

Fix Analysis (2)

Technical Appendix

CVSS Score
6.3/ 10
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
EPSS Probability
0.37%
Top 72% most exploited

Affected Systems

Node.js applications using the ip-address npm library

Affected Versions Detail

Product
Affected Versions
Fixed Version
ip-address
Beau Gunderson
< 10.7.110.7.1
AttributeDetail
CWE IDCWE-697 / CWE-843
Attack VectorNetwork (AV:N)
CVSS v4.0 Score6.3 (Medium)
EPSS Score0.0037 (Percentile: 28.38%)
ImpactPartial Integrity (ACL/SSRF Filter Bypass)
Exploit StatusProof-of-Concept (PoC) Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-697
Incorrect Comparison

The library compares two binary masked strings representing different IP families without ensuring that both operands are of the same type, resulting in a false-positive equivalence check.

Vulnerability Timeline

Code fixes committed and version 10.7.1 released on npm.
2026-09-15
GitHub Security Advisory (GHSA-j6r3-76f7-8jcv) published.
2026-09-28
CVE-2026-101912 registered and published on NVD.
2026-09-28

References & Sources

  • [1]GitHub Security Advisory (GHSA-j6r3-76f7-8jcv)
  • [2]Patch Commit
  • [3]Release tag v10.7.1
  • [4]NVD Record Details
  • [5]CVE.org Record Details
  • [6]Wiz Vulnerability Database Details

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

•3 minutes ago•CVE-2026-128087
3.7

CVE-2026-128087: Premature Key Exchange Callback Invocation Prior to Host Key Verification in russh

CVE-2026-128087 (GHSA-9264-jvgf-6w2f) is an incorrect behavior order (CWE-696) and improper authorization (CWE-863) vulnerability in the russh Rust SSH library, affecting versions 0.55.0 through 0.65.0. During the initial SSH key exchange (KEX) handshake, the client state machine invokes the client::Handler::kex_done() callback—providing the negotiated raw shared secret bytes—prior to validating the remote server's host key or certificate via check_server_key(). Consequently, an untrusted or rogue SSH server can complete cryptographic key agreement and force a connecting client to execute side-effecting application logic inside kex_done() before the server's identity is checked and rejected.

Amit Schendel
Amit Schendel
0 views•10 min read
•about 1 hour ago•CVE-2026-128082
7.5

CVE-2026-128082: Uncontrolled Recursion and Denial of Service in AutoMapper via Constructor Parameter Mapping

CVE-2026-128082 (GHSA-6vhm-j9h7-f9gh) is an uncontrolled recursion vulnerability (CWE-674) in AutoMapper, a convention-based object-object mapper for .NET. When mapping nested or self-referential types into destination models that rely on parameterized constructors, C# positional records, or recursive ConstructUsing expressions, AutoMapper evaluates child constructor arguments prior to incrementing the parent's recursion depth counter. This ordering flaw bypasses both explicit MaxDepth limits and the default depth limit of 64. An unauthenticated remote attacker can supply deeply nested input payloads to affected endpoints, exhausting the thread call stack and triggering an uncatchable System.StackOverflowException that terminates the hosting .NET process.

Amit Schendel
Amit Schendel
3 views•11 min read
•about 2 hours ago•CVE-2026-128080
5.8

CVE-2026-128080: Sensitive Query Parameter Disclosure on Incoming Server Spans in OpenTelemetry JavaScript (@opentelemetry/instrumentation-http)

An information exposure vulnerability in the @opentelemetry/instrumentation-http package for OpenTelemetry JavaScript versions 0.204.0 prior to 0.222.0 causes incoming HTTP server spans to record raw, unredacted query string parameters under the url.query attribute. While outgoing client spans applied built-in and user-configured query parameter redaction, incoming server spans bypassed this sanitization completely, resulting in the transmission of sensitive credentials such as pre-signed cloud URLs and API tokens to external observability backends.

Alon Barad
Alon Barad
3 views•10 min read
•about 3 hours ago•CVE-2026-128089
7.5

CVE-2026-128089: Uncontrolled Resource Consumption in dnspython WKS Record Parser

CVE-2026-128089 is an uncontrolled resource consumption vulnerability in the dnspython toolkit for Python, affecting all versions prior to 2.9.2. When parsing Well-Known Service (WKS) records from text via dns.rdtypes.IN.WKS.WKS.from_text(), the parser fails to validate that numeric service port identifiers fall within the RFC 1035 valid range of 0 through 65535. An attacker capable of supplying untrusted zone files or RDATA text strings containing an arbitrarily large service port integer can force the parser to allocate an unbounded bitmap array using an inefficient linear append loop, resulting in severe CPU exhaustion, application hangs, or Out-Of-Memory (OOM) process termination.

Amit Schendel
Amit Schendel
4 views•10 min read
•about 4 hours ago•CVE-2026-126347
3.1

CVE-2026-126347: Open Redirect via Triple-Slash Redirect Paths in Tornado RedirectHandler

CVE-2026-126347 (GHSA-5cjw-f85j-cv6r) is an open redirect vulnerability (CWE-601) in Tornado, an asynchronous Python networking library and web framework. The flaw resides in tornado.web.RedirectHandler when dynamic URL redirection templates incorporate unvalidated user input. Due to a parser differential between RFC 3986 (used by Python's urllib.parse.urlsplit) and the WHATWG URL Standard (used by modern web browsers), inputs containing three or more leading slashes bypass Tornado 6.6.0's validation logic, allowing unauthenticated attackers to redirect users to arbitrary external domains.

Alon Barad
Alon Barad
4 views•11 min read
•about 5 hours ago•CVE-2026-128123
5.9

CVE-2026-128123: Uncaught Exception and Denial of Service in SvelteKit @sveltejs/adapter-node

A Denial of Service (DoS) vulnerability exists in @sveltejs/adapter-node versions 5.5.7 and 6.0.0-next.0 through 6.0.0. When a SvelteKit server route returns a direct response from a fetch() call with a Content-Type of text/event-stream, the Node.js adapter attempts to mutate the response headers to disable proxy buffering. Because headers returned directly by the WHATWG Fetch API carry an immutable guard, this mutation throws an unhandled TypeError, terminating the underlying Node.js process and denying service to all active and subsequent clients.

Alon Barad
Alon Barad
4 views•9 min read