Svelte version 1.50.0 arrived on December 30, 2017, just a week after version 1.49.3 (released on December 24, 2017), offering developers subtle refinements to this "magical disappearing UI framework." Both versions share the same core philosophy of compiling away into highly efficient vanilla JavaScript at build time, leading to smaller bundles and improved runtime performance in web applications. From a dependency perspective, they are fundamentally identical, relying on a robust toolkit for development and testing. This includes industry-standard tools such as Rollup for bundling, TypeScript for enhanced code quality, ESLint for linting, and Mocha and Jest for testing.
The key difference lies in the potential bug fixes, performance improvements, and minor feature additions that might be included in the newer 1.50.0 release. Developers should consult the changelog or release notes (typically available on the Svelte GitHub repository) to understand the specific changes made and whether they address any issues encountered in the previous version. While the identical dependency lists suggest no major architectural shifts, even subtle improvements can contribute to a smoother development experience and a more performant final product. For those heavily invested in the Svelte ecosystem, upgrading to 1.50.0 is generally recommended to benefit from the latest enhancements and bug fixes. Always, test thoroughly after upgrading.
All the vulnerabilities related to the version 1.50.0 of the package
Svelte vulnerable to XSS when using objects during server-side rendering
The package svelte before 3.49.0 is vulnerable to Cross-site Scripting (XSS) due to improper input sanitization and to improper escape of attributes when using objects during SSR (Server-Side Rendering). Exploiting this vulnerability is possible via objects with a custom toString() function.
Svelte has a potential mXSS vulnerability due to improper HTML escaping
A potential XSS vulnerability exists in Svelte for versions prior to 4.2.19.
Svelte improperly escapes HTML on server-side rendering. It converts strings according to the following rules:
"
-> "
&
-> &
<
-> <
&
-> &
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 <noscript>
tag.
A vulnerable page (+page.svelte
):
<script>
import { page } from "$app/stores"
// user input
let href = $page.url.searchParams.get("href") ?? "https://example.com";
</script>
<noscript>
<a href={href}>test</a>
</noscript>
If a user accesses the following URL,
http://localhost:4173/?href=</noscript><script>alert(123)</script>
then, alert(123)
will be executed.
XSS, when using an attribute within a noscript tag