Skip to content

url-parse incorrectly parses hostname / protocol due to unstripped leading control characters.

Moderate severity GitHub Reviewed Published Feb 22, 2022 to the GitHub Advisory Database • Updated Sep 11, 2023

Package

npm url-parse (npm)

Affected versions

< 1.5.9

Patched versions

1.5.9

Description

Leading control characters in a URL are not stripped when passed into url-parse. This can cause input URLs to be mistakenly be interpreted as a relative URL without a hostname and protocol, while the WHATWG URL parser will trim control characters and treat it as an absolute URL.

If url-parse is used in security decisions involving the hostname / protocol, and the input URL is used in a client which uses the WHATWG URL parser, the decision may be incorrect.

This can also lead to a cross-site scripting (XSS) vulnerability if url-parse is used to check for the javascript: protocol in URLs. See following example:

const parse = require('url-parse')
const express = require('express')
const app = express()
const port = 3000

url = parse(\"\\bjavascript:alert(1)\")

console.log(url)

app.get('/', (req, res) => {
 if (url.protocol !== \"javascript:\") {res.send(\"<a href=\\'\" + url.href + \"\\'>CLICK ME!</a>\")}
 })

app.listen(port, () => {
 console.log(`Example app listening on port ${port}`)
 })

References

Published by the National Vulnerability Database Feb 21, 2022
Published to the GitHub Advisory Database Feb 22, 2022
Reviewed Mar 1, 2022
Last updated Sep 11, 2023

Severity

Moderate
6.5
/ 10

CVSS base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N

Weaknesses

CVE ID

CVE-2022-0691

GHSA ID

GHSA-jf5r-8hm2-f872

Source code

Credits

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.