[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-regexp
will 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-:b
to/: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
pathToRegexp
method back for generating a regex- Adds
stringify
method for convertingTokenData
into 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
*name
syntax, 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
loose
mode- 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
match
andpathToRegexp
3fdd88fhttps://github.com/pillarjs/path-to-regexp/compare/v7.1.0...v7.2.0
Strict mode
Added
- Adds a
strict
option to detect potential ReDOS issuesFixed
- Fixes separator to default to
suffix + prefix
when not specified- Allows separator to be undefined in
TokenData
- This is only relevant if you are building
TokenData
manually, previouslyparse
filled 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
partial
support, prefer escaping the prefix delimiter explicitly (e.g.\\/(apple-)?icon-:res(\\d+).png
)2.4.0 / 2018-08-26
- Support
start
option to disable anchoring from beginning of the string2.3.0 / 2018-08-20
- Use
delimiter
when processing repeated matching groups (e.g.foo/bar
has no prefix, but has a delimiter)2.2.1 / 2018-04-24
- Allow empty string with
end: false
to match both relative and absolute paths2.2.0 / 2018-03-06
- Pass
token
as second argument toencode
option (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
endsWith
to match paths like/test?query=string
up to the query string- New option! Set
delimiters
for specific characters to be treated as parameter prefixes (e.g./:test
)- Remove
isarray
dependency- Explicitly handle trailing delimiters instead of trimming them (e.g.
/test/
is now treated as/test/
instead of/test
when matching)- Remove overloaded
keys
argument that acceptedoptions
- Remove
keys
list attached to theRegExp
output- Remove asterisk functionality (it's a real pain to properly encode)
- Change
tokensToFunction
(e.g.compile
) to accept anencode
function for pretty encoding (e.g. pass your own implementation)1.7.0 / 2016-11-08
- Allow a
delimiter
option to be passed in withtokensToRegExp
which will be used for "non-ending" token match situations1.6.0 / 2016-10-03
- Populate
RegExp.keys
when using thetokensToRegExp
method (making it consistent with the main export)- Allow a
delimiter
option to be passed in withparse
- Updated TypeScript definition with
Keys
andOptions
updated1.5.3 / 2016-06-15
... (truncated)
Commits
-
c302644
8.1.0 -
7b4598c
Document stringify method -
d6150f5
Add pathToRegexp method back -
a43e545
Move delimiter option to each method -
c909d1f
Stringify names with unsafe text chars after -
e537daa
Add a stringify API -
ed1095e
8.0.0 -
60f2121
Rewrite and simplify API -
74f97b5
Create SECURITY.md -
fb4d11d
Remove 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
@wesleytodd
in expressjs/express#5561- remove duplicate location test for data uri by
@wesleytodd
in expressjs/express#5562- feat: document beta releases expectations by
@marco-ippolito
in expressjs/express#5565- Cut down on duplicated CI runs by
@jonchurch
in expressjs/express#5564- Add a Threat Model by
@UlisesGascon
in expressjs/express#5526- Assign captain of encodeurl by
@blakeembrey
in expressjs/express#5579- Nominate jonchurch as repo captain for
http-errors
,expressjs.com
,morgan
,cors
,body-parser
by@jonchurch
in expressjs/express#5587- docs: update Security.md by
@inigomarquinez
in expressjs/express#5590- docs: update triage nomination policy by
@UlisesGascon
in expressjs/express#5600- Add CodeQL (SAST) by
@UlisesGascon
in expressjs/express#5433- docs: add UlisesGascon as triage initiative captain by
@UlisesGascon
in expressjs/express#5605- Use object with null prototype for various app properties by
@EvanHahn
in expressjs/express#4861- deps: encodeurl@~2.0.0 by
@blakeembrey
in expressjs/express#5569- skip QUERY method test by
@jonchurch
in expressjs/express#5628- ignore ETAG query test on 21 and 22, reuse skip util by
@jonchurch
in expressjs/express#5639- add support Node.js@22 in the CI by
@mertcanaltin
in expressjs/express#5627- doc: add table of contents, tc/triager lists to readme by
@mertcanaltin
in expressjs/express#5619- List and sort all projects, add captains by
@blakeembrey
in expressjs/express#5653- Call callback once on listen error by
@wesleytodd
in expressjs/express#3216- docs: add
@UlisesGascon
as captain for cookie-parser by@UlisesGascon
in expressjs/express#5666✨ bring back query tests for node 21 by@ctcpip
in expressjs/express#5690- [v4] Deprecate
res.clearCookie
acceptingoptions.maxAge
andoptions.expires
by@jonchurch
in expressjs/express#5672- skip QUERY tests for Node 21 only, still not supported by
@jonchurch
in expressjs/express#5695📝 update people, add ctcpip to TC by@ctcpip
in expressjs/express#5683- remove minor version pinning from ci by
@jonchurch
in expressjs/express#5722- Fix link variable use in attribution section of CODE OF CONDUCT by
@IamLizu
in expressjs/express#5762- Replace Appveyor windows testing with GHA by
@jonchurch
in expressjs/express#5599- Add OSSF Scorecard badge by
@UlisesGascon
in expressjs/express#5436- Throw on invalid status codes by
@jonchurch
in expressjs/express#4212- Use Array.flat instead of array-flatten by
@almic
in expressjs/express#5677- Adopt Node@18 as the minimum supported version by
@UlisesGascon
in expressjs/express#5803- Ignore
expires
andmaxAge
inres.clearCookie()
by@jonchurch
in expressjs/express#5792- send@1.0.0 by
@wesleytodd
in expressjs/express#5786- chore: upgrade
debug
dep from 3.10 to 4.3.6 by@carpasse
in expressjs/express#5829- refactor: replace 'path-is-absolute' dep with node:path isAbsolute method by
@carpasse
in expressjs/express#5830- update scorecard link by
@bjohansebas
in expressjs/express#5814- Nominate
@IamLizu
to the triage team by@UlisesGascon
in expressjs/express#5836- deps: path-to-regexp@0.1.8 by
@blakeembrey
in expressjs/express#5603- docs: specify new instructions for
question
anddiscuss
by@IamLizu
in expressjs/express#5835- 5.x: Upgrading
merge-descriptors
with allowing minors by@RobinTail
in expressjs/express#5782- 4.x: Upgrade
merge-descriptors
dependency by@RobinTail
in expressjs/express#5781- WIP: serve-static@2 by
@wesleytodd
in expressjs/express#5790- chore: upgrade qs dp from 6.11.0 to 6.13.0 by
@carpasse
in expressjs/express#5847- Upgrade cookie signature by
@IamLizu
in expressjs/express#5833- accepts@2 by
@wesleytodd
in expressjs/express#5881- mime-types@3 by
@wesleytodd
in expressjs/express#5882- type-is@^2.0.0 by
@wesleytodd
in expressjs/express#5883- content-disposition@^1.0.0 by
@wesleytodd
in expressjs/express#5884
... (truncated)
Changelog
Sourced from express's changelog.
5.0.0 / 2024-09-10
- remove:
path-is-absolute
dependency - usepath.isAbsolute
instead- 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.clearCookie
will ignore user providedmaxAge
andexpires
options- 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-types
for file to content type mapping- deps: array-flatten@3.0.0
- deps: body-parser@2.0.0-beta.1
req.body
is no longer always initialized to{}
... (truncated)
Commits
-
344b022
5.0.0 -
0c49926
fix(deps): send@^1.1.0 -
b3906cb
fix(deps): serve-static@^2.1.0 -
fed8c2a
fix(deps): body-parser@^2.0.1 -
bdd81f8
Deleteback
as a magic string (#5933) -
6c98f80
🔧 update CI, remove unsupported versions, clean up -
f9256ef
Merge branch '5.0' into 5-merge -
e5feb9f
Merge tag '4.20.0' into 5.0 -
21df421
4.20.0 -
4c9ddc1
feat: 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 recreate
will recreate this MR rewriting all the manual changes and resolving conflicts