High

js-yaml: Exponential parsing time in flow collections leads to denial of service

  • Disclosed: 24.07.2026
  • Updated: 11.10.2026 10:22

Summary

Parsing a small YAML document can take exponential time. An application that calls load() or loadAll() on untrusted input can be hung by a payload under 200 bytes.

Details

When an entry in a flow sequence turns out to be a key: value pair, the parser rewinds and parses that entry a second time as the key. If the key is itself a nested flow sequence of the same shape, every level is parsed twice, so the total work is O(2^n) in the nesting depth. The default maxDepth of 100 does not help, because the time is already unmanageable at about 30 to 40 levels.

Root cause, potentially the: readFlowCollection in parser.ts, the restoreState followed by a second parseNode further down.

PoC

js
const yaml = require('js-yaml')
const n = 30
yaml.load('[ '.repeat(n) + '1' + ' ]: 0'.repeat(n))

With default options: 22 levels takes about 1 second, 26 levels about 17 seconds, 30 levels over 2 minutes. The input stays under 200 bytes and grows linearly with n.

Impact

Denial of service. A single small request can keep one CPU busy for minutes or longer and blocks the Node event loop, so one request can stall the whole process. No anchors, aliases, merges, tags, or non default options are required, and it reproduces on the default schema.

Affected software

Click a technology to see all vulnerabilities affecting it.

PlatformPackageVulnerable versionsFixed in
npm package js-yaml >= 5.0.0, < 5.2.2 5.2.2

References

CVSS score 7.5/10
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness (CWE)
CWE-407
Platform
npm
Package
js-yaml
Disclosed
24.07.2026
Updated
11.10.2026 10:22

Sources and licenses

OSV / GitHub Advisory Database - GHSA-pm4m-ph32-ghv5 - CC BY 4.0

Vulnerability history: js-yaml

All published vulnerabilities of this package (npm package), newest first. Shows whether this is a one-off slip or a package that needs watching.

All (12) in the archive
Total entries
12
First → latest
10.2017 09.2026
Without a fix
0
Exploited in attacks
0

Severity breakdown

  • Critical 1
  • High 5
  • Medium 6

Disclosures per year

  1. 2017: 1
  2. 2018: 0
  3. 2019: 2
  4. 2020: 0
  5. 2021: 0
  6. 2022: 0
  7. 2023: 0
  8. 2024: 0
  9. 2025: 1
  10. 2026: 8
Severity:
  1. High · 7.5 CVE-2026-84375 >= 4.0.0, < 4.3.2, >= 3.0.0, < 3.15.2 4.3.2, 3.15.2
  2. High · 7.5 ghsa-5p4m-2wfm-xmqj >= 4.0.0, < 4.3.1, >= 3.0.0, < 3.15.1 4.3.1, 3.15.1
  3. js-yaml: Exponential parsing time in flow collections leads to denial of service this entry
    High · 7.5 CVE-2026-73643 >= 5.0.0, < 5.2.2 5.2.2
  4. High · 7.5 CVE-2026-59869 >= 3.0.0, < 3.15.0, >= 4.0.0, < 4.3.0 3.15.0, 4.3.0
  5. High ghsa-8j8c-7jfh-h6hx < 3.13.1 3.13.1
  6. Critical CVE-2013-4660 < 2.0.5 2.0.5

Know which vulnerabilities affect your application

With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.

Connect your application
DockRay newsletter

Application security in your inbox

Important vulnerabilities, actionable guidance and practical advice for your applications. Choose your technologies and follow what matters to your project.

  • A daily digest of new vulnerabilities, critical ones included.
  • Notifications about important updates.
  • Practical advice on application security and monitoring.

Leave empty to receive updates for every technology.

Free to subscribe. Unsubscribe with one click in any email.