VYPR
Low severityNVD Advisory· Published Nov 25, 2024· Updated Nov 25, 2024

Unescaped error message included on error page in SvelteKit

CVE-2024-53262

Description

SvelteKit is a framework for rapidly developing robust, performant web applications using Svelte. The static error.html template for errors contains placeholders that are replaced without escaping the content first. error.html is the page that is rendered when everything else fails. It can contain the following placeholders: %sveltekit.status% — the HTTP status, and %sveltekit.error.message% — the error message. This leads to possible injection if an app explicitly creates an error with a message that contains user controlled content. Only applications where user provided input is used in the Error message will be vulnerable, so the vast majority of applications will not be vulnerable This issue has been addressed in version 2.8.3 and all users are advised to upgrade. There are no known workarounds for this vulnerability.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
@sveltejs/kitnpm
< 2.8.32.8.3

Affected products

1

Patches

1
134e36343ef5

fix: ensure error messages are escaped (#13050)

https://github.com/sveltejs/kitBen McCannNov 25, 2024via ghsa
3 files changed · +9 2
  • .changeset/fast-swans-perform.md+5 0 added
    @@ -0,0 +1,5 @@
    +---
    +'@sveltejs/kit': patch
    +---
    +
    +fix: ensure error messages are escaped
    
  • packages/kit/src/exports/vite/dev/index.js+2 1 modified
    @@ -18,6 +18,7 @@ import { compact } from '../../../utils/array.js';
     import { not_found } from '../utils.js';
     import { SCHEME } from '../../../utils/url.js';
     import { check_feature } from '../../../utils/features.js';
    +import { escape_html } from '../../../utils/escape.js';
     
     const cwd = process.cwd();
     
    @@ -508,7 +509,7 @@ export async function dev(vite, vite_config, svelte_config) {
     					const error_template = ({ status, message }) => {
     						return error_page
     							.replace(/%sveltekit\.status%/g, String(status))
    -							.replace(/%sveltekit\.error\.message%/g, message);
    +							.replace(/%sveltekit\.error\.message%/g, escape_html(message));
     					};
     
     					res.writeHead(500, {
    
  • packages/kit/src/runtime/server/utils.js+2 1 modified
    @@ -5,6 +5,7 @@ import { negotiate } from '../../utils/http.js';
     import { HttpError } from '../control.js';
     import { fix_stack_trace } from '../shared-server.js';
     import { ENDPOINT_METHODS } from '../../constants.js';
    +import { escape_html } from '../../utils/escape.js';
     
     /** @param {any} body */
     export function is_pojo(body) {
    @@ -50,7 +51,7 @@ export function allowed_methods(mod) {
      * @param {string} message
      */
     export function static_error_page(options, status, message) {
    -	let page = options.templates.error({ status, message });
    +	let page = options.templates.error({ status, message: escape_html(message) });
     
     	if (DEV) {
     		// inject Vite HMR client, for easier debugging
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

7

News mentions

0

No linked articles in our index yet.