CVE-2025-32388

5.4 MEDIUM

📋 TL;DR

This CVE describes a cross-site scripting (XSS) vulnerability in SvelteKit where unsanitized search parameter names can be exploited when iterating over all entries of event.url.searchParams in server load functions. Attackers can craft malicious URLs that, when clicked by users, execute arbitrary JavaScript in the victim's browser context. Only applications using affected SvelteKit versions with server load functions that iterate over all search parameters are vulnerable.

💻 Affected Systems

Products:
  • SvelteKit
Versions: Versions prior to 2.20.6
Operating Systems: All
Default Config Vulnerable: ✅ No
Notes: Only vulnerable if using server load functions that iterate over all entries of event.url.searchParams (e.g., using for...of loops or .entries() method).

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers can execute arbitrary JavaScript in victim's browser, potentially stealing session cookies, performing actions as the user, or redirecting to malicious sites.

🟠

Likely Case

Attackers craft phishing links that execute JavaScript payloads when clicked, potentially stealing user data or session tokens.

🟢

If Mitigated

With proper input sanitization and Content Security Policy (CSP) headers, impact is limited to script execution within CSP constraints.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Exploitation requires user interaction (clicking malicious link) but is straightforward once the vulnerable code pattern is identified.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.20.6

Vendor Advisory: https://github.com/sveltejs/kit/security/advisories/GHSA-6q87-84jw-cjhp

Restart Required: Yes

Instructions:

1. Update SvelteKit to version 2.20.6 or later using npm: 'npm update @sveltejs/kit' 2. Restart your application server 3. Verify the update with 'npm list @sveltejs/kit'

🔧 Temporary Workarounds

Sanitize search parameter names manually

all

Manually sanitize search parameter names before processing in server load functions

// Example: Sanitize parameter names before iteration
const sanitizedParams = new URLSearchParams();
for (const [key, value] of event.url.searchParams) {
  const sanitizedKey = key.replace(/[<>"']/g, ''); // Basic sanitization
  sanitizedParams.set(sanitizedKey, value);
}

🧯 If You Can't Patch

  • Implement strict Content Security Policy (CSP) headers to limit script execution
  • Review and modify server load functions to avoid iterating over all search parameter entries

🔍 How to Verify

Check if Vulnerable:

Check if your SvelteKit version is below 2.20.6 and review server load functions for iteration over event.url.searchParams entries

Check Version:

npm list @sveltejs/kit

Verify Fix Applied:

Verify SvelteKit version is 2.20.6 or higher and test that search parameter iteration no longer allows XSS

📡 Detection & Monitoring

Log Indicators:

  • Unusual search parameter names containing script tags or JavaScript in URL logs
  • Multiple failed requests with malformed parameter names

Network Indicators:

  • HTTP requests with search parameters containing script tags or JavaScript code

SIEM Query:

url:*search* AND (url:*<script* OR url:*javascript:* OR url:*onerror=*)

🔗 References

📤 Share & Export