<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 01 Oct 2026 19:42:50 +0000</lastBuildDate>
    <item>
      <title>GHSA-48c2-rrv3-qjmp — yaml is vulnerable to Stack Overflow via deeply nested YAML collections</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-48c2-rrv3-qjmp</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: yaml&lt;/p&gt;
&lt;p&gt;Parsing a YAML document with `yaml` may throw a RangeError due to a stack overflow.&lt;/p&gt;
&lt;p&gt;The node resolution/composition phase uses recursive function calls without a depth bound. An attacker who can supply YAML for parsing can trigger a `RangeError: Maximum call stack size exceeded` with a small payload (~2–10 KB). The `RangeError` is not a `YAMLParseError`, so applications that only catch YAML-specific errors will encounter an unexpected exception type. Depending on the host application&amp;#39;s exception handling, this can fail requests or terminate the Node.js process.&lt;/p&gt;
&lt;p&gt;Flow sequences allow deep nesting with minimal bytes (2 bytes per level: one `[` and one `]`). On the default Node.js stack, approximately 1,000–5,000 levels of nesting (2–10 KB input) exhaust the call stack. The exact threshold is environment-dependent (Node.js version, stack size, call stack depth at invocation).&lt;/p&gt;
&lt;p&gt;Note: the library&amp;#39;s `Parser` (CST phase) uses a stack-based iterative approach and is not affected. Only the compose/resolve phase uses actual call-stack recursion.&lt;/p&gt;
&lt;p&gt;All three public parsing APIs are affected: `YAML.parse()`, `YAML.parseDocument()`, and `YAML.parseAllDocuments()`.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;```javascript
const YAML = require(&amp;#39;yaml&amp;#39;);&lt;/p&gt;
&lt;p&gt;// ~10 KB payload: 5000 levels of nested flow sequences
const payload = &amp;#39;[&amp;#39;.repeat(5000) + &amp;#39;1&amp;#39; + &amp;#39;]&amp;#39;.repeat(5000);&lt;/p&gt;
&lt;p&gt;try {
  YAML.parse(payload);
} catch (e) {
  console.log(e.constructor.name); // RangeError (NOT YAMLParseError)
  console.log(e.message);          // Maximum…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: yaml&lt;/p&gt;
&lt;p&gt;Parsing a YAML document with `yaml` may throw a RangeError due to a stack overflow.&lt;/p&gt;
&lt;p&gt;The node resolution/composition phase uses recursive function calls without a depth bound. An attacker who can supply YAML for parsing can trigger a `RangeError: Maximum call stack size exceeded` with a small payload (~2–10 KB). The `RangeError` is not a `YAMLParseError`, so applications that only catch YAML-specific errors will encounter an unexpected exception type. Depending on the host application&amp;#39;s exception handling, this can fail requests or terminate the Node.js process.&lt;/p&gt;
&lt;p&gt;Flow sequences allow deep nesting with minimal bytes (2 bytes per level: one `[` and one `]`). On the default Node.js stack, approximately 1,000–5,000 levels of nesting (2–10 KB input) exhaust the call stack. The exact threshold is environment-dependent (Node.js version, stack size, call stack depth at invocation).&lt;/p&gt;
&lt;p&gt;Note: the library&amp;#39;s `Parser` (CST phase) uses a stack-based iterative approach and is not affected. Only the compose/resolve phase uses actual call-stack recursion.&lt;/p&gt;
&lt;p&gt;All three public parsing APIs are affected: `YAML.parse()`, `YAML.parseDocument()`, and `YAML.parseAllDocuments()`.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;```javascript
const YAML = require(&amp;#39;yaml&amp;#39;);&lt;/p&gt;
&lt;p&gt;// ~10 KB payload: 5000 levels of nested flow sequences
const payload = &amp;#39;[&amp;#39;.repeat(5000) + &amp;#39;1&amp;#39; + &amp;#39;]&amp;#39;.repeat(5000);&lt;/p&gt;
&lt;p&gt;try {
  YAML.parse(payload);
} catch (e) {
  console.log(e.constructor.name); // RangeError (NOT YAMLParseError)
  console.log(e.message);          // Maximum…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-48c2-rrv3-qjmp</guid>
    </item>
  </channel>
</rss>
