Skip to main content

lib0 EUVDEUVD-2026-88820

| CVE-2026-102521 HIGH
Out-of-bounds Read (CWE-125)
2026-09-29 GitHub_M
8.6
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Send crafted encoded payload to decoder
  2. Delivery
    Decoder builds view past its bounds
  3. Exploit
    Out-of-bounds read into adjacent heap
  4. Execution
    Leaked process memory returned to attacker
  5. Impact
    Harvest 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

lib0 ≤ 0.2.118

Affected Packages

euvd lib0 no fix

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

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

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).

3.1 AV:N/AC:L/PR:N/UI:N/S:C/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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 84% exploitable
Prevalence
High
core low-level utility library behind Yjs CRDT, heavy npm usage in collaborative apps
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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 No
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

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

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.

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