Skip to main content

Svelte devalue CVE-2026-92708

| EUVDEUVD-2026-83362 HIGH
Information Exposure (CWE-200)
2026-09-18 GitHub_M GHSA-j22f-vq7h-c4qm
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify public SSR page serializing a Buffer
  2. Delivery
    Send repeated unauthenticated requests
  3. Exploit
    devalue emits full shared pool in HTML
  4. Execution
    Parse leaked pool bytes from response
  5. Impact
    Recover other users' request data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK

2 techniques across 2 tactics: Collection, Discovery

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a server-side-rendered application using devalue 5.1.0-5.9.2 (e.g. SvelteKit, which bundles devalue, or Nuxt) where a publicly reachable page's load() returns a Node.js Buffer - or reads a small file that yields a Buffer - which devalue then serializes via stringify, stringifyAsync, or uneval into the rendered HTML. The leak is amplified by small Buffers because they share Node's process-wide allocation pool (Buffer.poolSize/8KB) that co-locates other requests' data; large unpooled Buffers get dedicated backing stores and leak less. Limiting factors: the app must actually serialize a raw Buffer (the documented workaround new Uint8Array(buf) or converting to Uint8Array before serialization eliminates it), the route must be reachable, and the value of leaked bytes depends on concurrent traffic placing sensitive data in the shared pool. It does NOT require authentication, user interaction, or parsing of untrusted input (parse/unflatten guards do not apply).

Impact

CVSS 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) reflects a genuine unauthenticated network-reachable confidentiality flaw, and the CVSS vector is well-supported by the source-code evidence: the pre-patch viewInfo() emits the entire backing ArrayBuffer, and for a Node Buffer that backing store is the process-wide 8KB pool (Buffer.poolSize), so up to ~64KB of unrelated process memory - including other in-flight requests' bodies and Authorization headers - can be serialized into a public HTML response. The confidentiality-only scoring (I:N/A:N) is consistent with a pure memory-disclosure primitive. No EPSS score, no CISA KEV entry, and no public exploit code are present in the input, so this is 'no public exploit identified at time of analysis' - a high-CVSS issue whose real-world exploitation is currently unproven. The practical risk is nuanced: the leak fires deterministically on every render that serializes a Buffer (no attacker interaction required to trigger it), but WHICH secret bytes land in the shared pool is opportunistic and depends on concurrent request load and allocation timing, favoring probabilistic/repeated sampling rather than reliable targeted extraction. This is a real fix-promptly issue for any SSR SvelteKit/Nuxt deployment that serializes Buffers on public routes, but the absence of KEV/EPSS/POC signals argues against imminent mass exploitation.

Exploit ScenarioDerived

An attacker repeatedly requests a public, unauthenticated SSR page whose load() returns a small Node Buffer (or reads a small file). devalue serializes the Buffer's entire shared backing pool into the page HTML, so each response may embed leftover bytes from other users' concurrent requests - such as their POST bodies or Authorization headers - which the attacker harvests across many requests. No exploit code is published, but the leak triggers automatically on every such render with no authentication.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

Serialization of Node.js Buffer objects in the JavaScript library devalue 5.1.0 through 5.9.2 leaks unrelated process memory: when stringify, stringifyAsync, or uneval encounters a Buffer, it emits the view's entire backing ArrayBuffer instead of only the visible bytes, and because small Buffers are carved from Node's process-wide shared allocation pool, the serialized output can include up to roughly 64 KB of memory belonging to other in-flight requests. Any server-side-rendered application that serializes a Buffer into HTML without authentication - a SvelteKit or Nuxt page whose load() returns a small Buffer or reads a small file - can therefore publish another user's request body or Authorization header in a public response, and the flaw triggers on every such render because it occurs during serialization rather than parsing, so the library's parse/unflatten prototype-pollution and denial-of-service guards provide no protection. Unauthenticated remote attackers need no user interaction (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N, 7.5), the affected CPE is cpe:2.3:a:sveltejs:devalue:*, and no public exploit code or confirmed active exploitation was identified at time of analysis.

RemediationAI

