GitHub Advisoryadvisory · npm
GHSA-8266-84wp-wv5c Svelte has a potential mXSS vulnerability due to improper HTML escaping
MEDIUM
Official page ↗
- Aliases
- CVE-2024-45047
- Ecosystem
- npm
- Packages
- svelte
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
- Weaknesses
- CWE-79
- Reviewed
- 2024-08-30
Affected packages
• npm svelte: < 4.2.19 → fixed in 4.2.19
Description
Summary
A potential XSS vulnerability exists in Svelte for versions prior to 4.2.19.
Details
Svelte improperly escapes HTML on server-side rendering. It converts strings according to the following rules:
• If the string is an attribute value:
• `"` -> `"`
• `&` -> `&`
• Other characters -> No conversion
• Otherwise:
• ` `<`
• `&` -> `&`
• Other characters -> No conversion
The assumption is that attributes will always stay as such, but in some situation the final DOM tree rendered on browsers is different from what Svelte expects on server-side rendering. This may be leveraged to perform XSS attacks. More specifically, this can occur when injecting malicious content into an attribute within a `` tag.
PoC
A vulnerable page (`+page.svelte`):
```html
import { page } from "$app/stores"
// user input
let href = $page.url.searchParams.get("href") ?? "https://example.com";
test
```
If a user accesses the following URL,
```
http://localhost:4173/?href=alert(123)
```
then, `alert(123)` will be executed.
Impact
XSS, when using an attribute within a noscript tag
Related
Alias · CVE (1)
- CVE-2024-45047 svelte performance oriented web framework. vulnerability
Weakness · CWE (1)
- CWE-79 Improper Neutralization of Input During Web Page Generation weakness