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

CVE-2026-14643: Shared Cache Pollution and Information Disclosure via Whitespace Parsing Discrepancies in Undici

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 4, 2026·6 min read·1 visit

Executive Summary (TL;DR)

An interpretation conflict in undici's cache parser fails to strip whitespace from Cache-Control directives, leading to unauthorized sharing of private cached data.

An interpretation conflict (CWE-436) in the cache interceptor of the undici HTTP client for Node.js causes whitespace-padded Cache-Control directives to be parsed incorrectly, leading to shared cache pollution and the unauthorized disclosure of sensitive, private, or authenticated user information (CWE-524).

Vulnerability Overview

CVE-2026-14643 identifies an interpretation conflict (CWE-436) within the Cache Interceptor component of undici, the default HTTP client for Node.js. This defect specifically impacts deployments where the Cache Interceptor is configured to operate in shared-cache mode (shared: true). When parsing HTTP response headers, the engine fails to adequately normalize whitespace in specific Cache-Control directives.\n\nThe primary risk associated with this vulnerability is the unintentional caching and subsequent reuse of HTTP responses containing sensitive, authenticated information (CWE-524). An attacker can leverage this parsing discrepancy to intercept private data destined for other authenticated users. The vulnerability occurs without direct user interaction and can be executed remotely over the network, though it requires specific caching configurations to be active.\n\nThis vulnerability represents a regression or an incomplete fix from a previous security advisory, CVE-2026-9678. The earlier fix omitted validation logic for optional whitespace (OWS) located around the equality sign or inside quoted arguments of qualified no-cache and private cache directives.

Root Cause Analysis

The root cause of CVE-2026-14643 lies in lib/util/cache.js inside the parseCacheControlHeader function of the undici library. This function is responsible for interpreting directives such as private="authorization" or no-cache="authorization". According to RFC 9111, if an upstream server marks specific headers as private or no-cache, a shared cache must not store or serve those portions of the response to other clients.\n\nWhen the upstream server responds with optional whitespace around the equals sign or inside the quoted parameters, the parser's logic breaks. For example, if the upstream server returns Cache-Control: private=" authorization", the parser processes the value verbatim. Because it fails to sanitize or trim leading and trailing whitespaces, it stores the field restriction as " authorization" instead of "authorization".\n\nDuring subsequent request matching, the cache engine performs a strict equality lookup between the client's request headers and the stored restricted headers array. Because " authorization" containing whitespace does not match "authorization", the comparison evaluates to false. The cache interceptor then erroneously concludes that no private or restricted headers are present in the cached entry, allowing the cached response to be served to unauthenticated users.

Code Analysis

To understand the exact failure mechanism, we examine the difference in lib/util/cache.js before and after the applied patch. In the vulnerable version, the array of extracted headers was populated directly from the parsed token values without trimming whitespace characters.\n\nBelow is the comparison of the parser logic, highlighting how the patch normalizes the headers using JavaScript's .trim() method:\n\njavascript\n// Vulnerable logic\nif (key in output) {\n output[key] = output[key].concat(headers)\n} else {\n output[key] = headers\n}\n\n// Patched logic\nfor (let j = 0; j < headers.length; j++) {\n headers[j] = headers[j].trim()\n}\nif (key in output) {\n output[key] = output[key].concat(headers)\n} else {\n output[key] = headers\n}\n\n\nAdditionally, the patch addresses single-value scenarios, such as no-cache="some-header". Instead of pushing the raw string directly into the output array, it now binds the trimmed value to a new constant fieldName before storage:\n\njavascript\n// Patched single-value handling\nconst fieldName = value.trim()\nif (key in output) {\n output[key] = output[key].concat(fieldName)\n} else {\n output[key] = [fieldName]\n}\n\n\nThis corrective action eliminates any whitespace-padded headers from the final restricted list. It ensures that standard matching routines (such as Array.prototype.includes) perform accurately against sanitized request keys during cache evaluation.

Exploitation Methodology

