CVE-2026-89651
Critical · 9.8CVSS
9.8
EPSS
0.6%
Published
Sep 11, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel's Ceph client code can let a malicious server crash client machines simply by sending a specially crafted message when the client first connects.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
Missing bounds check before ceph_decode_copy allows an oversized length field in MDSCapAuth match.path or match.fs_name records to trigger a slab-out-of-bounds read of up to 4 GiB past the dedicated message-front allocation in handle_session().
Why it matters to the business
Linux Ceph clients can be forced offline during initial mount by a malicious or compromised MDS, causing immediate service interruption and potential data-access loss for any workloads relying on Ceph filesystems.
How an attack unfolds
An attacker operating a malicious Ceph MDS sends a CEPH_SESSION_OPEN message (msg_version >= 6) containing MDSCapAuth records whose match.path or match.fs_name length fields exceed remaining message bytes; the client performs the unchecked copy on first post-connect message, resulting in an out-of-bounds read that crashes the kernel client.
How to fix it
Upgrade the Linux kernel to a version containing the commit that replaces ceph_decode_copy with ceph_decode_copy_safe for the two affected fields; rebuild and reboot all Ceph client nodes.
How to confirm the fix worked
Confirm the patch is present by inspecting the ceph_decode_copy_safe calls in fs/ceph/mds_client.c around handle_session(); recompile with KASAN and attempt mount against a test MDS that sends maximum-length fields to verify no out-of-bounds access occurs.
Typical attack path
- Attacker positions a malicious or compromised MDS reachable by the target client.
- Client initiates mount and establishes TCP connection to the MDS.
- MDS replies with a crafted CEPH_SESSION_OPEN message carrying oversized length values.
- handle_session() decodes the record without ceph_decode_need, invoking ceph_decode_copy on attacker-controlled lengths.
- Kernel performs slab-out-of-bounds read, triggering KASAN report or immediate crash.
How to detect it
Inspect kernel logs and dmesg for "slab-out-of-bounds read" or "handle_session" stack traces immediately after Ceph mount attempts; correlate with Ceph MDS connection events from auditd or system call tracing.
What your security team should do
- Prioritize kernel upgrades on all Ceph clients within the next maintenance window given the 43-day publication window and network-reachable attack vector.
- Restrict Ceph client connectivity to only trusted MDS endpoints using network ACLs or mutual authentication.
- Enable kernel crash-dump collection and monitor for slab-out-of-bounds read signatures in dmesg or kernel logs.
- Test the patched kernel in a staging Ceph cluster before broad rollout.
The record
In the Linux kernel, the following vulnerability has been resolved: ceph: bound MDSCapAuth path and fs_name decode in handle_session() handle_session() decodes the MDSCapAuth records carried by a CEPH_SESSION_OPEN message (msg_version >= 6). For each record the match.path and match.fs_name byte strings are read by first decoding a 32-bit length and then copying that many bytes with the bare ceph_decode_copy(). Unlike the surrounding fields, which all use the _safe decode variants, these two copies are not preceded by a ceph_decode_need() bounds check, and the enclosing MDSCapAuth and MDSCapMatch struct_len fields are skipped rather than enforced as an upper bound. A length larger than the bytes remaining in the message front makes ceph_decode_copy() read past the end of the front buffer. The message front is a dedicated allocation (ceph_msg_new2() -> kvmalloc), so the over-read runs off that object. A malicious or compromised MDS can trigger this with the first post-connect message on mount, with no client-side user interaction; under KASAN it is reported as a slab-out-of-bounds read in handle_session(). Impact: a malicious MDS can force the kernel client to read up to 4 GiB past the message front allocation during session setup, crashing the client (out-of-bounds read). Switch both copies to ceph_decode_copy_safe(), which performs the ceph_decode_need() bounds check before the copy and branches to the existing bad label, matching the rest of the decoder and the error path that frees the partially decoded cap_auths array.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|