[GHSA-8v38-pw62-9cw2] url-parse Incorrectly parses URLs that include an '@' #6700
+2
−2
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.
Updates
Comments
In v1.x, the @ is correctly identified as an auth separator, but when auth is empty, the toString() method has no way to know there was an @ in the original URL. The fix adds a check: if there's no host but there is a pathname (and it's a special protocol), re-add the @ to preserve the original invalid URL structure.
In v0.x, the regex-based approach doesn't cleanly separate empty auth - it ends up treating @ as part of the hostname, which accidentally preserves it in the output.
In v0.x, the final href is:
http://@/127.0.0.1The @ is preserved, which is the correct/safe behavior. This matches the original input.In contrast, v1.x (vulnerable) outputs:
http:///127.0.0.1. The @ is lost, which is the security issue - if code checks hostname (empty) to allow the request, then uses href to make the request, the /127.0.0.1 in the pathname could be misinterpreted by some HTTP clients as a host, leading to SSRF.