To successfully exploit this vulnerability, an attacker must target an application utilizing an affected version of undici with the Cache Interceptor running in shared-cache mode. The upstream server must also return a Cache-Control header that includes whitespace-padded qualified directives. An example of such a header is Cache-Control: public, max-age=120, private=" authorization".\n\nBelow is a sequence diagram illustrating the flow of the exploitation technique:\n\nmermaid\ngraph LR\n Victim["Victim (Authenticated)"] -->|1. GET /profile with Auth Header| Proxy["Undici Shared Cache Client"]\n Proxy -->|2. Forward Request| Origin["Upstream Server (Origin)"]\n Origin -->|3. Response with private=' authorization'| Proxy\n Proxy -->|4. Parse failure: Stores cache as public| Cache[("Shared Cache Storage")]\n Attacker["Attacker (Unauthenticated)"] -->|5. GET /profile| Proxy\n Proxy -->|6. Checks Cache: Match Fails due to ' authorization' whitespace mismatch| Cache\n Proxy <--|7. Serves Cached Authenticated Response| Attacker\n\n\nFirst, an authenticated user (the victim) initiates a request to the application containing their authentication credentials. The upstream server returns the restricted content accompanied by the malformed Cache-Control header. Due to the parsing flaw, undici saves the response in the shared cache, ignoring the directive that restricts caching of the Authorization header's content.\n\nSecond, the attacker sends an unauthenticated request for the same endpoint. The proxy retrieves the cached response belonging to the victim. Because the security check fails to identify the cached response as private, the server returns the sensitive, authenticated data directly to the unauthenticated attacker.

Impact Assessment

The CVSS v3.1 score for CVE-2026-14643 is assessed at 5.9 (Medium Severity). The vulnerability has a high confidentiality impact because it allows unauthorized third parties to retrieve session tokens, personal details, or sensitive transaction records. It does not directly compromise system integrity or service availability, leading to a score of none for those metrics.\n\nThe attack complexity is rated as high. This classification reflects the multiple operational prerequisites needed to trigger the flaw, including the active shared cache configuration, exact request path overlap, and specific whitespace patterns generated by the upstream service. However, because no prior privileges or user interaction are required, the entry point for exploitation remains accessible to any network-based actor.\n\nEPSS data indicates a low overall probability of exploit automation in the wild, sitting at approximately 0.23%. This rating is consistent with the lack of active exploitation reports in CISA's Known Exploited Vulnerabilities (KEV) catalog. Nonetheless, in environments where Node.js microservices act as reverse proxies or API gateways using undici, the risk of silent data leakage remains a significant concern.

Mitigation & Remediation

The primary remediation path is upgrading the undici dependency within the application. For deployments relying on the 7.x release train, the package must be updated to version 7.29.0 or higher. For deployments using the 8.x branch, the dependency must be updated to version 8.9.0 or higher.\n\nIf an immediate dependency upgrade is impossible due to breaking changes or legacy constraints, several temporary workarounds can mitigate the risk. Network administrators can configure reverse proxies or application delivery controllers (such as Nginx, Cloudflare, or AWS CloudFront) to strip or sanitize whitespace inside Cache-Control headers before they reach the Node.js application. This prevents the parser from encountering malformed inputs.\n\nAdditionally, developers can temporarily disable the Cache Interceptor or reconfigure it to run in private caching mode. This modification prevents the storage of shared cache records entirely, neutralizing the vector of cross-user information disclosure at the cost of increased upstream traffic.

Official Patches

Node.js / UndiciMain branch fix commit
Node.js / UndiciCherry-pick patch commit

Fix Analysis (2)

Technical Appendix

CVSS Score
5.9/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
EPSS Probability
0.23%
Top 86% most exploited
12,000
via Shodan

Affected Systems

Applications utilizing Node.js undici client with Cache Interceptor enabled in shared mode

Affected Versions Detail

Product
Affected Versions
Fixed Version
undici
Node.js / OpenJS Foundation
>= 7.0.0 < 7.29.07.29.0
undici
Node.js / OpenJS Foundation
>= 8.0.0 < 8.9.08.9.0
AttributeDetail
CWE IDCWE-436 / CWE-524
Attack VectorNetwork (AV:N)
CVSS v3.1 Score5.9 (Medium)
EPSS Score0.00229
ImpactConfidentiality (High)
Exploit StatusProof-of-Concept (PoC)
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1119Automated Collection
Collection
T1539Steal Web Session Cookie
Credential Access
CWE-436
Interpretation Conflict

The product does not properly neutralize whitespace differences when comparing structured elements, leading to interpretation discrepancies.

Known Exploits & Detection

Unit Test in Commit 85a240551c9feb8b8a0ecc56c84b2b3015add8a9Unit tests validating correct behavior of whitespace trimmed fields inside the Cache-Control parsing utility

Vulnerability Timeline

