`undici.request` vulnerable to SSRF using absolute URL on `pathname`
Published 18 Aug 2022 · Updated 8 Nov 2023
Affected package
- Affected
- <5.8.2
- Fixed in
- 5.8.2
npm install undici@5.8.2Details
Impact
undici is vulnerable to SSRF (Server-side Request Forgery) when an application takes in user input into the path/pathname option of undici.request.
If a user specifies a URL such as http://127.0.0.1 or //127.0.0.1
const undici = require("undici")
undici.request({origin: "http://example.com", pathname: "//127.0.0.1"})Instead of processing the request as http://example.org//127.0.0.1 (or http://example.org/http://127.0.0.1 when http://127.0.0.1 is used), it actually processes the request as http://127.0.0.1/ and sends it to http://127.0.0.1.
If a developer passes in user input into path parameter of undici.request, it can result in an _SSRF_ as they will assume that the hostname cannot change, when in actual fact it can change because the specified path parameter is combined with the base URL.
Patches
This issue was fixed in undici@5.8.1.
Workarounds
The best workaround is to validate user input before passing it to the undici.request call.
For more information
If you have any questions or comments about this advisory:
- Open an issue in undici repository
- To make a report, follow the SECURITY document
Is GHSA-8qr4-xgw6-wmr3 in any of your client repos?
Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected undici, and gives you the command that fixes it.
References
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.