CVE-2026-68160 in Linux
Zusammenfassung
von VulDB • 10.08.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
ceph: Behebung eines Out-of-Bounds-Lesezugriffs vor der Authentifizierung auf snaptrace in ceph_handle_caps()
ceph_handle_caps() liest snap_trace_len aus dem im Netzwerkformat (Wire-Format) codierten Header ceph_mds_caps und verwendet diesen bedingungslos, um einen falschen Endzeiger zu konstruieren (snaptrace + snaptrace_len), der später im Fall CEPH_CAP_OP_IMPORT an ceph_update_snap_trace() übergeben wird:
snaptrace = h + 1; snaptrace_len = le32_to_cpu(h->snap_trace_len); p = snaptrace + snaptrace_len; ... case CEPH_CAP_OP_IMPORT: if (snaptrace_len) {
... if (ceph_update_snap_trace(mdsc, snaptrace, snaptrace + snaptrace_len, false, &realm)) { ... }
ceph_update_snap_trace() dekodiert daraufhin eine struct ceph_mds_snap_realm aus snaptrace unter Verwendung von ceph_decode_need(&p, e, sizeof(*ri), bad) mit dem vom Angreifer bereitgestellten falschen Endzeiger e == snaptrace + snaptrace_len. Bei einem Wert von snaptrace_len == 0xFFFFFFFF wird die Bereichsprüfung trivial erfüllt; ri = p liest sizeof(struct ceph_mds_snap_realm) Bytes hinter den gültigen msg->front-Puffer hinaus, und ri->num_snaps / ri->num_prior_parent_snaps lösen anschließend weitere Out-of-Bounds-Lesezugriffe auf die kodierten snap-Arrays aus.
Die elf Decoderblöcke für msg_version >= 2 .. msg_version >= 12 oberhalb des op-Switches fangen diesen OOB-Fehler jeweils über ihre Hilfsfunktionen ceph_decode_*_safe() / ceph_decode_need() ab, befinden sich jedoch hinter einer durch hdr.version gesteuerten if-Bedingung. Daher erreicht ein böswilliger oder kompromittierter MDS (Metadata Server), der msg->hdr.version = 1 setzt, den IMPORT-Pfad ohne dass eine versiongesteuerte Decodierung snap_trace_len validiert hat. Diese Konstellation besteht seit der Einführung von ceph_handle_caps().
Validieren Sie snap_trace_len gegen den front-Puffer der Nachricht vor dessen Verarbeitung unter Verwendung der kanonischen Hilfsfunktionen ceph_decode_need() / ceph_has_room(). Die Hilfsfunktion begrenzt die Länge durch Subtraktion (n <= end - p, geschützt durch end >= p) anstelle von Zeigeraddition, wodurch sie bei 32-Bit-Kompilierungen wrap-safe ist, in denen p + snap_trace_len den Adressraum überlaufen könnte. Dies entspricht dem Rest des ceph-Dekodierungspfads (z. B. die pool_ns_len-Prüfung einige Zeilen weiter unten), und das vorhandene goto bad-Cleanup deckt diesen Exit-Pfad bereits ab.
If you want to get best quality of vulnerability data, you may have to visit VulDB.