Security fix developed and committed to the main branch
2026-06-11
CVE-2026-14643 published in the CVE registry
2026-07-29
GHSA-jr45-8vmc-qm54 public advisory released by Node.js/Undici maintainers
2026-07-29
National Vulnerability Database (NVD) entry updated and CVSS score established
2026-07-30

References & Sources

  • [1]NVD Vulnerability Details
  • [2]GitHub Security Advisory GHSA-jr45-8vmc-qm54
  • [3]OpenJSF Security Advisories
  • [4]CVE-2026-14643 on CVE.org
Related Vulnerabilities
CVE-2026-9678

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

•25 minutes ago•CVE-2026-16729
4.8

CVE-2026-16729: Cookie Attribute Injection in Undici via Unsanitized Domain and Unparsed Fields

CVE-2026-16729 (GHSA-v3r7-h72x-cjcm) is a medium-severity cookie attribute injection vulnerability in Undici's web-compliant cookie utility module. Due to insufficient validation of domain parameters and raw attributes in the unparsed options array, arbitrary attributes like SameSite, HttpOnly, and Secure can be injected. This allows attackers to bypass CSRF protections, strip security flags, or override intended cookie behaviors when applications pass user-controlled values to these properties.

Amit Schendel
Amit Schendel
0 views•7 min read
•about 2 hours ago•CVE-2026-15157
4.2

CVE-2026-15157: CRLF Injection in undici HTTP/1.1 Dispatcher

CVE-2026-15157 details an improper neutralization of CRLF sequences ('CRLF Injection') within undici, a widely used Node.js HTTP/1.1 client. The vulnerability is triggered when processing request bodies that exhibit a duck-typed blob-like interface. When an application accepts untrusted data and assigns it to the .type property of such an object without setting an explicit Content-Type on the request, undici appends the value directly to the outgoing headers array without validating it against control characters. This allows remote attackers to inject carriage return and line feed sequences, culminating in arbitrary header injection, HTTP response splitting, or HTTP request smuggling.

Alon Barad
Alon Barad
3 views•6 min read
•about 3 hours ago•CVE-2026-54272
6.9

CVE-2026-54272: SSRF and Trust-Boundary Bypass via Input Misclassification in ip-address Library

A trust-boundary bypass and Server-Side Request Forgery (SSRF) vulnerability exists in the ip-address library versions 10.1.1 through 10.2.0 due to structural input misclassification. The library fails to resolve and normalize transition IP notations, such as IPv4-mapped IPv6 (::ffff:0:0/96) and NAT64 (64:ff9b::/96) addresses, to their embedded IPv4 representations prior to evaluation. Consequently, standard security validation checks (e.g., isLoopback, isLinkLocal, isULA) return false for these addresses. This allows remote attackers to bypass application-level IP address filters, gaining unauthorized access to internal resources, cloud metadata interfaces, and local services on dual-stack hosts or environments utilizing NAT64 gateways.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 4 hours ago•CVE-2026-18574
9.3

CVE-2026-18574: Authentication Bypass via Alternate Path in Check Point Security Management Server

A critical authentication bypass vulnerability (CVE-2026-18574) in Check Point Security Management and Multi-Domain Security Management (MDS) Servers allows unauthenticated remote attackers to execute arbitrary system commands with administrative privileges. The flaw stems from an alternate path authentication bypass (CWE-288) in the management interface daemons.

Amit Schendel
Amit Schendel
8 views•6 min read
•about 4 hours ago•CVE-2026-69198
6.9

CVE-2026-69198: Server-Side Request Forgery Bypass via CIDR Suffix in ip-address Library

An input validation vulnerability in the npm package `ip-address` allows unauthenticated remote attackers to bypass Server-Side Request Forgery (SSRF) protections by appending a `/0` CIDR suffix to IP address strings. This causes the library's classification helper functions to incorrectly identify internal addresses as public, external addresses, while normalization helpers resolve the address back to its internal form during network connection establishment.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 5 hours ago•GHSA-3F7W-8RR8-F37F
8.1

GHSA-3f7w-8rr8-f37f: Arbitrary File Overwrite and Read via Unguarded Argument Forwarding in GitPython

An argument injection vulnerability in GitPython allows remote or local attackers to execute arbitrary file reads or arbitrary file overwrites via unsafe command option forwarding. This occurs because the wrapper methods `IndexFile.checkout()` and `TagReference.create()` fail to validate parameters before passing them to system-level git invocations.

Alon Barad
Alon Barad
5 views•5 min read