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

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

Alon Barad
Alon Barad
Software Engineer

Sep 29, 2026·6 min read·30 visits

Executive Summary (TL;DR)

Malformed URLs with unbalanced brackets bypass fast-uri checks but resolve to internal hosts in WHATWG HTTP clients, enabling SSRF.

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.

Vulnerability Overview

The fast-uri library is a high-performance URI parsing and serialization package designed for Node.js environments. It serves as an alternative to the native Node.js WHATWG URL implementation, optimizing for processing speed and compliance with RFC 3986. The package is integrated into high-throughput web frameworks and reverse proxies where processing performance is a critical path.\n\nThis library contains an interpretation conflict vulnerability (CWE-436) when processing URL structures featuring malformed bracket notation in the host portion of the authority block. If an input URL contains unbalanced or misplaced brackets (such as [ or ]), the parser fails to identify the structure as invalid or to classify it correctly as an IP literal.\n\nBecause fast-uri does not reject the malformed input, it returns the entire bracket-laden host string to the calling application as a valid hostname. A parser differential arises when the application passes this same validated URL to standard HTTP clients that follow WHATWG parsing specifications. This discrepancy undermines Server-Side Request Forgery (SSRF) protections, allowing attackers to route requests to internal interfaces.

Root Cause Analysis

Under RFC 3986, square brackets in the authority segment are reserved for IP-literal formats, such as IPv6 or IPvFuture addresses. Standard domain names (registered names or reg-name) must not contain bracket characters. The vulnerable versions of fast-uri perform an incomplete check to determine if a host represents an IP literal, relying on a simple check of the start and end characters.\n\nSpecifically, the library implements bracketedIPLiteral by checking if the first character of the host is [ and the final character is ]. If a host string such as [@127.0.0.1 is evaluated, this check returns false because the closing bracket is absent at the absolute end. Since the check returns false, the parser skips strict IPv6 verification and fails to raise an error. The unbalanced bracket is not treated as an illegal character within the domain name, leading to the host being successfully parsed.\n\nWhen a WHATWG-compliant parser processes this same malformed URL, it processes the authority block according to different precedence rules. The WHATWG standard recognizes the @ character as a delimiter between credentials (userinfo) and the hostname. Consequently, a URL like http://[@127.0.0.1 splits the authority into a username of [ and a hostname of 127.0.0.1. This inconsistent parsing creates a security discrepancy between validation and execution pathways.\n\nmermaid\ngraph LR\n Input["URL: http://[@127.0.0.1"] --> FastURI["fast-uri parser"]\n Input --> WHATWG["WHATWG Parser (e.g., axios)"]\n FastURI --> FastResult["Host: '[@127.0.0.1' (Accepted)"]\n WHATWG --> WHATWGResult["Host: '127.0.0.1' (Internal Loopback)"]\n

Code-Level Analysis

The vulnerability is situated within the host normalization and status parsing logic of fast-uri. In the vulnerable code path, the lack of comprehensive bracket validation allows invalid IP-literal structures to pass into downstream canonicalization routines. This lack of initial validation prevents the parser from flagging the malformed structure as a failure state.\n\njavascript\n// Vulnerable logic in fast-uri\nconst bracketedIPLiteral = parsed.host[0] === '[' && parsed.host[parsed.host.length - 1] === ']'\nconst ipv6result = normalizeIPv6(parsed.host)\nisIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true\nmalformedIPLiteral = bracketedIPLiteral && ipv6result.error === true\n\n\nIn the patched versions, the maintainers isolated the bracket checking logic into an independent function called isIPLiteral and added validation via hasIPLiteralBracket to identify any bracket character anywhere in the host string. This ensures that any bracket occurrences trigger validation as an IP literal, forcing a check that will eventually fail and yield a malformed host error.\n\njavascript\n// Patched logic in fast-uri\nfunction isIPLiteral (host) {\n return host[0] === '[' && host[host.length - 1] === ']';\n}\n\n// Within parseWithStatus:\nconst bracketedIPLiteral = isIPLiteral(parsed.host);\nconst hasIPLiteralBracket = parsed.host.indexOf('[') !== -1 || parsed.host.indexOf(']') !== -1;\nconst ipv6result = normalizeIPv6(parsed.host);\nisIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true;\nmalformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true);\n\n\nAdditionally, the host canonicalization block is guarded. If malformedIPLiteral evaluates to true, the library blocks canonicalization and marks the parsing status as failed. This prevents unclosed bracket payloads from bypassing validation controls.

Exploitation & Proof of Concept

Exploiting this vulnerability requires an application that uses a vulnerable version of fast-uri to sanitize or validate URLs before passing them to a WHATWG-compliant HTTP client. The attacker must have control over the destination URL. No authentication or special privileges are required to submit the payload.\n\nTo perform the bypass, the attacker constructs a payload containing an unbalanced bracket immediately preceding the userinfo delimiter symbol. A common vector format is http://[@127.0.0.1/admin. When processed by fast-uri, the hostname is extracted as [@127.0.0.1. If the application's defense filter matches this string against a list of blocked hosts (such as 127.0.0.1 or localhost), the string fails to trigger the block, and the request is permitted.\n\njavascript\n// Proof of Concept Demonstration\nconst fastURI = require('fast-uri');\nconst payloadUrl = 'http://[@127.0.0.1:8080/admin';\n\n// fast-uri parses the malformed URL successfully\nconst parsedFast = fastURI.parse(payloadUrl);\nconsole.log(parsedFast.host); // Outputs: "[@127.0.0.1"\n\n// Downstream client interprets using WHATWG rules\nconst parsedNative = new URL(payloadUrl);\nconsole.log(parsedNative.hostname); // Outputs: "127.0.0.1"\n\n\nFollowing validation, the application executes the connection using a native client or library (such as axios or fetch). The downstream engine parses the same URL, identifies [ as userinfo, and resolves the request to 127.0.0.1. This allows the attacker to connect to local interfaces or cloud metadata endpoints.

Impact Assessment

The impact of CVE-2026-84394 is high because it facilitates arbitrary Server-Side Request Forgery (SSRF) on applications that rely on fast-uri for URL routing or validation filters. SSRF allows remote attackers to scan internal infrastructure, access local APIs, or interact with restricted cloud metadata services (e.g., the AWS Instance Metadata Service at 169.254.169.254).\n\nThe CVSS v3.1 base score of 7.5 reflects a high-severity rating. The attack vector is Network, requiring low complexity and no privileges or user interaction. The scope remains unchanged since the exploit operates within the same authorization boundaries of the host system. The impact is primarily categorized as High for Integrity, because the vulnerability allows attackers to bypass security filters designed to maintain network integrity.\n\nWhile there is no current evidence of weaponized exploitation in the wild, the availability of documented proof-of-concept vectors increases the likelihood of opportunistic attacks. Security teams must assume that any endpoint validating URLs with fast-uri and fetching them via standard Node.js engines is vulnerable.

Remediation & Defense Guidance

The primary remediation path is to upgrade the fast-uri package to a patched release. For environments running the 2.x branch, upgrade to 2.4.6 or higher. For the 3.x branch, upgrade to 3.1.7 or higher. For the 4.x branch, upgrade to 4.1.4 or higher.\n\nIf the dependency is transitively pulled by third-party packages, use dependency overrides or resolutions within the package configuration. Adding an overrides block in npm package.json or a resolutions block in Yarn forces the package manager to use the secure version across all dependencies.\n\nTo prevent parser differentials structurally, developers should align the parsing engine used for security checks with the engine used for request execution. Using the native WHATWG URL implementation for both validation and execution removes interpretation discrepancies. Furthermore, applications should resolve the hostname to an IP address programmatically and perform verification directly against the IP list before establishing a network socket.

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
EPSS Probability
0.38%
Top 71% most exploited

Affected Systems

fast-uri npm library

Affected Versions Detail

Product
Affected Versions
Fixed Version
fast-uri
fastify
2.4.52.4.6
fast-uri
fastify
3.1.63.1.7
fast-uri
fastify
4.1.34.1.4
AttributeDetail
CWE IDCWE-436
Attack VectorNetwork
CVSS Score7.5 (High)
EPSS Score0.0038
Exploit StatusProof of Concept (PoC) available
KEV StatusNot listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1562Impair Defenses
Defense Evasion
CWE-436
Interpretation Conflict

The product of two or more separate components fails to interpret input consistently, creating a security weakness.

Vulnerability Timeline

Initial fix commit pushed to development branch
2026-08-23
Security validation patches and backports completed
2026-09-02
Official releases of patched versions (2.4.6, 3.1.7, 4.1.4) published
2026-09-02
Security advisory GHSA-58mr-gqgx-xq4g published
2026-09-02
CVE-2026-84394 registered and published
2026-09-03

References & Sources

  • [1]GitHub Security Advisory GHSA-58mr-gqgx-xq4g
  • [2]OpenJS Foundation Advisory Portal
  • [3]NVD Vulnerability Details
  • [4]CVE Record on CVE.org

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

•29 minutes ago•CVE-2026-126072
5.9

CVE-2026-126072: Thread Deadlock and Denial of Service in Ruby on Rails ActionController::Live

CVE-2026-126072 (GHSA-rwvh-fw6r-pwvp) is a concurrency deadlock vulnerability in the Ruby on Rails Action Pack framework affecting applications that utilize ActionController::Live response streaming. The defect occurs due to improper synchronization within ActionController::Live::Buffer when handling full bounded queues during stream closure and connection abortion. An unauthenticated remote attacker can trigger this condition by stalling TCP socket reads on streaming endpoints—including Active Storage proxy mode—resulting in permanent worker thread exhaustion and application-wide denial of service.

Amit Schendel
Amit Schendel
2 views•10 min read
•about 1 hour ago•CVE-2026-126192
6.3

CVE-2026-126192: Quadratic Algorithmic Complexity Denial of Service in Soup Sieve CSS Selector Engine

CVE-2026-126192 is an algorithmic complexity vulnerability in Soup Sieve (soupsieve), the default CSS selector engine for Beautiful Soup 4 in Python. Evaluating a CSS selector that contains a general sibling combinator (~) nested inside a :has() relational pseudo-class against attacker-controlled HTML markup triggers O(n^2) quadratic evaluation complexity when the right-hand sibling target is absent. An unauthenticated attacker can supply small HTML documents containing thousands of sibling elements to exhaust CPU resources and stall application worker threads.

Alon Barad
Alon Barad
2 views•10 min read
•about 2 hours ago•CVE-2026-126190
7.5

CVE-2026-126190: Polynomial-Time Denial of Service in Soup Sieve CSS Descendant Combinator

CVE-2026-126190 (GHSA-mmhr-3c5m-f64f) is an inefficient algorithmic complexity vulnerability (CWE-407) in Soup Sieve, the default CSS selector library integrated into Beautiful Soup 4. In versions prior to 4.0, evaluating CSS selectors that contain descendant combinators (whitespace between compound selectors) executes an unmemoized upward traversal of the document tree. When evaluated against deeply nested HTML or XML documents, the time complexity scales polynomially at O(n^(k+1)), where n is the tree depth and k is the number of descendant combinators. Remote attackers can supply compact, deeply nested markup (1 KB to 4 KB) to trigger prolonged CPU starvation and denial of service in Python applications.

Amit Schendel
Amit Schendel
3 views•9 min read
•about 4 hours ago•CVE-2026-122006
9.8

CVE-2026-122006: Unauthenticated Arbitrary File Read and Write in Ruby on Rails Active Storage via ImageMagick

CVE-2026-122006 is a critical vulnerability in the Ruby on Rails Active Storage framework affecting versions prior to 8.0.5.2 and 8.1.4.1. When an application processes uploaded file attachments using the ImageMagick variant processor (:mini_magick), the framework invokes ImageMagick's metadata analyzer without applying a restrictive security policy. An unauthenticated attacker can upload a crafted file containing directives for unrestricted ImageMagick coders, such as Magick Scripting Language (MSL), resulting in arbitrary server-side file read and write operations. In deployments using the Disk storage service, attackers can exfiltrate sensitive application configuration files, including secret_key_base and master encryption keys, which enables remote code execution via signed payload forgery.

Alon Barad
Alon Barad
3 views•10 min read
•about 5 hours ago•CVE-2026-128065
6.9

CVE-2026-128065: Authorization Bypass via Unapplied RBAC Overrides in @grpc/grpc-js-xds

CVE-2026-128065 (also tracked as GHSA-gg5j-6742-v827) is an authorization bypass vulnerability affecting the @grpc/grpc-js-xds library in the Node.js gRPC ecosystem. In versions 1.14.0 and 1.14.1, XdsServer acknowledges Route and VirtualHost resources from an xDS control plane while failing to parse, store, or apply RBACPerRoute override configurations. When experimental RBAC is enabled and a broad top-level ALLOW policy is paired with restrictive VirtualHost or Route overrides, the server evaluates requests strictly against the top-level policy, permitting unauthorized RPC execution.

Alon Barad
Alon Barad
4 views•10 min read
•about 5 hours ago•CVE-2026-126188
3.7

CVE-2026-126188: Local Media Information Disclosure in Ruby on Rails Active Storage via FFmpeg Demuxer Selection

CVE-2026-126188 (GHSA-3f4q-8x5m-76v8) is an information disclosure vulnerability in the Active Storage component of Ruby on Rails prior to versions 8.0.5.2 and 8.1.4.1. When generating previews or extracting metadata from uploaded media files, Active Storage invokes the external command-line tools ffmpeg and ffprobe without specifying a format whitelist. An attacker who can upload a crafted HTTP Live Streaming (HLS) playlist while declaring a standard video or audio MIME type can cause FFmpeg to engage the HLS demuxer, resolve file:// segment URIs, and disclose visual frames or metadata from local media files readable by the Rails application process.

Amit Schendel
Amit Schendel
3 views•10 min read