SvelteKit February–July 2026 advisory backfill — nine vendor advisories (three CVSS 8.7 remote-function DoS bugs, a cross-user query.batch data leak, a BODY_SIZE_LIMIT bypass, a ReDoS) that got CVE numbers only on 2026-08-28
TL;DR
Between 2026-02-18 and 2026-07-29 the SvelteKit team published nine security advisories on its own GitHub advisory tab — none announced on the Svelte blog, unlike the January batch this repo already tracks. Six of them received CVE ids from VulnCheck (as CNA) on 2026-08-28, and NVD scores three of the remote-function denial-of-service bugs at CVSS 4.0 8.7 (High) where the vendor labelled them Moderate or Low. One more, a cross-user data leak in query.batch (CVE-2026-82258), is the only confidentiality issue in the set. Everything is fixed: @sveltejs/kit ≥ 2.70.2 closes all nine. If you upgraded after the January CVEs and stopped, you are still on a vulnerable line.
What happened
This repo's January 2026 Svelte batch covered five CVEs the Svelte team announced in a blog post, including CVE-2026-22803 (memory-amplification DoS in the experimental Remote Functions binary form deserializer, fixed 2.49.5). The vendor kept finding bugs in the same deserializer and kept publishing advisories — but only on github.com/sveltejs/kit/security/advisories, with no blog post, and (for most) no CVE at the time. VulnCheck assigned CVEs to six of them in one go on 2026-08-28, which is when they surfaced in this sweep's advisory-database query. Per this repo's standing rule, they are dated here by the vendor's original publication date, not the CVE date.
| Vendor advisory (original date) | CVE (assigned) | Vendor label | NVD score | Affected @sveltejs/kit |
Fixed |
|---|---|---|---|---|---|
| GHSA-vrhm-gvg7-fpcf (2026-02-18) — memory exhaustion in remote form deserialization | CVE-2026-82260 (2026-08-28) | Moderate | 8.7 High | ≥ 2.49.0, ≤ 2.52.1 | 2.52.2 |
| GHSA-88qp-p4qg-rqm6 (2026-02-18) — CPU exhaustion in remote form deserialization | CVE-2026-82261 (2026-08-28) | Moderate | 8.7 High | ≥ 2.49.0, ≤ 2.52.1 | 2.52.2 |
| GHSA-fpg4-jhqr-589c (2026-02-26) — deserialization expansion in unvalidated form remote function | CVE-2026-82259 (2026-08-28) | Low | 8.7 High | 2.49.0 – 2.53.2 | 2.53.3 |
GHSA-2crg-3p73-43xp (2026-04-09) — BODY_SIZE_LIMIT bypass on adapter-node |
CVE-2026-40073 (2026-04-10) | Moderate 6.3 | 8.2 High | ≤ 2.57.0 (adapter-node deployments) | 2.57.1 |
GHSA-3f6h-2hrp-w5wx (2026-04-09) — unvalidated redirect() in handle hook throws unhandled TypeError |
CVE-2026-40074 | Moderate 6.3 | — | ≤ 2.57.0 | 2.57.1 |
GHSA-hgv7-v322-mmgr (2026-05-14) — query.batch cross-talk |
CVE-2026-82258 (2026-08-28) | Moderate 5.9 | 5.9 Medium | ≥ 2.38.0, ≤ 2.60.0 | 2.60.1 |
| GHSA-wqjv-9729-c5q2 (2026-07-02) — big remote form payloads crash the Node process | CVE-2026-82256 (2026-08-28) | Moderate | 6.9 Medium | < 2.69.1 | 2.69.1 |
| GHSA-866w-xmhq-wj7x (2026-07-02) — prototype pollution in file-input deletion path | CVE-2026-82257 (2026-08-28) | Moderate | 5.3 Medium | < 2.69.1 | 2.69.1 |
GHSA-29g2-3rmr-qm68 (2026-07-29) — ReDoS in content-negotiation Accept header parsing |
CVE-2026-66062 | Moderate 5.3 | — | < 2.70.1 (page states patched 2.70.2) | 2.70.2 |
Details worth knowing:
- The three 8.7s are all the same feature.
experimental.remoteFunctionswith theformremote function deserialises attacker-supplied form data; malformed input exhausts memory (82260), CPU (82261), or — if the app processes thefilesarray without validatingfiles.lengthor per-file size — expands a small request into a very large file array (82259). Only apps that opted into the experimental feature are exposed, but that is exactly the feature SvelteKit's own docs push for new apps, and the fix version moved three times (2.49.5 → 2.52.2 → 2.53.3) as new variants were found. query.batchcross-talk is a data leak, not a DoS. Under specific timing, concurrent requests from different users could be merged into one request context, so one user could see another's data. Reported by rafabd1; fixed in 2.60.1. If you usequery.batch()on anything user-scoped, this is the one to check logs for.BODY_SIZE_LIMITbypass lets requests exceed the configured body limit on adapter-node deployments. The vendor's own note: limits enforced at a WAF, gateway or platform layer are unaffected — so this matters most for the "one Node process on a VPS" deployments vibe-coding platforms emit.- Severity disagreement, again. The vendor labelled 82259 Low and 82260/82261 Moderate; VulnCheck scored all three 8.7 and NVD carries that. This repo's standing rule (prefer the numeric score when a vendor's qualitative label and a CNA's CVSS disagree) is why this advisory is
high. - Two GHSA ids per CVE. For 82259/82260/82261 the vendor-repo advisories (GHSA-fpg4-jhqr-589c, GHSA-vrhm-gvg7-fpcf, GHSA-88qp-p4qg-rqm6) and the GitHub Advisory Database's separate, "unreviewed" VulnCheck-sourced entries (GHSA-7jhg-723h-fjhx, GHSA-33c7-c62f-7cc2, GHSA-xjpx-7387-jh7h) carry different ids for the same bugs. Grep for the CVE, not the GHSA.
- No Svelte blog post. svelte.dev/blog has no security post between the January CVE roundup and 2026-09-14; the August and September posts are the SvelteKit 3 release candidate and a "what's new." The advisory tab is the only vendor record.
Am I affected?
npm ls @sveltejs/kit @sveltejs/adapter-node 2>/dev/null
grep -rn 'remoteFunctions' svelte.config.* 2>/dev/null # experimental feature on?
grep -rn 'query.batch' src/ 2>/dev/null # cross-user leak surface
@sveltejs/kit< 2.70.2 → affected by at least one item above. 2.52.2 / 2.53.3 / 2.57.1 / 2.60.1 / 2.69.1 / 2.70.2 are the successive fix lines; the last covers everything.- Apps that never enabled
experimental.remoteFunctionsare not exposed to the three 8.7s or the two 2.69.1 items, but are still exposed to theBODY_SIZE_LIMITbypass (adapter-node), theredirect()DoS, thequery.batchleak and the ReDoS.
If you are affected
npm install @sveltejs/kit@latest(≥ 2.70.2) and redeploy; if you are on the SvelteKit 3 release candidate, confirm it is at or past the equivalent fixes before assuming.- If you use
query.batch()with per-user data and ran ≥ 2.38.0 < 2.60.1 in production, review access logs for the affected window; this is the one item with a confidentiality impact. - Add
files.lengthand per-file size validation to anyformremote function regardless of version — the fix caps the deserializer, not your handler. - → playbooks/if-your-webapp-was-compromised.md if you find evidence of exploitation.
Prevention
→ prevention/supply-chain-attack-surface.md
→ Watch github.com/sveltejs/kit/security/advisories directly. The January batch got a blog post; the next nine advisories did not, and six of them had no CVE for up to six months — a CVE-driven scanner would have shown a clean bill for the whole period.
Sources
- sveltejs/kit — Security Advisories index — fetched 2026-09-14: the nine advisories with the vendor's original publication dates and severity labels.
- GHSA-3f6h-2hrp-w5wx (CVE-2026-40074), GHSA-2crg-3p73-43xp (CVE-2026-40073), GHSA-hgv7-v322-mmgr, GHSA-29g2-3rmr-qm68 (CVE-2026-66062) — vendor advisory pages fetched 2026-09-14: descriptions, vendor CVSS, affected/patched versions, credits.
- GitHub Advisory Database — GHSA-7jhg-723h-fjhx (CVE-2026-82259), GHSA-33c7-c62f-7cc2 (CVE-2026-82260), GHSA-xjpx-7387-jh7h (CVE-2026-82261) — fetched 2026-09-14: the VulnCheck-sourced database entries, CVSS 8.7, affected/fixed ranges, 2026-08-28 database dates.
- NVD API records, fetched 2026-09-14: CVE-2026-82256, CVE-2026-82257, CVE-2026-82258, CVE-2026-82259, CVE-2026-82260, CVE-2026-82261, CVE-2026-40073 — CNA (VulnCheck for the 8225x/8226x series, GitHub for 40073), publication dates, CVSS 4.0 scores, affected-range text.
- npm registry —
@sveltejs/kit— queried 2026-09-14 (npm view @sveltejs/kit time): 2.52.2 (2026-02-18), 2.53.3 (2026-02-26), 2.57.1 (2026-04-09) — release dates match the vendor advisory dates. - Svelte blog index — fetched 2026-09-14: confirms no security post covering these advisories.