Cloudanix VulnDB

CVE-2026-89657

High · 7.5

CVSS

7.5

EPSS

0.6%

Published

Sep 11, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A storage server that is already trusted by the system can send bad information that crashes the computers using that storage.

Exploitation
Remote Authenticated
Attacker needs
Low Privilege
Complexity
Low
Impact
Denial Of Service
Component
OS kernel
Class
Improper Input Validation
Remediation
Patch
Effort
Medium
Patch risk
Low

What it actually does

The flaw permits a malicious authenticated Ceph OSD to supply a sparse-read reply containing non-monotonic, overlapping, or out-of-range extent offsets; the client advances its message-data cursor past the original request buffer and triggers the BUG_ON(!*length) assertion inside ceph_msg_data_next().

Why it matters to the business

Successful exploitation produces an immediate kernel panic on Ceph clients, causing unplanned downtime for any workloads that rely on Ceph-backed block, file, or object storage and requiring manual node recovery.

How an attack unfolds

An attacker who controls or has compromised an authenticated Ceph OSD constructs a sparse-read response that advertises a forward extent offset whose length matches the data supplied; the unvalidated reply reaches osd_sparse_read(), advances the cursor beyond the receive buffer, and forces the kernel into the assertion failure path.

How to fix it

Apply the upstream kernel patch that adds the sparse_extent_map_valid() check (performed in the CEPH_SPARSE_READ_DATA_LEN state) before any cursor advancement; rebuild and deploy the fixed kernel on all Ceph client nodes.

How to confirm the fix worked

Confirm the presence of the sparse_extent_map_valid() call in osd_client.c and verify that attempts to replay a crafted out-of-range extent map now return an error instead of advancing the cursor; monitor dmesg for absence of the former BUG_ON line after upgrade.

Typical attack path

  1. Gain control of an authenticated Ceph OSD (via supply-chain compromise, credential theft, or insider access)
  2. Craft a sparse-read reply whose extent map is either backward, overlapping, or extends outside the original request range
  3. Transmit the malformed reply to a vulnerable kernel Ceph client during a sparse read operation
  4. Client processes the reply without extent validation, advances the data cursor past the allocated buffer
  5. ceph_msg_data_next() hits BUG_ON and the kernel panics

How to detect it

Search kernel logs and Ceph client traces for the strings ceph_msg_data_next, osd_sparse_read, and BUG_ON triggered during sparse-read handling; correlate with OSDs that suddenly emit replies containing extent offsets far outside prior request ranges.

What your security team should do

  • Patch Ceph client kernels to the fixed version as the highest-priority action
  • Restrict OSD-to-client authentication to the minimum necessary principals and rotate keys regularly
  • Enable kernel panic and Ceph client crash logging to a central SIEM for rapid detection of exploitation attempts
  • Consider rate-limiting or isolating OSD nodes that exhibit anomalous reply patterns until patches are universally deployed

The record

In the Linux kernel, the following vulnerability has been resolved: libceph: validate OSD extent maps before cursor advance net/ceph/osd_client.c:osd_sparse_read() validates that the sparse-read data length matches the summed extent lengths, but it does not validate that each OSD-supplied extent is monotonic and lies inside the original request range. A malformed authenticated OSD reply can advertise a far-forward nonzero extent offset with a matching data length and make the client advance the message-data cursor beyond the request buffer. This reaches the BUG_ON(!*length) assertion in ceph_msg_data_next() from the client receive path. Impact: A malicious or compromised authenticated Ceph OSD peer can crash a kernel Ceph client via a malformed sparse-read reply. Reject sparse extent maps that overflow, move backwards, overlap, or extend outside the original sparse-read request before advancing the cursor. [ idryomov: perform sparse_extent_map_valid() check a bit earlier, in CEPH_SPARSE_READ_DATA_LEN instead of CEPH_SPARSE_READ_DATA_PRE state ]

Affected packages

Ecosystem Package Introduced Fixed