chore(deps): update dependency brace-expansion@<2.1.4 to v5 [security] - #1243
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
Contributor
Author
|
renovate
Bot
force-pushed
the
renovate/npm-brace-expansion-2.1.4-vulnerability
branch
from
October 1, 2026 19:12
9b19f80 to
045f2c7
Compare
renovate
Bot
force-pushed
the
renovate/npm-brace-expansion-2.1.4-vulnerability
branch
from
October 1, 2026 21:36
045f2c7 to
d39a0b6
Compare
renovate
Bot
force-pushed
the
renovate/npm-brace-expansion-2.1.4-vulnerability
branch
from
October 5, 2026 09:09
d39a0b6 to
3cfad53
Compare
renovate
Bot
force-pushed
the
renovate/npm-brace-expansion-2.1.4-vulnerability
branch
from
October 5, 2026 20:30
3cfad53 to
97baa3b
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^2.1.4→^5.0.12Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
brace-expansion: Quadratic-time expansion of the
{a},b}rewrite causes CPU denial of serviceCVE-2026-102277 / GHSA-q2hr-2g5m-vwhr
More information
Details
Summary
Expanding
{a},b}-shaped input takes time quadratic in the number of literal}characters, blocking the event loop.Bash preserves a quirk where a brace group followed by a comma set still expands (
{a},b}). The parser implements this by rewriting the string and restarting the scan. Each pass absorbs exactly one}and re-scans from the beginning, sontrailing braces costnfull passes.Reproduction
ms/n^2is flat at ~1.7 and each doubling ofncosts exactly 4.0x - quadratic. 128 KB of input blocks the event loop for nearly half a minute to produce two results.Mechanism
Instrumenting the rewrite branch confirms it runs exactly
n + 1times, once per literal}, each re-scanning the whole string.There is a second multiplier. The rewrite replaces the group's closing
}with the internalescClosesentinel, which is'\0CLOSE' + Math.random() + '\0'- about 25 characters. The working string therefore grows by ~25 characters on every pass:So the input is inflated roughly 26x, and that factor multiplies both the quadratic constant and peak memory. This makes it partly a memory-pressure issue as well as a CPU one.
Why
maxandmaxLengthdo not helpThe cost is in parsing, before the result set exists. The payload yields 2 results regardless of size, so neither bound is ever reached.
Impact
An application passing an untrusted pattern to
expand(), directly or throughminimatch/glob, can have its event loop blocked for tens of seconds by a payload well under minimatch's 65,536-character cap. For a single-threaded Node server that is a full stall, not just a slow request.Degraded availability rather than a crash - the process recovers once the expansion completes.
Affected versions
Verified affected on 1.1.18, 2.1.4, 3.0.6 and 5.0.9, all within a few percent of each other (~460-490 ms at n=16,000).
Patch
The rewrite loop gets an iteration bound. Past the cap the remaining string is treated as non-expanding and returned literally, consistent with the existing
max/maxLengthcaps, which truncate rather than throw.Note this bounds the number of passes, not the cost of each: worst-case work remains proportional to
cap x input length. The cap is set low enough that the residual is bounded in practice, and far above what any realistic{a},b}input needs.Severity note
Scored 5.3 Medium (
A:L) for consistency with GHSA-3jxr-9vmj-r5cp, the other algorithmic-complexity advisory on this package (CWE-407), which uses the same vector. The stack-exhaustion advisories on this package scoreA:Hbecause they crash the process outright; this one stalls it.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
juliangruber/brace-expansion (brace-expansion@<2.1.4)
v5.0.12Compare Source
v5.0.11Compare Source
v5.0.10Compare Source
v5.0.9Compare Source
v5.0.8Compare Source
v5.0.7Compare Source
v5.0.6Compare Source
v5.0.5Compare Source
v5.0.4Compare Source
v5.0.3Compare Source
v5.0.2Compare Source
v4.0.1Compare Source
5a5cc170b6a978v4.0.0Compare Source
278132bdd72a59tea.yaml70e4c1bAs a precaution to not risk breaking anything with
278132b, this is a new semver major releasev3.0.9Compare Source
v3.0.8Compare Source
v3.0.7Compare Source
v3.0.6Compare Source
v3.0.5Compare Source
v3.0.4Compare Source
v3.0.3Compare Source
v3.0.2Compare Source
v3.0.1Compare Source
3059c078229e6f15f9b3cv3.0.0Compare Source
c0360e868c0e379e781e93494c4ddd5a4cb6dad209teste3dd8aed23ede91eb3fa41e7c9cd252053761a94f1dc741cf8ee56265c8756a05978a7v2.1.7Compare Source
v2.1.6Compare Source
v2.1.5Compare Source
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.