Sceawere
Vulnerability Detail
CVE-2026-89651UPDATED Verified Sceawere Triage Sources: NVD / CISA KEV
Linux Kernel Ceph Out-of-Bounds Read
Vulnerability Metadata
- Severity
- Critical
- Score / CVSS
- 9.8
- Creation Date
- 1d ago
- Vendor
- Linux
- Product
- Linux
- Attack Type
- N/A
- Vector String
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Attack Complexity
- LOW
Narrative and Response
Description
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.
Executive Summary
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Technical Details
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Mitigations
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
References
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Additional Metadata
{
"score": "9.8",
"pubDate": "2026-09-11T20:19:51.150Z",
"pubdate": "2026-09-11T20:19:51.150Z",
"executiveSummary": "The vulnerability is an out-of-bounds (OOB) memory read within the Linux kernel's Ceph filesystem client, specifically located in the handle_session() function.\nThe issue stems from insufficient bounds checking when processing MDSCapAuth records within CEPH_SESSION_OPEN messages.\nA malicious or compromised Metadata Server (MDS) can exploit this by sending a crafted message containing arbitrarily large length fields, forcing the client to perform an out-of-bounds read up to 4 GiB past the designated message front buffer.\nThis vulnerability is critical because it can be triggered during the initial mount process without any local user interaction, potentially leading to a kernel panic and a total denial-of-service (DoS) of the client system.\nKASAN instrumentation confirms the slab-out-of-bounds condition. The primary risk is unauthorized information disclosure or system instability caused by the forced memory over-read.\nSuccessful exploitation requires the client to connect to a malicious MDS, making this a remote attack vector targeting the network-facing Ceph client implementation.",
"technicalDetails": "The vulnerability exists in the handle_session() function of the Ceph kernel client, responsible for processing session initialization. When a CEPH_SESSION_OPEN message (with version >= 6) is received, the kernel parses multiple MDSCapAuth records.\nWithin these records, the match.path and match.fs_name fields are encoded as byte strings prefixed by a 32-bit length field. The implementation erroneously uses ceph_decode_copy() to copy these strings into local buffers without first validating the length field against the remaining bytes in the message front buffer.\nThe root cause is the failure to utilize 'safe' decoding variants that incorporate ceph_decode_need() bounds checking. Furthermore, the logic skips validation of the MDSCapAuth and MDSCapMatch structure lengths, allowing an attacker to provide length values that significantly exceed the actual data provided in the packet.\nThe attack flow begins when the Linux kernel client initiates a connection to a Ceph cluster. A malicious MDS intercepts this or acts as a rogue server, sending a crafted CEPH_SESSION_OPEN message. The attacker sets the length fields for match.path or match.fs_name to an extreme value (up to 4 GiB). Because the kernel allocates the message front buffer via kvmalloc and performs a direct, unchecked copy, it reads memory addresses beyond the object boundary. This results in a slab-out-of-bounds read error as detected by KASAN.\nSince the handle_session() function does not enforce an upper bound on these specific fields, the attacker can force the kernel to access unauthorized memory segments. This leads to an immediate kernel crash or potential leak of sensitive data residing in adjacent memory slabs. The vulnerability is particularly dangerous as it is reachable during the early mount phase, circumventing standard user-level access controls.\nThe remediation involves transitioning the code to use ceph_decode_copy_safe(), which integrates the necessary ceph_decode_need() calls. This ensures that any attempt to decode a string longer than the available buffer space triggers the predefined error handling path, which properly tears down the session and frees associated resources, thereby preventing the out-of-bounds access."
}