<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Brace-Expansion (&gt;= 2.0.0 &lt; 2.1.2) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/brace-expansion--2.0.0--2.1.2/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Mon, 20 Jul 2026 20:53:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/brace-expansion--2.0.0--2.1.2/feed.xml" rel="self" type="application/rss+xml"/><item><title>CVE-2026-13149: brace-expansion Denial of Service Vulnerability</title><link>https://feed.craftedsignal.io/briefs/2026-07-brace-expansion-dos/</link><pubDate>Mon, 20 Jul 2026 20:53:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-brace-expansion-dos/</guid><description>A Denial of Service vulnerability, tracked as CVE-2026-13149, exists in the `brace-expansion` JavaScript library (versions &lt; 1.1.16, &gt;= 2.0.0 &lt; 2.1.2, and &gt;= 3.0.0 &lt; 5.0.7) that allows an attacker to cause exponential time complexity in the `expand()` function via crafted input, leading to a CPU hang and denial of service in Node.js applications.</description><content:encoded><![CDATA[<p>A high-severity Denial of Service (DoS) vulnerability, identified as CVE-2026-13149, has been discovered in the <code>brace-expansion</code> JavaScript library, affecting versions prior to 1.1.16, versions from 2.0.0 up to but not including 2.1.2, and versions from 3.0.0 up to but not including 5.0.7. This flaw stems from an exponential-time complexity issue (O(2ⁿ)) within the <code>expand()</code> function when processing strings containing consecutive non-expanding brace groups, such as <code>a{},{},{},{}...</code>. An attacker can exploit this by providing a short, specially crafted ASCII input (e.g., ~90 bytes with 30 non-expanding groups), causing the application's CPU to hang for several minutes or even indefinitely. Since Node.js applications often rely on a single-threaded event loop, successful exploitation can lead to a complete denial of service for the affected worker or process, disrupting application availability.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker crafts a malicious input string containing a series of consecutive non-expanding brace groups (e.g., <code>a{},{},{},{}...</code>).</li>
<li>This crafted string is delivered to a vulnerable application that utilizes the <code>brace-expansion</code> library (versions &lt; 1.1.16, &gt;= 2.0.0 &lt; 2.1.2, or &gt;= 3.0.0 &lt; 5.0.7) to process user-controlled input.</li>
<li>The vulnerable application calls the <code>brace-expansion.expand()</code> function, passing the attacker-controlled string as an argument.</li>
<li>Within the <code>expand_</code> internal function of <code>brace-expansion</code>, the <code>post</code> variable is unconditionally computed recursively for each non-expanding group, even when it's not immediately used.</li>
<li>This recursive pattern, combined with a rewrite branch, results in an exponential increase in processing time (O(2ⁿ)) as the number of consecutive non-expanding groups in the input string grows.</li>
<li>For relatively small inputs (e.g., 30 non-expanding groups, approximately 90 bytes), the vulnerable process experiences extreme CPU utilization and a prolonged hang (minutes to indefinite).</li>
<li>In single-threaded environments, such as Node.js, this CPU hang leads to the entire application process becoming unresponsive, effectively causing a denial of service.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Any application that directly or indirectly passes attacker-influenced strings to <code>brace-expansion.expand()</code> is susceptible to a denial of service. The vulnerability primarily impacts Node.js applications, which are single-threaded, allowing a small, maliciously crafted input (e.g., ~90 bytes) to cause a multi-minute or indefinite CPU hang. This effectively stalls the entire worker or process, preventing it from handling legitimate requests and rendering the service unavailable. For example, a 30-group input can block a thread for minutes, while a slightly longer input can cause an indefinite hang.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade the <code>brace-expansion</code> library to a patched version (&gt;= 5.0.7) immediately to remediate CVE-2026-13149.</li>
<li>If immediate upgrade is not possible, ensure that untrusted input is not passed directly to <code>brace-expansion.expand()</code> or functions that transitively use it (e.g., <code>minimatch</code>/<code>glob</code> brace patterns).</li>
<li>Implement timeouts or run <code>brace-expansion</code> operations within separate worker threads/processes to isolate the impact of potential CPU hangs.</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>denial-of-service</category><category>javascript</category><category>npm</category><category>node.js</category></item></channel></rss>