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

CVE-2026-69192: SSRF Bypass via Parser Differential (Octal vs Decimal) in ip-address JavaScript Library

Alon Barad
Alon Barad
Software Engineer

Aug 3, 2026·6 min read·292 visits

Executive Summary (TL;DR)

A parser discrepancy in 'ip-address' validates leading-zero IPv4 octets as decimal (e.g. '012' -> 12) while network stacks resolve them as octal (e.g. '012' -> 10). This differential allows unauthenticated attackers to bypass internal IP filters and execute Server-Side Request Forgery (SSRF).

CVE-2026-69192 is a critical parser differential vulnerability in the 'ip-address' JavaScript library (versions <= 10.3.0). The library parses IPv4 octets containing leading zeros as base-10 (decimal), whereas standard system resolvers and web environments parse them as base-8 (octal). This discrepancy allows remote attackers to bypass SSRF guards and route malicious requests to internal RFC 1918 networks.

Vulnerability Overview

The 'ip-address' JavaScript library is a widely utilized dependency for parsing, validating, and manipulating IPv4 and IPv6 addresses. Applications frequently leverage this package within security-critical components, such as input sanitizers and Server-Side Request Forgery (SSRF) protection layers, to validate user-supplied hostnames before issuing outbound HTTP requests.

The core of the vulnerability lies in a parser differential between the validation library and the downstream network resolution environments. While the 'ip-address' library parses input strings in a specific format, the runtime network APIs (such as Node.js's network client, getaddrinfo, and operating system resolvers) decode those same inputs differently. This structural inconsistency creates a blind spot where security boundaries can be systematically bypassed.

The vulnerability is classified under CWE-918 (Server-Side Request Forgery) and CWE-20 (Improper Input Validation). By constructing an IPv4 address containing octets with leading zeros, an unauthenticated remote attacker can force the application to treat an internal IP address as public, bypassing the intended security filters and routing arbitrary traffic to restricted resources.

Root Cause Analysis

The root cause of this vulnerability is a fundamental semantic mismatch during the parsing of IPv4 octets. In versions of 'ip-address' prior to 10.3.1, the library used regular expressions to identify decimal segments and subsequently converted these string segments to numeric representations using parseInt(part, 10). The inclusion of the explicit radix of 10 instructed the engine to interpret the string strictly in base-10, disregarding any leading zero markers.

For example, if an attacker provides the string '012.0.0.1', the library validates each group independently. The first group, '012', is decoded via parseInt('012', 10) to yield the decimal value 12. Consequently, the library reconstructs the normalized IP as '12.0.0.1'. Since this IP address belongs to a public class A range, validation methods like isPrivate() or isLoopback() return a boolean false value, indicating the address is safe to access.

Conversely, standard network resolution environments follow different decoding rules. Under the POSIX standard and systems implementing inet_aton or getaddrinfo, any numeric octet prefixed with a leading zero is evaluated as an octal (base-8) representation rather than base-10. Under this interpretation, the octet '012' is converted to (1 * 8^1) + (2 * 8^0) = 10. The resulting network address resolves to '10.0.0.1', which is a private RFC 1918 Class A IP address.

Code Analysis & Patch Walkthrough

The vulnerability was addressed in version 10.3.1 by modifying the regular expression used for address validation and adding pre-checks within the parser. In the vulnerable version, the library relied on RE_ADDRESS in src/v4/constants.ts to identify valid IPv4 addresses. This regex allowed optional leading zeros ([01]?[0-9][0-9]?) which allowed multi-digit octets like 012 to pass validation.

// VULNERABLE REGEX IN src/v4/constants.ts
export const RE_ADDRESS =
  /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;

The patch modified the regular expression to explicitly disallow multi-digit octets from starting with zero. In the updated implementation, single-digit octets 0-9 are allowed, and double-digit octets 10-99 or triple-digit octets 100-255 must begin with a non-zero character. This change prevents the parsing of octal representation formats.

// PATCHED REGEX IN src/v4/constants.ts
export const RE_ADDRESS =
  /^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/g;

Additionally, explicit defensive checks were introduced in the initialization pipeline in src/ipv4.ts. The parser now inspects each dot-separated segment using a simple lookahead pattern /^0\d/ to throw an explicit AddressError when leading zeroes are detected before matching against the main regex.

// DEFENSIVE CHECKS ADDED IN src/ipv4.ts
parse(address: string) {
  const groups = address.split('.');
 
  if (groups.some((group) => /^0\d/.test(group))) {
    throw new AddressError("IPv4 addresses can't have leading zeroes.");
  }
 
  if (!address.match(constants.RE_ADDRESS)) {
    throw new AddressError('Invalid IPv4 address.');
  }
}

Exploitation Methodology

An attacker can exploit this vulnerability by submitting a crafted URL where the host portion is formatted with leading-zero IPv4 octets. In a typical scenario, an target application accepts a user-provided URL and parses the hostname to verify if it points to a restricted internal address. Because the validation layer uses ip-address, the hostname passes the check as safe.

The target application, after allowing the connection, passes the original un-normalized URL to its HTTP client (such as Axios or Node's http module). The underlying HTTP client depends on the runtime environment or system-level resolvers to resolve the hostname. The resolver decodes the leading-zero octet in octal, establishing a connection to the internal network instead of the public network representation recognized by ip-address.

This behavior bypasses blacklist and whitelist defenses. For instance, the system may prevent requests to '10.0.0.0/8', but a request to '010.0.0.1' translates to '8.0.0.1' (public) in ip-address, while standard network environments route it to '8.0.0.1' as well. In contrast, '012.0.0.1' translates to public '12.0.0.1' in ip-address, but routes to '10.0.0.1' in the system resolver, executing SSRF.

Impact Assessment

The impact of CVE-2026-69192 is high because it allows attackers to bypass boundary restrictions designed to protect private services. By leveraging this vulnerability, a remote attacker can interact with internal web servers, metadata APIs, container orchestration interfaces, or databases that are otherwise inaccessible from the public internet.

When deployed within cloud environments, SSRF can lead to the compromise of cloud credentials via access to metadata services (such as AWS IMDSv1 at 'http://169.254.169.254' or equivalent metadata endpoints in Google Cloud and Azure). Although IMDSv2 provides mitigation via session tokens, many environments still fall back to IMDSv1, rendering them vulnerable to total host takeover.

The vulnerability is tracked with a CVSS v4.0 score of 7.7, reflecting a high impact on subsequent systems. While the direct confidentiality of the target server itself is not immediately violated by the parsing library itself, the library is a critical validation control, meaning its failure directly compromises the confidentiality and integrity of subsequent internal targets.

Remediation & Detection Guidance

The primary remediation strategy is upgrading the ip-address library to version 10.3.1 or higher. This update restricts the syntax allowed by the library to match strict standard dot-decimal notation, throwing a clean parsing error for any ambiguous representations.

For systems where an immediate package upgrade is not feasible, developers should implement a pre-validation filter. This filter can scan the input IP string and reject it if any octet contains a leading zero. A simple regular expression such as /\b0\d+/ can identify invalid segments in the hostname before passing the string to the validation library.

Additionally, defense-in-depth principles should be applied at the network layer. Rather than relying solely on application-level validations, organizations should implement strict egress firewalls and network segmentation. Isolating the application servers from internal administrative interfaces prevents successful SSRF even if the application-level validation is bypassed.

Official Patches

beaugundersonOfficial GitHub Release Tag v10.3.1 containing the fix.
beaugundersonOfficial patch commit in ip-address source code repository.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.7/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:H/SI:N/SA:N

Affected Systems

ip-address (npm package) versions <= 10.3.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
ip-address
beaugunderson
< 10.3.110.3.1
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v4.0 Score7.7
Exploit StatusProof of Concept
ImpactServer-Side Request Forgery
Vulnerable ComponentAddress4 Class
Remediation StatusOfficial Patch Released

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web server receives a URL or similar vector from an upstream source and does not validate it properly before executing the connection, allowing an attacker to force the server to connect to arbitrary destinations.

Known Exploits & Detection

GitHub Security AdvisoryVulnerability proof of concept and description details in official advisory.

Vulnerability Timeline

Vulnerability discovered and analyzed
2026-02-15
Fix commit pushed and version 10.3.1 released
2026-02-16
GitHub Advisory GHSA-mwp4-54f8-5fhr published
2026-02-17

References & Sources

  • [1]GHSA-mwp4-54f8-5fhr: Parser differential in ip-address
  • [2]Fix parser differential commit
  • [3]Release v10.3.1
  • [4]CVE-2026-69192 Record

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

•32 minutes ago•GHSA-9Q47-3CM2-2RP8
6.5

GHSA-9Q47-3CM2-2RP8: Rate-Limit Bypass and Audit Log Spoofing in pyLoad WebUI

A critical security vulnerability has been identified and patched in the WebUI component of pyLoad, a popular Python-based open-source download manager. This vulnerability allows attackers to completely bypass API rate limits and spoof client IP addresses in audit logs due to unsafe parsing of the X-Forwarded-For HTTP header.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 2 hours ago•GHSA-68W4-83FH-F2W8
8.8

GHSA-68W4-83FH-F2W8: Privilege Escalation and Administrative Password Oracle in pyLoad-ng

An authorization bypass and credential oracle vulnerability in pyload-ng allows authenticated users with minimal or no privileges to brute-force the administrator password. This is achieved through sensitive API methods exposed globally combined with a non-constant-time password hash comparison algorithm.

Alon Barad
Alon Barad
6 views•7 min read
•about 3 hours ago•GHSA-R44W-V6GF-X3P6
8.1

Authentication Bypass in pyLoad API Key Caching Mechanism (GHSA-R44W-V6GF-X3P6)

An authentication bypass vulnerability in pyLoad allows unauthenticated remote attackers to gain administrative API access. The vulnerability is caused by a logical flaw in the API key cache validation lookup, where authentication states are cached using only the public key identifier, skipping cryptographic token verification on cache hits.

Alon Barad
Alon Barad
9 views•7 min read
•about 4 hours ago•CVE-2026-107728
7.5

CVE-2026-107728: Authorization Bypass in Strawberry GraphQL Permission Validation

An authorization bypass vulnerability in Strawberry GraphQL between versions 0.217.0 and 0.326.1 occurs when a synchronous permission handler returns an awaitable object (such as an unawaited coroutine). Due to Python's truthiness rules, the unawaited coroutine is evaluated as True, leading to an immediate bypass of security policies.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 5 hours ago•CVE-2026-107727
3.7

CVE-2026-107727: Connection-Level Denial of Service via State Leak in Strawberry GraphQL Legacy WS Handler

An uncontrolled resource consumption vulnerability in Strawberry GraphQL allows unauthenticated remote attackers to trigger a Denial of Service on persistent WebSocket connections using the legacy graphql-ws protocol. When the server enforces max_subscriptions_per_connection, naturally terminating subscriptions are not cleared from memory registries, leading to exhaustion of connection slots.

Alon Barad
Alon Barad
10 views•6 min read
•about 6 hours ago•CVE-2026-107723
8.1

CVE-2026-107723: Silent Claim-Validator Bypass in NearForm fast-jwt via Array Payload Type Confusion

A high-severity type-confusion vulnerability exists in NearForm fast-jwt prior to version 6.3.0. The vulnerability allows attackers to bypass crucial claim validation steps (such as expiration, issuer, audience, and subject validations) by presenting a validly signed JSON Web Token structured as a JSON array instead of a JSON object. This occurs because the library's decoder fails to reject JSON arrays during type evaluation.

Alon Barad
Alon Barad
10 views•6 min read