[Security] Bump path-to-regexp and express
Bumps path-to-regexp to 8.1.0 and updates ancestor dependency express. These dependencies need to be updated together.
Updates path-to-regexp from 0.1.7 to 8.1.0 This update includes a security fix.
Vulnerabilities fixed
path-to-regexp outputs backtracking regular expressions
Impact
In certain cases,
path-to-regexpwill output a regular expression that can be exploited to cause poor performance.Patches
For users of 0.1, upgrade to
0.1.10. All other users should upgrade to8.0.0.Version 0.1.10 adds backtracking protection when a custom regular expression is not provided, so it's still possible to manually create a ReDoS vulnerability if you are providing custom regular expressions.
Version 8.0.0 removes all features that can cause a ReDoS and stops exposing the regular expression directly.
Workarounds
All versions can be patched by providing a custom regular expression for parameters after the first in a single segment. As long as the custom regular expression does not match the text before the parameter, you will be safe. For example, change
/:a-:bto/:a-:b([^-/]+).If paths cannot be rewritten and versions cannot be upgraded, another alternative is to limit the URL length. For example, halving the attack string improves performance by 4x faster.
Details
... (truncated)
Patched versions: 8.0.0; 0.1.10 Affected versions: >= 0.2.0, < 8.0.0; < 0.1.10
Release notes
Sourced from path-to-regexp's releases.
v8.1.0
Added
- Adds
pathToRegexpmethod back for generating a regex- Adds
stringifymethod for convertingTokenDatainto a path stringhttps://github.com/pillarjs/path-to-regexp/compare/v8.0.0...v8.1.0
Simpler API
Heads up! This is a fairly large change (again) and I need to apologize in advance. If I foresaw what this version would have ended up being I would not have released version 7. A longer blog post and explanation will be incoming this week, but the pivot has been due to work on Express.js v5 and this will the finalized syntax used in Express moving forward.
Added
- Adds key names to wildcards using
*namesyntax, aligns with:behavior but using an asterisk insteadChanged
- Removes group suffixes of
?,+, and*- only optional exists moving forward (use wildcards for+,{*foo}for*)- Parameter names follow JS identifier rules and allow unicode characters
Added
- Parameter names can now be quoted, e.g.
:"foo-bar"- Match accepts an array of values, so the signature is now
string | TokenData | Array<string | TokenData>Removed
- Removes
loosemode- Removes regular expression overrides of parameters
https://github.com/pillarjs/path-to-regexp/compare/v7.1.0...v8.0.0
Support array inputs (again)
Added
- Support array inputs for
matchandpathToRegexp3fdd88fhttps://github.com/pillarjs/path-to-regexp/compare/v7.1.0...v7.2.0
Strict mode
Added
- Adds a
strictoption to detect potential ReDOS issuesFixed
- Fixes separator to default to
suffix + prefixwhen not specified- Allows separator to be undefined in
TokenData
- This is only relevant if you are building
TokenDatamanually, previouslyparsefilled it in automatically
... (truncated)
Changelog
Sourced from path-to-regexp's changelog.
Moved to GitHub Releases
3.0.0 / 2019-01-13
- Always use prefix character as delimiter token, allowing any character to be a delimiter (e.g.
/:att1-:att2-:att3-:att4-:att5)- Remove
partialsupport, prefer escaping the prefix delimiter explicitly (e.g.\\/(apple-)?icon-:res(\\d+).png)2.4.0 / 2018-08-26
- Support
startoption to disable anchoring from beginning of the string2.3.0 / 2018-08-20
- Use
delimiterwhen processing repeated matching groups (e.g.foo/barhas no prefix, but has a delimiter)2.2.1 / 2018-04-24
- Allow empty string with
end: falseto match both relative and absolute paths2.2.0 / 2018-03-06
- Pass
tokenas second argument toencodeoption (e.g.encode(value, token))2.1.0 / 2017-10-20
- Handle non-ending paths where the final character is a delimiter
- E.g.
/foo/before required either/foo/or/foo//to match in non-ending mode2.0.0 / 2017-08-23
- New option! Ability to set
endsWithto match paths like/test?query=stringup to the query string- New option! Set
delimitersfor specific characters to be treated as parameter prefixes (e.g./:test)- Remove
isarraydependency- Explicitly handle trailing delimiters instead of trimming them (e.g.
/test/is now treated as/test/instead of/testwhen matching)- Remove overloaded
keysargument that acceptedoptions- Remove
keyslist attached to theRegExpoutput- Remove asterisk functionality (it's a real pain to properly encode)
- Change
tokensToFunction(e.g.compile) to accept anencodefunction for pretty encoding (e.g. pass your own implementation)1.7.0 / 2016-11-08
- Allow a
delimiteroption to be passed in withtokensToRegExpwhich will be used for "non-ending" token match situations1.6.0 / 2016-10-03
- Populate
RegExp.keyswhen using thetokensToRegExpmethod (making it consistent with the main export)- Allow a
delimiteroption to be passed in withparse- Updated TypeScript definition with
KeysandOptionsupdated1.5.3 / 2016-06-15
... (truncated)
Commits
-
c3026448.1.0 -
7b4598cDocument stringify method -
d6150f5Add pathToRegexp method back -
a43e545Move delimiter option to each method -
c909d1fStringify names with unsafe text chars after -
e537daaAdd a stringify API -
ed1095e8.0.0 -
60f2121Rewrite and simplify API -
74f97b5Create SECURITY.md -
fb4d11dRemove matches from tests - Additional commits viewable in compare view
Updates express from 4.19.2 to 5.0.0
Release notes
Sourced from express's releases.
5.0.0
What's Changed
- 4.19.2 Staging by
@wesleytoddin expressjs/express#5561- remove duplicate location test for data uri by
@wesleytoddin expressjs/express#5562- feat: document beta releases expectations by
@marco-ippolitoin expressjs/express#5565- Cut down on duplicated CI runs by
@jonchurchin expressjs/express#5564- Add a Threat Model by
@UlisesGasconin expressjs/express#5526- Assign captain of encodeurl by
@blakeembreyin expressjs/express#5579- Nominate jonchurch as repo captain for
http-errors,expressjs.com,morgan,cors,body-parserby@jonchurchin expressjs/express#5587- docs: update Security.md by
@inigomarquinezin expressjs/express#5590- docs: update triage nomination policy by
@UlisesGasconin expressjs/express#5600- Add CodeQL (SAST) by
@UlisesGasconin expressjs/express#5433- docs: add UlisesGascon as triage initiative captain by
@UlisesGasconin expressjs/express#5605- Use object with null prototype for various app properties by
@EvanHahnin expressjs/express#4861- deps: encodeurl@~2.0.0 by
@blakeembreyin expressjs/express#5569- skip QUERY method test by
@jonchurchin expressjs/express#5628- ignore ETAG query test on 21 and 22, reuse skip util by
@jonchurchin expressjs/express#5639- add support Node.js@22 in the CI by
@mertcanaltinin expressjs/express#5627- doc: add table of contents, tc/triager lists to readme by
@mertcanaltinin expressjs/express#5619- List and sort all projects, add captains by
@blakeembreyin expressjs/express#5653- Call callback once on listen error by
@wesleytoddin expressjs/express#3216- docs: add
@UlisesGasconas captain for cookie-parser by@UlisesGasconin expressjs/express#5666✨ bring back query tests for node 21 by@ctcpipin expressjs/express#5690- [v4] Deprecate
res.clearCookieacceptingoptions.maxAgeandoptions.expiresby@jonchurchin expressjs/express#5672- skip QUERY tests for Node 21 only, still not supported by
@jonchurchin expressjs/express#5695📝 update people, add ctcpip to TC by@ctcpipin expressjs/express#5683- remove minor version pinning from ci by
@jonchurchin expressjs/express#5722- Fix link variable use in attribution section of CODE OF CONDUCT by
@IamLizuin expressjs/express#5762- Replace Appveyor windows testing with GHA by
@jonchurchin expressjs/express#5599- Add OSSF Scorecard badge by
@UlisesGasconin expressjs/express#5436- Throw on invalid status codes by
@jonchurchin expressjs/express#4212- Use Array.flat instead of array-flatten by
@almicin expressjs/express#5677- Adopt Node@18 as the minimum supported version by
@UlisesGasconin expressjs/express#5803- Ignore
expiresandmaxAgeinres.clearCookie()by@jonchurchin expressjs/express#5792- send@1.0.0 by
@wesleytoddin expressjs/express#5786- chore: upgrade
debugdep from 3.10 to 4.3.6 by@carpassein expressjs/express#5829- refactor: replace 'path-is-absolute' dep with node:path isAbsolute method by
@carpassein expressjs/express#5830- update scorecard link by
@bjohansebasin expressjs/express#5814- Nominate
@IamLizuto the triage team by@UlisesGasconin expressjs/express#5836- deps: path-to-regexp@0.1.8 by
@blakeembreyin expressjs/express#5603- docs: specify new instructions for
questionanddiscussby@IamLizuin expressjs/express#5835- 5.x: Upgrading
merge-descriptorswith allowing minors by@RobinTailin expressjs/express#5782- 4.x: Upgrade
merge-descriptorsdependency by@RobinTailin expressjs/express#5781- WIP: serve-static@2 by
@wesleytoddin expressjs/express#5790- chore: upgrade qs dp from 6.11.0 to 6.13.0 by
@carpassein expressjs/express#5847- Upgrade cookie signature by
@IamLizuin expressjs/express#5833- accepts@2 by
@wesleytoddin expressjs/express#5881- mime-types@3 by
@wesleytoddin expressjs/express#5882- type-is@^2.0.0 by
@wesleytoddin expressjs/express#5883- content-disposition@^1.0.0 by
@wesleytoddin expressjs/express#5884
... (truncated)
Changelog
Sourced from express's changelog.
5.0.0 / 2024-09-10
- remove:
path-is-absolutedependency - usepath.isAbsoluteinstead- breaking:
res.status()accepts only integers, and input must be greater than 99 and less than 1000
- will throw a
RangeError: Invalid status code: ${code}. Status code must be greater than 99 and less than 1000.for inputs outside this range- will throw a
TypeError: Invalid status code: ${code}. Status code must be an integer.for non integer inputs- deps: send@1.0.0
res.redirect('back')andres.location('back')is no longer a supported magic string, explicitly usereq.get('Referrer') || '/'.- change:
res.clearCookiewill ignore user providedmaxAgeandexpiresoptions- deps: cookie-signature@^1.2.1
- deps: debug@4.3.6
- deps: merge-descriptors@^2.0.0
- deps: serve-static@^2.1.0
- deps: qs@6.13.0
- deps: accepts@^2.0.0
- deps: mime-types@^3.0.0
application/javascript=>text/javascript- deps: type-is@^2.0.0
- deps: content-disposition@^1.0.0
- deps: finalhandler@^2.0.0
- deps: fresh@^2.0.0
- deps: body-parser@^2.0.1
- deps: send@^1.1.0
5.0.0-beta.3 / 2024-03-25
This incorporates all changes after 4.19.1 up to 4.19.2.
5.0.0-beta.2 / 2024-03-20
This incorporates all changes after 4.17.2 up to 4.19.1.
5.0.0-beta.1 / 2022-02-14
This is the first Express 5.0 beta release, based off 4.17.2 and includes changes from 5.0.0-alpha.8.
- change:
- Default "query parser" setting to
'simple'- Requires Node.js 4+
- Use
mime-typesfor file to content type mapping- deps: array-flatten@3.0.0
- deps: body-parser@2.0.0-beta.1
req.bodyis no longer always initialized to{}
... (truncated)
Commits
-
344b0225.0.0 -
0c49926fix(deps): send@^1.1.0 -
b3906cbfix(deps): serve-static@^2.1.0 -
fed8c2afix(deps): body-parser@^2.0.1 -
bdd81f8Deletebackas a magic string (#5933) -
6c98f80🔧 update CI, remove unsupported versions, clean up -
f9256efMerge branch '5.0' into 5-merge -
e5feb9fMerge tag '4.20.0' into 5.0 -
21df4214.20.0 -
4c9ddc1feat: upgrade to serve-static@0.16.0 - Additional commits viewable in compare view
Dependabot commands
You can trigger Dependabot actions by commenting on this MR
-
$dependabot recreatewill recreate this MR rewriting all the manual changes and resolving conflicts