ZeroHour

CVE-2026-89657

large

DoS in Linux Kernel Ceph Client via Malformed OSD Sparse-Read Reply

CVSS 3.1
7.5 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's libceph sparse-read path (osd_sparse_read() in net/ceph/osd_client.c) validated that the total sparse-read data length matched the summed extent lengths, but did not check that each OSD-supplied extent was monotonic and lay inside the original request range. A malformed yet properly authenticated sparse-read reply from a malicious or compromised Ceph OSD can advertise a far-forward extent offset with a matching data length, pushing the client's message-data cursor past the request buffer and tripping the BUG_ON(!*length) assertion in ceph_msg_data_next(), crashing the kernel client. The impact is availability only (kernel client crash/DoS, CVSS 3.1 7.5 with A:H and no C/I impact), and although the CVSS vector scores it PR:N, exploitation realistically requires control of an authenticated OSD peer — i.e., a compromised OSD host or malicious actor inside the cluster's trust boundary. Affected systems are hosts running Linux kernels with libceph sparse-read support that use kernel RBD block devices or CephFS kernel mounts against a Ceph cluster. No public PoC or in-the-wild exploitation is known, and the flaw is not listed in CISA's KEV catalog.

What to do: Apply a kernel update containing the fix — rejection of sparse extent maps that overflow, move backwards, overlap, or extend beyond the original sparse-read request — as soon as your distribution ships it. Until patched, consider routing affected workloads through userspace Ceph clients (librbd via QEMU, ceph-fuse) instead of kernel RBD mappings or CephFS kernel mounts, and harden the cluster itself (restrict Ceph/ms network access, enforce cephx and messenger encryption, monitor OSD hosts) since exploitation requires a malicious or compromised authenticated OSD. Watch kernel logs on Ceph client hosts for BUG_ON/panic traces through ceph_msg_data_next()/osd_sparse_read() as evidence of attempted triggering.

Affected
Linux kernel (libceph, net/ceph/osd_client.c osd_sparse_read sparse-read handling)
Estimated exposure
large≈10,000–100,000 kernel Ceph client hosts worldwide (order 10^4–10^5); effectively zero internet-exposed clients — Kernel RBD and CephFS clients run on compute and storage nodes across OpenStack, HPC, and private-cloud Ceph deployments, but they sit on private cluster networks and the attack additionally requires a trusted authenticated OSD peer, so…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

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 ]

Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

In the news

No ingested article mentions this CVE yet.