chore(deps): update dependency webpack-dev-middleware to v5 [security] #147
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:
3.6.2
->5.3.4
GitHub Vulnerability Alerts
CVE-2024-29180
Summary
The webpack-dev-middleware middleware does not validate the supplied URL address sufficiently before returning the local file. It is possible to access any file on the developer's machine.
Details
The middleware can either work with the physical filesystem when reading the files or it can use a virtualized in-memory memfs filesystem.
If writeToDisk configuration option is set to true, the physical filesystem is used:
https://github.com/webpack/webpack-dev-middleware/blob/7ed24e0b9f53ad1562343f9f517f0f0ad2a70377/src/utils/setupOutputFileSystem.js#L21
The getFilenameFromUrl method is used to parse URL and build the local file path.
The public path prefix is stripped from the URL, and the unsecaped path suffix is appended to the outputPath:
https://github.com/webpack/webpack-dev-middleware/blob/7ed24e0b9f53ad1562343f9f517f0f0ad2a70377/src/utils/getFilenameFromUrl.js#L82
As the URL is not unescaped and normalized automatically before calling the midlleware, it is possible to use %2e and %2f sequences to perform path traversal attack.
PoC
A blank project can be created containing the following configuration file webpack.config.js:
module.exports = { devServer: { devMiddleware: { writeToDisk: true } } };
When started, it is possible to access any local file, e.g. /etc/passwd:
$ curl localhost:8080/public/..%2f..%2f..%2f..%2f../etc/passwd
Impact
The developers using webpack-dev-server or webpack-dev-middleware are affected by the issue. When the project is started, an attacker might access any file on the developer's machine and exfiltrate the content (e.g. password, configuration files, private source code, ...).
If the development server is listening on a public IP address (or 0.0.0.0), an attacker on the local network can access the local files without any interaction from the victim (direct connection to the port).
If the server allows access from third-party domains (CORS, Allow-Access-Origin: * ), an attacker can send a malicious link to the victim. When visited, the client side script can connect to the local server and exfiltrate the local files.
Recommendation
The URL should be unescaped and normalized before any further processing.
Release Notes
webpack/webpack-dev-middleware (webpack-dev-middleware)
v5.3.4
Compare Source
5.3.4 (2024-03-20)
Bug Fixes
v5.3.3
Compare Source
⚠ BREAKING CHANGES
5.3.3 (2022-05-18)
Bug Fixes
Request
andResponse
(#1271) (eeb8aa8)5.3.2 (2022-05-17)
Bug Fixes
5.3.1 (2022-02-01)
Bug Fixes
v5.3.2
Compare Source
⚠ BREAKING CHANGES
5.3.3 (2022-05-18)
Bug Fixes
Request
andResponse
(#1271) (eeb8aa8)5.3.2 (2022-05-17)
Bug Fixes
5.3.1 (2022-02-01)
Bug Fixes
v5.3.1
Compare Source
⚠ BREAKING CHANGES
5.3.3 (2022-05-18)
Bug Fixes
Request
andResponse
(#1271) (eeb8aa8)5.3.2 (2022-05-17)
Bug Fixes
5.3.1 (2022-02-01)
Bug Fixes
v5.3.0
Compare Source
⚠ BREAKING CHANGES
5.3.3 (2022-05-18)
Bug Fixes
Request
andResponse
(#1271) (eeb8aa8)5.3.2 (2022-05-17)
Bug Fixes
5.3.1 (2022-02-01)
Bug Fixes
v5.2.2
Compare Source
Features
5.2.2 (2021-11-17)
Chore
schema-utils
package to4.0.0
version5.2.1 (2021-09-25)
v5.2.1
Compare Source
Features
5.2.2 (2021-11-17)
Chore
schema-utils
package to4.0.0
version5.2.1 (2021-09-25)
v5.2.0
Compare Source
Features
5.2.2 (2021-11-17)
Chore
schema-utils
package to4.0.0
version5.2.1 (2021-09-25)
v5.1.0
Compare Source
Features
Range
header is present (e8b21f0)Bug Fixes
mem
package (#1027) (0d55268)v5.0.0
Compare Source
⚠ BREAKING CHANGES
Node.js
version is12.13.0
(#928) (4cffeff)v4.3.0
Compare Source
Features
getFilenameFromUrl
to API (#911) (1edc726)Bug Fixes
v4.2.0
Compare Source
Features
headers
option to accept function (#897) (966afb3)v4.1.0
Compare Source
Features
stats
option (376cdba)4.0.4 (2021-01-13)
Bug Fixes
4.0.3 (2021-01-12)
Bug Fixes
stats
tostdout
insteadstderr
, how doeswebpack-cli
, if you need hidestats
from output please use{ stats: false }
or{ stats: 'none' }
(4de0f97)stats
(4de0f97)Content-type header
on unknown types (#809) (5c9eee5)4.0.2 (2020-11-10)
Bug Fixes
headers
option (#763) (7c4cac5)4.0.1 (2020-11-09)
Bug Fixes
connect
(b83a1db)v4.0.4
Compare Source
Features
stats
option (376cdba)4.0.4 (2021-01-13)
Bug Fixes
4.0.3 (2021-01-12)
Bug Fixes
stats
tostdout
insteadstderr
, how doeswebpack-cli
, if you need hidestats
from output please use{ stats: false }
or{ stats: 'none' }
(4de0f97)stats
(4de0f97)Content-type header
on unknown types (#809) (5c9eee5)4.0.2 (2020-11-10)
Bug Fixes
headers
option (#763) (7c4cac5)4.0.1 (2020-11-09)
Bug Fixes
connect
(b83a1db)v4.0.3
Compare Source
Features
stats
option (376cdba)4.0.4 (2021-01-13)
Bug Fixes
4.0.3 (2021-01-12)
Bug Fixes
stats
tostdout
insteadstderr
, how doeswebpack-cli
, if you need hidestats
from output please use{ stats: false }
or{ stats: 'none' }
(4de0f97)stats
(4de0f97)Content-type header
on unknown types (#809) (5c9eee5)4.0.2 (2020-11-10)
Bug Fixes
headers
option (#763) (7c4cac5)4.0.1 (2020-11-09)
Bug Fixes
connect
(b83a1db)v4.0.2
Compare Source
Features
stats
option (376cdba)4.0.4 (2021-01-13)
Bug Fixes
4.0.3 (2021-01-12)
Bug Fixes
stats
tostdout
insteadstderr
, how doeswebpack-cli
, if you need hidestats
from output please use{ stats: false }
or{ stats: 'none' }
(4de0f97)stats
(4de0f97)Content-type header
on unknown types (#809) (5c9eee5)4.0.2 (2020-11-10)
Bug Fixes
headers
option (#763) (7c4cac5)4.0.1 (2020-11-09)
Bug Fixes
connect
(b83a1db)v4.0.1
Compare Source
Features
stats
option (376cdba)4.0.4 (2021-01-13)
Bug Fixes
4.0.3 (2021-01-12)
Bug Fixes
stats
tostdout
insteadstderr
, how doeswebpack-cli
, if you need hidestats
from output please use{ stats: false }
or{ stats: 'none' }
(4de0f97)stats
(4de0f97)Content-type header
on unknown types (#809) (5c9eee5)4.0.2 (2020-11-10)
Bug Fixes
headers
option (#763) (7c4cac5)4.0.1 (2020-11-09)
Bug Fixes
connect
(b83a1db)v4.0.0
Compare Source
Features
stats
option (376cdba)4.0.4 (2021-01-13)
Bug Fixes
4.0.3 (2021-01-12)
Bug Fixes
stats
tostdout
insteadstderr
, how doeswebpack-cli
, if you need hidestats
from output please use{ stats: false }
or{ stats: 'none' }
(4de0f97)stats
(4de0f97)Content-type header
on unknown types (#809) (5c9eee5)4.0.2 (2020-11-10)
Bug Fixes
headers
option (#763) (7c4cac5)4.0.1 (2020-11-09)
Bug Fixes
connect
(b83a1db)v3.7.3
Compare Source
3.7.3 (2020-12-15)
Bug Fixes
v3.7.2
Compare Source
Bug Fixes
options.json
file (#589) (41d6264)4.0.0-rc.0 (2020-02-19)
Bug Fixes
output.path
andoutput.publicPath
options from the configurationstats
option from the configurationwatchOptions
option from the configurationwriteToDisk
option now correctly works in multi-compiler modeoutputFileSystem
option now correctly works in multi-compiler mode[hash]
/[fullhash]
inoutput.path
andoutput.publicPath
Content-Type
header doesn't havecharset=utf-8
value for custom MIME types and MIME types which can be nonutf-8
Features
webpack
loggermemfs
packageBREAKING CHANGES
10.13.0
publicPath
is taken from the value of theoutput.publicPath
option from the configuration (webpack.config.js
)stats
option was removed, the default value of thestats
option is taken from the value of thestats
option from the configuration (webpack.config.js
)watchOptions
was removed, the default value of thewatchOptions
option is taken from the value of thewatchOptions
option from the configuration (webpack.config.js
)Content-Type
header doesn't havecharset=utf-8
value for custom MIME types and MIME types which can be nonutf-8
fs
option was renamed to theoutputFileSystem
optionlazy
option was removed without replacementlogger
,logLevel
andlogTime
options were removed without replacement. You can setup thelevel
value using{ infrastructureLogging: { level: 'warn' } }
, please read https://webpack.js.org/configuration/other-options/#infrastructurelogging. You can use theinfrastructurelog
(infrastructureLog
inwebpack@5
) hook to customize logs. Thelog
property in the middleware context was renamed tologger
mimeTypes
option first requires you to specify an extension and then a content-type -{ mimeTypes: { phtml: 'text/html' } }
force
option from themimeTypes
option was removed without replacementreporter
option was removed without replacementgetFilenameFromUrl
method was removed from the APIlocals
now underres.locals.webpack
- useres.locals.webpack.stats
for accessstats
andres.locals.webpack.outputFileSystem
to accessoutputFileSystem
3.7.2 (2019-09-28)
Bug Fixes
writeToDisk
used (#472) (6730076)3.7.1 (2019-09-03)
Bug Fixes
writeToFile
option has compatibility with webpack@5 (#459) (5c90e1e)v3.7.1
Compare Source
Bug Fixes
options.json
file (#589) (41d6264)4.0.0-rc.0 (2020-02-19)
Bug Fixes
output.path
andoutput.publicPath
options from the configurationstats
option from the configurationwatchOptions
option from the configurationwriteToDisk
option now correctly works in multi-compiler modeoutputFileSystem
option now correctly works in multi-compiler mode[hash]
/[fullhash]
inoutput.path
andoutput.publicPath
Content-Type
header doesn't havecharset=utf-8
value for custom MIME types and MIME types which can be nonutf-8
Features
webpack
loggermemfs
packageBREAKING CHANGES
10.13.0
publicPath
is taken from the value of theoutput.publicPath
option from the configuration (webpack.config.js
)stats
option was removed, the default value of thestats
option is taken from the value of thestats
option from the configuration (webpack.config.js
)watchOptions
was removed, the default value of thewatchOptions
option is taken from the value of thewatchOptions
option from the configuration (webpack.config.js
)Content-Type
header doesn't havecharset=utf-8
value for custom MIME types and MIME types which can be nonutf-8
fs
option was renamed to theoutputFileSystem
optionlazy
option was removed without replacementlogger
,logLevel
andlogTime
options were removed without replacement. You can setup thelevel
value using{ infrastructureLogging: { level: 'warn' } }
, please read https://webpack.js.org/configuration/other-options/#infrastructurelogging. You can use theinfrastructurelog
(infrastructureLog
inwebpack@5
) hook to customize logs. Thelog
property in the middleware context was renamed tologger
mimeTypes
option first requires you to specify an extension and then a content-type -{ mimeTypes: { phtml: 'text/html' } }
force
option from themimeTypes
option was removed without replacementreporter
option was removed without replacementgetFilenameFromUrl
method was removed from the APIlocals
now underres.locals.webpack
- useres.locals.webpack.stats
for accessstats
andres.locals.webpack.outputFileSystem
to accessoutputFileSystem
3.7.2 (2019-09-28)
Bug Fixes
writeToDisk
used (#472) (6730076)3.7.1 (2019-09-03)
Bug Fixes
writeToFile
option has compatibility with webpack@5 (#459) (5c90e1e)v3.7.0
Compare Source
Bug Fixes
options.json
file (#589) (41d6264)4.0.0-rc.0 (2020-02-19)
Bug Fixes
output.path
andoutput.publicPath
options from the configurationstats
option from the configurationwatchOptions
option from the configurationwriteToDisk
option now correctly works in multi-compiler modeoutputFileSystem
option now correctly works in multi-compiler mode[hash]
/[fullhash]
inoutput.path
andoutput.publicPath
Content-Type
header doesn't havecharset=utf-8
value for custom MIME types and MIME types which can be nonutf-8
Features
webpack
loggermemfs
packageBREAKING CHANGES
10.13.0
publicPath
is taken from the value of theoutput.publicPath
option from the configuration (webpack.config.js
)stats
option was removed, the default value of thestats
option is taken from the value of thestats
option from the configuration (webpack.config.js
)watchOptions
was removed, the default value of thewatchOptions
option is taken from the value of thewatchOptions
option from the configuration (webpack.config.js
)Content-Type
header doesn't havecharset=utf-8
value for custom MIME types and MIME types which can be nonutf-8
fs
option was renamed to theoutputFileSystem
optionlazy
option was removed without replacementlogger
,logLevel
andlogTime
options were removed without replacement. You can setup thelevel
value using{ infrastructureLogging: { level: 'warn' } }
, please read https://webpack.js.org/configuration/other-options/#infrastructurelogging. You can use theinfrastructurelog
(infrastructureLog
inwebpack@5
) hook to customize logs. Thelog
property in the middleware context was renamed tologger
mimeTypes
option first requires you to specify an extension and then a content-type -{ mimeTypes: { phtml: 'text/html' } }
force
option from themimeTypes
option was removed without replacementreporter
option was removed without replacementgetFilenameFromUrl
method was removed from the APIlocals
now underres.locals.webpack
- useres.locals.webpack.stats
for accessstats
andres.locals.webpack.outputFileSystem
to accessoutputFileSystem
3.7.2 (2019-09-28)
Bug Fixes
writeToDisk
used (#472) (6730076)3.7.1 (2019-09-03)
Bug Fixes
writeToFile
option has compatibility with webpack@5 (#459) (5c90e1e)Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, 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.