AI for Security Summit: Join Figma, Perplexity & Wiz. [Register]

CVE-2026-69153
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-69153 is a path traversal and information disclosure vulnerability in PostCSS, a widely used Node.js CSS transformation library. It represents an incomplete fix of a prior advisory (GHSA-6g55-p6wh-862q): the security guard added in PreviousMap.loadFile() to reject directory-traversal and absolute-path sourceMappingURL values only activates when the from option is set, leaving applications that omit from fully exposed. All PostCSS versions up to and including 8.5.22 are affected; the issue is fixed in version 8.5.23. The vulnerability was published on August 3, 2026, with a CVSS v3.1 score of 5.3 (Medium) and a CVSS v4.0 score of 6.3 (Medium) (Github Advisory, Red Hat Bugzilla).

Technical details

The root cause is classified as CWE-22 (Path Traversal) and CWE-200 (Exposure of Sensitive Information). In lib/previous-map.js, the loadFile() method checks for .. traversal and absolute paths only inside an if (cssFile) { ... } block, which is only entered when the from option is provided to PostCSS. When from is omitted, cssFile is undefined (falsy), the guard is skipped, and an attacker-controlled /*# sourceMappingURL=/abs/path/x.map */ comment in CSS causes readFileSync to read an arbitrary .map file from the filesystem. The loaded file's sources (filesystem paths) and sourcesContent (file contents) are then embedded in the generated source map and exposed to the application. Exploitation requires that the attacker can supply CSS input to a PostCSS instance invoked without the from option — a common pattern in online CSS playgrounds, minification services, and string-input build steps. A proof-of-concept JavaScript script is publicly available in the GitHub Security Advisory (Github Advisory, Patch Commit).

Impact

Successful exploitation allows an unauthenticated network attacker to read arbitrary .map files accessible to the PostCSS process, disclosing their sources (local filesystem paths) and sourcesContent (actual source code or other file contents) through the generated source map. This is a confidentiality-only impact — integrity and availability are not affected. The most at-risk deployments are services that process attacker-supplied CSS strings without the from option and expose result.map to users, such as online CSS tools, linting APIs, and CI/CD pipelines that handle untrusted input (Github Advisory).

Exploitability

A proof-of-concept JavaScript exploit is publicly available in the GitHub Security Advisory, verified against PostCSS 8.5.22. The PoC demonstrates reading an out-of-tree .map file via an absolute sourceMappingURL when from is unset. The EPSS score is approximately 0.31–0.36%, indicating a low but non-negligible probability of exploitation in the wild. There is no evidence of active in-the-wild exploitation or threat actor attribution at this time, and the vulnerability is not listed in the CISA KEV catalog. NVD's SSVC assessment classifies exploitation as "poc" and automation as "no" (Github Advisory).

Exploitation steps

  1. Identify a target: Find a web service or application that processes attacker-supplied CSS using PostCSS without the from option and returns or exposes result.map output (e.g., an online CSS minifier, playground, or linting API).
  2. Craft malicious CSS: Prepare a CSS payload containing a sourceMappingURL comment pointing to a target .map file via an absolute path or directory traversal, e.g.:
    a{color:red}
    /*# sourceMappingURL=/etc/app/secrets.map */
    or using traversal:
    a{color:red}
    /*# sourceMappingURL=../../sensitive/data.map */
  3. Submit the CSS: Send the crafted CSS to the target service for processing. Because from is unset, cssFile is undefined, and the path traversal guard in PreviousMap.loadFile() is bypassed.
  4. Retrieve disclosed data: Examine the returned result.map object. If the target file exists and is valid JSON, its sources (filesystem paths) and sourcesContent (file contents) will appear in the generated source map, disclosing sensitive data to the attacker (Github Advisory).

Indicators of compromise

  • Network: Unusual or repeated CSS processing requests to public-facing APIs containing sourceMappingURL comments with absolute paths (e.g., /etc/, /var/, /home/) or ../ sequences in the CSS body.
  • Logs: Application or web server logs showing CSS input bodies containing /*# sourceMappingURL= followed by absolute or traversal paths; responses containing unexpected sources or sourcesContent fields in JSON output.
  • File System: Evidence of PostCSS reading .map files outside the expected project directory, detectable via file access auditing (e.g., auditd on Linux) for readFileSync calls on unexpected paths.
  • Process: Node.js process accessing .map files in sensitive directories (e.g., /etc/, /tmp/, parent directories of the working directory) without a corresponding from CSS file path.

Mitigation and workarounds

Upgrade PostCSS to version 8.5.23 or later, which applies the traversal/absolute-path rejection unconditionally in loadFile(), regardless of whether cssFile is set (Github Advisory, Patch Commit). As an immediate workaround prior to patching, always pass the from option when invoking PostCSS (e.g., postcss([]).process(css, { from: '/path/to/input.css' })), which activates the existing path traversal guard. Additionally, consider disabling source map processing entirely for untrusted CSS input by passing { map: false } in the options.

Community reactions

Red Hat has tracked this vulnerability in their Bugzilla system (Bug 2510719) with high priority and severity, and has issued multiple errata (RHSA-2026:50079, RHSA-2026:50826, RHSA-2026:54435) addressing the issue in their products (Red Hat Bugzilla). The vulnerability was reported by security researcher anir0y and published via the GitHub Security Advisory program. The issue is notable as an incomplete fix scenario — the prior advisory GHSA-6g55-p6wh-862q introduced a guard that was bypassed under a common invocation pattern, highlighting the risk of conditional security controls (Github Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

node-postcss

Affected

sid

node-postcss: 8.5.23+~cs10.2.23-1

Fixed

trixie

node-postcss

Affected

RHEL / CentOS

Fixed

OpenShift

el9:openshift4/ose-console-rhel9-0:v4.19.0

Fixed

RHEL 8

Not Affected

RHEL 9

goose.src

Affected

RHEL 10

rh-podman-desktop-0:1.1.2-1.el10_2.src

Fixed

SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-61568CRITICAL9.6
  • JavaScript logoJavaScript
  • @zereight/mcp-gitlab
NoYesSep 15, 2026
CVE-2026-61559CRITICAL9.6
  • JavaScript logoJavaScript
  • @zereight/mcp-gitlab
NoYesSep 15, 2026
GHSA-5648-rgj9-v224HIGH8.1
  • JavaScript logoJavaScript
  • @zereight/mcp-gitlab
NoYesSep 15, 2026
CVE-2026-58483HIGH7.5
  • JavaScript logoJavaScript
  • mcp-searxng
NoYesSep 15, 2026
CVE-2026-58485HIGH7.1
  • JavaScript logoJavaScript
  • mcp-searxng
NoYesSep 15, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management