Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en kernel de Linux (CVE-2025-38033)

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
18/06/2025
Última modificación:
18/06/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: x86/Kconfig: hacer que CFI_AUTO_DEFAULT dependa de !RUST o Rust >= 1.88 Llamar a core::fmt::write() desde el código rust mientras FineIBT está habilitado da como resultado un pánico del kernel: [ 4614.199779] ¡ERROR del kernel en arch/x86/kernel/cet.c:132! [ 4614.205343] Ups: código de operación no válido: 0000 [#1] PREEMPT SMP NOPTI [ 4614.211781] CPU: 2 UID: 0 PID: 6057 Comm: dmabuf_dump Contaminado: GUO 6.12.17-android16-0-g6ab38c534a43 #1 9da040f27673ec3945e23b998a0f8bd64c846599 [ 4614.227832] Contaminado: [U]=USUARIO, [O]=OOT_MÓDULO [ 4614.241247] RIP: 0010:do_kernel_cp_fault+0xea/0xf0 ... [ 4614.398144] RIP: 0010:_RNvXs5_NtNtNtCs3o2tGsuHyou_4core3fmt3num3impyNtB9_7Display3fmt+0x0/0x20 [ 4614.407792] Código: 48 f7 gl 48 0f 48 f9 48 89 f2 89 c6 5d e9 18 fd ff ff 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 41 81 ea 14 61 af 2c 74 03 0f 0b 90 <66> 0f 1f 00 55 48 89 e5 48 89 f2 48 8b 3f be 01 00 00 00 5d e9 e7 [ 4614.428775] RSP: 0018:ffffb95acfa4ba68 EFLAGS: 00010246 [ 4614.434609] RAX: 000000000000000 RBX: 0000000000000010 RCX: 0000000000000000 [ 4614.442587] RDX: 0000000000000007 RSI: ffffb95acfa4ba70 RDI: ffffb95acfa4bc88 [ 4614.450557] RBP: ffffb95acfa4bae0 R08: ffff0a00ffffff05 R09: 0000000000000070 [ 4614.458527] R10: 0000000000000000 R11: ffffffffab67eaf0 R12: ffffb95acfa4bcc8 [ 4614.466493] R13: ffffffffac5d50f0 R14: 0000000000000000 R15: 0000000000000000 [ 4614.474473] ? __cfi__RNvXs5_NtNtNtCs3o2tGsuHyou_4core3fmt3num3impyNtB9_7Display3fmt+0x10/0x10 [ 4614.484118] ? _RNvNtCs3o2tGsuHyou_4core3fmt5write+0x1d2/0x250 Esto sucede porque core::fmt::write() llama a core::fmt::rt::Argument::fmt(), que actualmente tiene CFI deshabilitado: library/core/src/fmt/rt.rs: 171 // FIXME: Transmutando el formateador en new y ramificando indirectamente a/llamando a 172 // aquí es una violación explícita de CFI. 173 #[allow(inline_no_sanitize)] 174 #[no_sanitize(cfi, kcfi)] 175 #[inline] 176 pub(super) unsafe fn fmt(&self, f: &mut Formatter<'_>) -> Result { Esto causa una excepción de Protección de Control, porque FineIBT ha sellado el endbr64 de la función original. Esto hace que rust actualmente sea incompatible con FineIBT. Agregue una dependencia de Kconfig que evite que FineIBT se active de manera predeterminada si Rust está habilitado. [ Rust 1.88.0 (programado para el 26/06/2025) debería tener esto solucionado [1], y por lo tanto relajamos la condición con Rust >= 1.88. Cuando `objtool` aterrice verificando esto con, por ejemplo, [2], el plan es ejecutarlo idealmente en la CI de Rust ascendente para evitar regresiones tempranas [3], ya que no controlamos el código fuente de `core`. Alice probó el PR de Rust retroportado a un compilador más antiguo. A Peter le gustaría que Rust proporcionara un núcleo estable que se pueda integrar en el kernel: "Depender de tanto código fuera del árbol es 'desafortunado'". - Miguel ] [Menudas palabras. - Miguel ]

Impacto