CVE-2026-68160 in Linux
Riassunto
di VulDB • 10/08/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
ceph: correzione della lettura fuori dai limiti prima dell'autenticazione su snaptrace in ceph_handle_caps()
ceph_handle_caps() legge snap_trace_len dall'intestazione ceph_mds_caps nel formato wire e lo utilizza incondizionatamente per costruire un puntatore di fine fittizio (snaptrace + snaptrace_len) che viene successivamente passato a ceph_update_snap_trace() nel caso CEPH_CAP_OP_IMPORT:
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)) { ... }
Successivamente, ceph_update_snap_trace() decodifica una struct ceph_mds_snap_realm da snaptrace utilizzando ceph_decode_need(&p, e, sizeof(*ri), bad) con il puntatore di fine fittizio fornito dall'attaccante e == snaptrace + snaptrace_len. Con snaptrace_len == 0xFFFFFFFF, il controllo dei limiti è soddisfatto trivialmente; ri = p legge sizeof(struct ceph_mds_snap_realm) byte oltre il buffer msg->front legittimo, e i valori di ri->num_snaps / ri->num_prior_parent_snaps guidano ulteriori letture fuori dai limiti degli array snap codificati.
Gli undici blocchi decoder per msg_version >= 2 .. msg_version >= 12 sopra lo switch dell'operazione intercettano ciascuno questa OOB (Out-Of-Bounds) attraverso i loro helper ceph_decode_*_safe() / ceph_decode_need(), ma sono posizionati dietro un if condizionato da hdr.version; pertanto, un MDS malizioso o compromesso che imposta msg->hdr.version = 1 raggiunge il percorso IMPORT senza alcun decoder condizionato dalla versione che abbia convalidato snap_trace_len. Questa condizione è presente sin dall'introduzione di ceph_handle_caps().
Convalidare snap_trace_len rispetto al buffer front del messaggio prima di consumarlo, utilizzando l'helper canonico ceph_decode_need() / ceph_has_room(). L'helper limita la lunghezza mediante sottrazione (n <= end - p, protetto da end >= p) anziché tramite aggiunta di puntatori, risultando quindi sicuro contro i wrap-around per le lunghezze u32 controllate dall'attaccante nelle build a 32 bit dove p + snap_trace_len potrebbe causare un overflow dello spazio degli indirizzi. Questo approccio è coerente con il resto del percorso di decodifica ceph (ad esempio, il controllo pool_ns_len poche righe sotto) e la gestione dell'errore goto bad esistente copre già questo percorso di uscita.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.