Register for the AI for Security Summit: Join Figma, Perplexity & Wiz

CVE-2026-84375
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-84375 is a Denial of Service vulnerability in the js-yaml JavaScript YAML parser and dumper (by nodeca) caused by inefficient algorithmic complexity when processing YAML merge keys (<<) with empty mapping sources. Affected versions are >= 3.0.0, < 3.15.2 and >= 4.0.0, < 4.3.2; the issue is fixed in versions 3.15.2 and 4.3.2. The vulnerability was published on September 1, 2026, with the GitHub Security Advisory (GHSA-2883-xcg3-v3hh) published on September 8, 2026. It carries a CVSS v3.1 base score of 7.5 (High) (GitHub Advisory, Red Hat CVE).

Technical details

The root cause is an incomplete resource-consumption guard in lib/js-yaml/loader.js (v3.x) and lib/loader.js / src/parser/constructor.ts (v4.x), classified as CWE-400 (Uncontrolled Resource Consumption) and CWE-407 (Inefficient Algorithmic Complexity). The maxTotalMergeKeys counter, introduced to prevent a prior quadratic merge-key DoS (GHSA-g796-fgmg-93mv), only increments when a merge source contributes at least one key — empty mappings ({}) cost real iteration work but never increment the counter, so the guard never fires. An attacker can craft a YAML document that aliases a large sequence of N empty mappings (&arr) into K merge targets, causing O(N × K) processing while totalMergeKeys remains at zero. A PoC is publicly available in the GitHub advisory: a ~500 KB document with N=K=20,000 takes approximately 13 seconds to parse on a single core, and the attack scales quadratically (GitHub Advisory, PR #797).

Impact

Successful exploitation causes prolonged CPU exhaustion on any Node.js application that parses untrusted YAML using affected versions of js-yaml with merge processing enabled (which is the default for YAML 1.1 / YAML11_SCHEMA configurations). There is no confidentiality or integrity impact — the vulnerability is purely an availability (DoS) issue. Because js-yaml is an extremely widely used npm dependency, the blast radius extends to a large number of downstream applications and services that accept user-supplied YAML input (GitHub Advisory, Red Hat CVE).

Exploitability

No in-the-wild exploitation has been reported, and no exploit kits or threat actor attribution are associated with this vulnerability. A functional proof-of-concept payload is publicly documented in the GitHub Security Advisory, making the attack trivially reproducible. The NVD SSVC assessment marks the vulnerability as automatable (no user interaction required) with no known exploitation at time of publication. The EPSS score is approximately 0.385%, indicating a low but non-negligible probability of exploitation in the near term. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog (GitHub Advisory, Red Hat CVE).

Exploitation steps

  1. Identify a target: Find an application that accepts untrusted YAML input and parses it using js-yaml versions >= 3.0.0 < 3.15.2 or >= 4.0.0 < 4.3.2 with merge key support enabled (default for YAML 1.1 / YAML11_SCHEMA).
  2. Craft the malicious payload: Construct a YAML document that defines an anchor referencing a large sequence of N empty mappings, then references that anchor in K merge targets:
arr: &arr [{}, {}, {}, ...]  # N empty mappings
targets:
  - <<: *arr  # repeated K times
  1. Tune payload size: Adjust N and K to balance payload size against desired CPU consumption. For example, N=K=20,000 produces a ~500 KB document that takes ~13 seconds to parse on a single core; a ~1 MB document projects to minutes of CPU time.
  2. Submit the payload: Deliver the crafted YAML document to the target application via any input channel that triggers YAML parsing (e.g., API endpoint, file upload, configuration input).
  3. Achieve DoS: The parser enters O(N × K) processing while the maxTotalMergeKeys guard never fires, causing the server process to consume excessive CPU and become unresponsive or severely degraded (GitHub Advisory, PR #797).

Indicators of compromise

  • Application Logs: Requests containing YAML bodies with repeated <<: merge keys referencing anchored sequences of empty mappings ({}); unusually long YAML parse durations logged by application-level timing middleware.
  • Process/System: Node.js process(es) sustaining near-100% CPU utilization for extended periods (seconds to minutes) without corresponding high memory usage; CPU spikes correlated with incoming YAML-accepting API requests.
  • Network: Inbound HTTP requests with large YAML payloads (hundreds of KB) to endpoints that accept YAML input, particularly containing repeated anchor references (*arr) and merge key patterns (<<:).
  • Monitoring/Alerting: Elevated response latency or timeouts on YAML-parsing endpoints; event loop lag alerts in Node.js APM tools (e.g., New Relic, Datadog) coinciding with specific request patterns (GitHub Advisory).

Mitigation and workarounds

Upgrade js-yaml to the patched versions: 3.15.2 (for the v3.x line) or 4.3.2 (for the v4.x line). The fix modifies mergeMappings to charge one unit against maxTotalMergeKeys per merge source mapping regardless of whether it contributes any keys, and additionally hard-limits merge sequences to 100 elements. If an immediate upgrade is not possible, consider disabling YAML 1.1 merge key support by avoiding YAML11_SCHEMA or CORE_SCHEMA.withTags(mergeTag), or by rejecting/sanitizing YAML input containing <<: merge keys at the application layer before parsing (GitHub Advisory, Commit 3485bc0, Commit d90b661).

Community reactions

The fix was contributed via a community pull request (PR #797 by spokodev) and merged by maintainer puzrin on August 26, 2026; the maintainer noted a preference for future reports to go through the standard security disclosure channel rather than a public PR. The vulnerability attracted broad ecosystem attention, with hundreds of downstream projects (including Backstage, Lightdash, Vercel, Azure, and OpenAM) opening or merging dependency bump PRs within days of the advisory publication. Snyk added detection support via CLI v1.1307 shortly after disclosure (PR #797, GitHub Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

node-js-yaml

Affected

sid

node-js-yaml: 4.3.2+~4.0.9-1

Fixed

trixie

node-js-yaml

Affected

Ubuntu

Unknown

bionic (esm-apps)

node-js-yaml

Unknown

devel

node-js-yaml

Unknown

focal (esm-apps)

node-js-yaml

Unknown

jammy

node-js-yaml

Unknown

jammy (esm-apps)

node-js-yaml

Unknown

noble

node-js-yaml

Unknown

noble (esm-apps)

node-js-yaml

Unknown

resolute

node-js-yaml

Unknown

RHEL / CentOS

Affected

OpenShift

openshift4/ose-console

Affected

RHEL 8

389-ds:1.4/389-ds-base.src

Affected

RHEL 9

grafana-pcp.src

Affected

RHEL 10

ceph.src

Affected

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-61560CRITICAL9.8
  • JavaScript logoJavaScript
  • @zereight/mcp-gitlab
NoYesSep 15, 2026
CVE-2026-61568CRITICAL9.6
  • JavaScript logoJavaScript
  • @zereight/mcp-gitlab
NoYesSep 15, 2026
CVE-2026-61559CRITICAL9.6
  • JavaScript logoJavaScript
  • @zereight/mcp-gitlab
NoYesSep 15, 2026
CVE-2026-63671HIGH8.1
  • JavaScript logoJavaScript
  • @nuxtjs/mdc
NoYesSep 16, 2026
CVE-2026-68904HIGH7
  • JavaScript logoJavaScript
  • node-opcua-transport
NoYesSep 16, 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