Vendor-released patch: devalue v5.9.3, which adds an is_buffer() check that copies Buffer bytes into an exact-sized Uint8Array before serialization; upgrade to 5.9.3 or later and redeploy the SSR application (see the advisory at https://github.com/sveltejs/devalue/security/advisories/GHSA-j22f-vq7h-c4qm, the fix commit at https://github.com/sveltejs/devalue/commit/46dc877b3570dafb1cd3291b9bb48cecef8f7266, and the release at https://github.com/sveltejs/devalue/releases/tag/v5.9.3). If upgrading cannot be done immediately, the documented workaround is to never hand a raw Buffer to the serializer: convert it with new Uint8Array(buf), which copies the visible bytes into an independent, exact-sized store; note that copy() incurs one allocation plus a memcpy per Buffer and defeats zero-copy hot paths, so apply it at the load()/data-preparation boundary rather than on every render. Beware that passing buf.buffer explicitly, or wrapping a Buffer's backing store in an ordinary typed array or DataView, cannot be recognized as a Buffer by the library and still discloses the shared pool - for those cases build the copy manually with new Uint8Array(new Uint8Array(view.buffer, view.byteOffset, view.byteLength)). Because the flaw fires during serialization rather than parsing, the parse/unflatten prototype-pollution and DoS guards do not mitigate it and disabling parsing features will not help; if neither patching nor Buffer conversion is feasible, the only structural compensating control is to stop returning binary data from server-side load() functions on publicly reachable routes where the returned bytes could land in Node's shared Buffer pool - for example read and encode file contents to base64 or a plain string, at the cost of added encoding overhead and temporary duplicate memory use - and to audit response bodies for binary blobs as a detection measure until the upgrade lands.

Affected VersionsENISA

devalue 5.1.0, < 5.9.3

Affected Packages

npm devalue fix: 5.9.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The affected technology is devalue, a JavaScript serialization library used where JSON.stringify is insufficient; it must represent typed arrays, DataView objects, and binary views and does so through an internal viewInfo()/walk() path in src/operations.js and src/uneval.js. The root cause class is CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor): the default viewInfo() captured buffer, byteOffset, byteLength, length, and bufferByteLength directly from a view and then serialized the whole backing ArrayBuffer, which is correct-by-design for ordinary typed arrays and DataView instances (it preserves shared views and non-zero byte offsets) but catastrophic for Node.js Buffer objects. Node allocates small Buffers from a shared pool (Buffer.poolSize, 8 KB per pool) rather than giving each Buffer a dedicated ArrayBuffer, so a three-byte Buffer can carry an 8192-byte backing store that is physically adjacent to and interleaved with bytes written for unrelated concurrent requests - the source code's own regression test asserts value.buffer.byteLength > value.byteLength for Buffer.from, Buffer.allocUnsafe, Buffer.concat, Buffer.slice, Buffer.subarray, and vm-context-created Buffers. The patch introduces an is_buffer() helper (typeof Buffer !== 'undefined' && Buffer.isBuffer(thing)) and, when a Buffer is detected, replaces it with new Uint8Array(view) so only the visible bytes are copied into an exactly sized, byteOffset-0 backing store; uneval additionally stops walking/hoisting a Buffer's backing store so the shared pool is never visited. The disclosure fires during server-side rendering, upstream of parsing, which is why the parse/unflatten guards against prototype pollution and DoS are irrelevant to this issue - those guards only constrain untrusted input coming back in, not sensitive bytes going out. Downstream, SvelteKit bundles devalue and Nuxt consumes it, so any SSR route that hands a raw Buffer to the serializer inherits the exposure; large, unpooled Buffers get their own backing store and leak comparatively little, meaning small Buffers are the highest-signal carriers.

Know when Devalue gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 7.5 HIGH

Remote unauthenticated request to a public SSR page triggers deterministic serialization of process memory (C:H); no integrity or availability impact, app-confined scope.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
SUSE HIGH
Red Hat 7.5 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Sep 18, 2026 - 21:18 EUVD
CVE Published
Sep 18, 2026 - 19:54 cve.org
HIGH 7.5

DescriptionCVE.org

Svelte devalue is a JavaScript library that serializes values into strings when JSON.stringify isn't sufficient for the job. In versions 5.1.0 through 5.9.2, stringify and uneval functions serialize a typed array by emitting its entire backing ArrayBuffer rather than only the view, so serializing a Node Buffer, whose backing store is a process-wide shared pool, discloses up to 64 KB of unrelated process memory, including bytes from other in-flight requests. In a server-side-rendered framework such as SvelteKit or Nuxt, a public page whose load() returns a small Buffer, or that reads a small file, can therefore ship another user's request body or Authorization header in its HTML without authentication. Because this occurs during serialization, it fires on every such render and is not mitigated by the parse/unflatten prototype-pollution and denial-of-service guards, which only apply when parsing untrusted input. As a workaround, convert Node Buffer objects to Uint8Array before serialization. This issue has been fixed in version 5.9.3.

Technical POC Analysis

Bug class: CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor), additionally classified CWE-226 (Sensitive Information in Resource Not Removed Before Reuse).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

The JavaScript serialization library devalue, versions 5.1.0 through 5.9.2 as bundled into server-rendered SvelteKit and Nuxt applications, can embed up to roughly 64 KB of unrelated process memory into publicly served HTML whenever a Buffer is serialized, potentially exposing other users' request bodies and Authorization headers in a public response. The flaw triggers on every affected page render and requires no user interaction, making this a cross-tenant confidentiality failure in internet-facing code rather than a narrow edge case. Leadership should care because customer data and session credentials may already be leaking silently, and no vendor patch is available today, so mitigation depends on engineering action this week.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: convert Buffer values to base64/hex strings or explicit byte copies before serialization; avoid serializing Buffer objects in SSR load() functions and other server-rendered paths; exclude sensitive fields (request bodies, Authorization headers, tokens) from any serialized output; disable or shorten caching of affected responses and purge existing caches; and restrict or add authentication and rate limiting to affected endpoints while monitoring logs for anomalous response sizes.

Threat Intelligence Overview

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Medium
devalue is a core SvelteKit dependency; popular but SSR-Buffer pattern is specific
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Module for Python 3 15 SP7 Affected
SUSE Linux Enterprise Server 15 SP7 Affected
SUSE Linux Enterprise Server for SAP Applications 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy