Vulnerabilidad en kernel de Linux (CVE-2023-52900)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
21/08/2024
Última modificación:
13/09/2024
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: nilfs2: soluciona el fallo de protección general en nilfs_btree_insert() Si nilfs2 lee una imagen de disco corrupta e intenta leer un bloque de nodo de árbol b llamando a __nilfs_btree_get_block() contra una dirección de bloque virtual no válida, devuelve -ENOENT porque falla la conversión de la dirección del bloque virtual a una dirección de bloque de disco. Sin embargo, este valor de retorno es el mismo que el código interno que devuelven las rutinas de búsqueda del árbol b para indicar que el bloque que se busca no existe, por lo que las funciones que operan en ese árbol b pueden comportarse mal. Cuando nilfs_btree_insert() recibe este código falso 'no encontrado' de nilfs_btree_do_lookup(), malinterpreta que la verificación 'no encontrado' fue exitosa y continúa la operación de inserción utilizando datos de ruta de búsqueda incompletos, lo que provoca el siguiente bloqueo: falla de protección general, probablemente por dirección no canónica 0xdffffc0000000005: 0000 [#1] PREEMPT SMP KASAN KASAN: null-ptr-deref en el rango [0x0000000000000028-0x000000000000002f] ... RIP: 0010:nilfs_btree_get_nonroot_node fs/nilfs 2/btree.c:418 [en línea] RIP: 0010:nilfs_btree_prepare_insert fs/nilfs2/btree.c:1077 [en línea] RIP: 0010:nilfs_btree_insert+0x6d3/0x1c10 fs/nilfs2/btree.c:1238 Código: bc 24 80 00 00 00 4c 89 f8 48 c1 e8 3 42 80 3c 28 00 74 08 4c 89 ff e8 4b 02 92 fe 4d 8b 3f 49 83 c7 28 4c 89 f8 48 c1 e8 03 <42> 80 3c 28 00 74 08 4c 89 ff e8 2e 02 92 fe 4d 8b f 49 83 c7 02... Seguimiento de llamadas: nilfs_bmap_do_insert fs/nilfs2/bmap.c:121 [en línea] nilfs_bmap_insert+0x20d/0x360 fs/nilfs2/bmap.c:147 nilfs_get_block+0x414/0x8d0 fs/nilfs2/inode.c: 101 __block_write_begin_int+0x54c/0x1a80 fs/buffer.c:1991 __block_write_begin fs/buffer.c:2041 [en línea] block_write_begin+0x93/0x1e0 fs/buffer.c:2102 nilfs_write_begin+0x9c/0x110 fs/nilfs2/inode.c :261 generic_perform_write+0x2e4/0x5e0 mm/filemap.c:3772 __generic_file_write_iter+0x176/0x400 mm/filemap.c:3900 generic_file_write_iter+0xab/0x310 mm/filemap.c:3932 call_write_iter include/linux/fs.h:2186 [en línea] new_sync_write fs/read_write.c:491 [en línea] vfs_write+0x7dc/0xc50 fs/read_write.c:584 ksys_write+0x177/0x2a0 fs/read_write.c:637 do_syscall_x64 arch/x86/entry/common.c:50 [en línea] do_syscall_64 +0x3d/0xb0 arch/x86/entry/common.c:80 Entry_SYSCALL_64_after_hwframe+0x63/0xcd ... Este parche soluciona la causa raíz de este problema reemplazando el código de error que devuelve __nilfs_btree_get_block() en la conversión de direcciones de bloque falla de -ENOENT a otro código interno -EINVAL, lo que significa que los metadatos del árbol b están dañados. Al devolver -EINVAL, se propaga sin fallos y, para todas las operaciones relevantes del árbol b, las funciones en la capa superior del mapa b generan un mensaje de error que indica metadatos del árbol b corruptos a través de nilfs_bmap_convert_error(), y el código -EIO se devolverá eventualmente cuando debería ser.
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.14.304 (excluyendo) | |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.15 (incluyendo) | 4.19.271 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.20 (incluyendo) | 5.4.230 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (incluyendo) | 5.10.165 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.15.90 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.8 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.2:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.2:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.2:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.2:rc4:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/0bf463939c09e5b2c35c71ed74a5fd60a74d6a04
- https://git.kernel.org/stable/c/3c2a2ff67d46106715c2132021b98bd057c27545
- https://git.kernel.org/stable/c/45627a1a6450662e1e0f8174ef07b05710a20062
- https://git.kernel.org/stable/c/712bd74eccb9d3626a0a236641962eca8e11a243
- https://git.kernel.org/stable/c/7633355e5c7f29c049a9048e461427d1d8ed3051
- https://git.kernel.org/stable/c/b0ba060d3287108eba17603bee3810e4cf2c272d
- https://git.kernel.org/stable/c/d9fde9eab1766170ff2ade67d09178d2cfd78749