Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend crafted encoded payload to decoder
-
DeliveryDecoder builds view past its bounds
-
ExploitOut-of-bounds read into adjacent heap
-
ExecutionLeaked process memory returned to attacker
-
ImpactHarvest credentials or log fragments
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, read limits
MITRE ATT&CK
1 technique across 1 tactic: Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an application that uses lib0's decoder (directly, or transitively via Yjs) to decode attacker-supplied binary/serialized input, where the decoder's backing Uint8Array is a view onto a larger ArrayBuffer - notably Node's shared/pooled Buffer produced by base64 decoding (fromBase64Node) or any subarray/sliced view. The over-read paths are the decoder view constructions in readFromDataView / readUint8Array / peekVarString that built new Uint8Array(arr.buffer, ...) / new DataView(arr.buffer, ...) without bounding to arr's own length. Limiting factors: the leaked bytes are whatever is adjacent in the pooled/backing buffer (opportunistic, not attacker-selected), the decoded output must be observable/returned to the attacker to exfiltrate the leak, and the target must run a version before 0.2.119; there is no code-execution or integrity/availability impact. |
| Impact | This is a genuine priority, not high-CVSS noise, though the impact class is disclosure rather than code execution. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N = 8.6) describes a network-reachable, low-complexity, unauthenticated flaw with a scope change and high confidentiality impact, and that is consistent with the mechanism: lib0's decoder processes untrusted serialized input and can be made to read past its view into adjacent process heap memory. Signals are mixed on likelihood: there is no CISA KEV listing and no EPSS score supplied, and the references are only a vendor GitHub Security Advisory (GHSA-g75x-89c3-rvmr) and the fix commit - no weaponized proof-of-concept is provided (the diff includes a regression test that demonstrates the bounds failure, but that is not a public exploit). The confidentiality rating is also opportunistic: an attacker leaks whatever bytes happen to be adjacent (potentially credentials or logs, per the advisory) rather than arbitrarily chosen memory, so real-world value per attempt varies. Net: elevated priority because lib0 is a very widely pulled dependency (chiefly via Yjs) and the trigger is default decoder behavior, tempered by the absence of active-exploitation or POC evidence and the read-only, opportunistic nature of the leak. |
| Exploit ScenarioDerived | An attacker sends crafted serialized/encoded data to an application that deserializes untrusted input with lib0's decoder (for example a Yjs-based real-time collaboration backend accepting sync/update messages, or any service base64-decoding attacker data via lib0). Because the decoder builds a view onto the underlying (possibly Node-pooled) ArrayBuffer without bounding it to its own view, a length that exceeds the intended view causes the decoder to return adjacent process memory in the decoded output. No public exploit code is identified at time of analysis, though the fix commit ships a regression test that reproduces the out-of-bounds read. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 29, 2026
An out-of-bounds read in lib0's binary decoder before version 0.2.119 lets remote attackers who control serialized input cause the decoder to return bytes from outside the intended buffer view, exposing adjacent process memory that may contain credentials, tokens, or log data. The flaw is unauthenticated and remotely reachable (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N, 8.6) because any application that decodes attacker-supplied data with lib0 - directly or transitively through Yjs - can be driven into the over-read; the leaked bytes are opportunistic contents of the backing/pooled ArrayBuffer rather than attacker-selected addresses. There is no public exploit identified at time of analysis and no confirmed active exploitation (CISA KEV), and the impact is limited to confidentiality with no integrity or availability effect; the vendor has published a fix in lib0 0.2.119.
RemediationAI
Upgrade lib0 to 0.2.119 or later - the vendor advisory (https://github.com/dmonad/lib0/security/advisories/GHSA-g75x-89c3-rvmr) identifies 0.2.119 as the fixed release, and the fix is visible in upstream commit 49383f2716283b90059dbfe01e110c0ab7ef5592, which introduces bounds-checked subarray/subdataview helpers and stops base64 decoding from returning a view onto Node's shared Buffer pool. Because lib0 is pulled in transitively by Yjs and similar CRDT libraries, run npm ls lib0 (or your lockfile equivalent) to confirm the resolved version across the dependency tree and refresh locks rather than patching only the direct dependency. If immediate upgrade is not possible, apply compensating controls that break the over-read precondition: wrap untrusted payloads in a freshly-allocated Uint8Array copy with byteOffset = 0 and buffer.byteLength = length before handing them to createDecoder, since the leak only manifests when the decoder's array is a view onto a larger/pooled backing buffer (trade-off: an extra copy per message and added memory churn); reject or re-encode inputs that arrive via base64 onto a pooled Buffer, and validate declared length prefixes against the actual remaining byte count before decoding (trade-off: strict validation may reject legitimate streams that rely on lenient trailing-data handling). Limit exposure further by ensuring decoder output is not echoed back to untrusted clients, since exfiltration requires the crafted result to be observable by the attacker, and by running the decoding service in an isolated process with minimal in-heap secrets, acknowledging that pooled buffers can still contain tenants' data within the same process. Post-upgrade, run the view-bounds regression tests added in the commit (testDecodingViewBounds, testFromBase64OwnsBuffer) to verify behavior.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
lib0 is the low-level binary encoding/decoding utility library used by the Yjs CRDT ecosystem to serialize and transmit documents, updates, and arbitrary typed data over the wire. The root cause is CWE-125 (Out-of-Bounds Read) arising from how decoder views are constructed: readFromDataView, readUint8Array, and peekVarString created views with new Uint8Array(decoder.arr.buffer, ...) and new DataView(decoder.arr.buffer, ...) using the *backing* ArrayBuffer plus offsets, without clamping the requested range to decoder.arr.length. When decoder.arr is itself a view onto a larger ArrayBuffer - most notably a Node Buffer produced by base64 decoding, since Node allocates small Buffers out of a shared/also-pooled ArrayBuffer via fromBase64Node - a legitimate-looking length field causes the decoder to return bytes that lie beyond the logical view, i.e. unrelated memory from the same pool. The upstream fix adds private subarray/subdataview helpers that throw errorUnexpectedEndOfArray when begin < 0, len < 0, or begin + len > arr.length, routes readFromDataView/readUint8Array/peekVarString through them, and changes fromBase64Node to return new Uint8Array(Buffer.from(s, 'base64')) so decoded results own their ArrayBuffer instead of aliasing Node's shared pool. The affiliated advisory notes this is similar to, but distinct from, GHSA-r5c8-rf4w-qrq8, indicating a related family of view-bounds issues.
Know when Lib0 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
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
Untrusted network-supplied input reaches the decoder with no auth or interaction (AV:N/AC:L/PR:N/UI:N); reading memory outside the intended buffer view crosses a security boundary (S:C) yielding confidentiality-only impact (C:H, I:N, A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
The decoder in readFromDataView in lib0 before 0.2.119 can be tricked into reading more than it should from a buffer. The vulnerability allows reading past the decoders' view, thus exposing adjacent process memory. This can be anything that is currently in the head, for example credentials or logs. This is similar to but different from GHSA-r5c8-rf4w-qrq8.
Technical POC Analysis
CWE-125 (out-of-bounds read) - note the GitHub advisory itself lists "Weaknesses: No CWEs"; the CWE-125 classification comes from the CVE description, not the advisory body.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity out-of-bounds read in lib0, a library used by Yjs and other real-time collaboration frameworks, allows unauthenticated remote attackers to leak process memory contents-including credentials, tokens, or logs-by supplying malicious serialized data. Organizations running applications that decode untrusted input with lib0 or Yjs are exposed to confidentiality breaches that could enable lateral movement or data exfiltration. Leadership should prioritize upgrading to lib0 0.2.119 and inventory all internet-facing services that handle untrusted serialized data.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-88820
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB