Descripción
En el Linux kernel se ha resuelto la siguiente vulnerabilidad: ceph: bound MDSCapAuth path and fs_name decode in handle_session() handle_session() decodifica los registros MDSCapAuth transportados por un mensaje CEPH_SESSION_OPEN (msg_version >= 6). Para cada registro, las cadenas de bytes match.path y match.fs_name se leen decodificando primero una longitud de 32 bits y luego copiando esa cantidad de bytes con ceph_decode_copy() sin protección. A diferencia de los campos circundantes, que usan las variantes de decodificación _safe, estas dos copias no van precedidas de una comprobación de límites ceph_decode_need(), y los campos struct_len de las estructuras MDSCapAuth y MDSCapMatch que las contienen se omiten en lugar de aplicarse como límite superior. Una longitud mayor que los bytes restantes en el front del mensaje hace que ceph_decode_copy() lea más allá del final del búfer front. El front del mensaje es una asignación dedicada (ceph_msg_new2() -> kvmalloc), por lo que la sobrelectura excede ese objeto. Un MDS malicioso o comprometido puede provocarlo con el primer mensaje posterior a la conexión durante el montaje, sin interacción del usuario del lado del cliente; con KASAN se reporta como una lectura fuera de límites en slab en handle_session(). Impacto: un MDS malicioso puede forzar al cliente del kernel a leer hasta 4 GiB más allá de la asignación del front del mensaje durante el establecimiento de la sesión, provocando la caída del cliente (lectura fuera de límites). Se cambian ambas copias a ceph_decode_copy_safe(), que realiza la comprobación de límites ceph_decode_need() antes de la copia y salta a la etiqueta bad existente, en concordancia con el resto del decodificador y con la ruta de error que libera el arreglo cap_auths parcialmente decodificado.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- Linux Afectadas: 1d17de9534cb5a4c4c380d174cc2f9281b34f89e y anteriores a dc5c7dffda92ef372fa587c444a1c537373df824 · 1d17de9534cb5a4c4c380d174cc2f9281b34f89e y anteriores a c37db86d2b5e9b57001ccae7e7a727e95a4f9c02 · 1d17de9534cb5a4c4c380d174cc2f9281b34f89e y anteriores a 5f892c767b30e4fb0c744c59f9235c717383d2cd · 1d17de9534cb5a4c4c380d174cc2f9281b34f89e y anteriores a 77933e22adfe813be2bd10be08d6e950103c3967
- Linux Afectadas: 6.10 No afectadas: 6.12.109 · 6.18.50 · 7.2.4 · 7.3
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en git.kernel.orggit.kernel.org/stable/c/dc5c7dffda92ef372fa587c444a1c537373df824
- Referencia en git.kernel.orggit.kernel.org/stable/c/c37db86d2b5e9b57001ccae7e7a727e95a4f9c02
- Referencia en git.kernel.orggit.kernel.org/stable/c/5f892c767b30e4fb0c744c59f9235c717383d2cd
- Referencia en git.kernel.orggit.kernel.org/stable/c/77933e22adfe813be2bd10be08d6e950103c3967
Ver el texto original en inglés (CVE.org)
ceph: bound MDSCapAuth path and fs_name decode in handle_session()
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.