Vulnerabilidad en kernel de Linux (CVE-2024-50265)
Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476
Desreferencia a puntero nulo (NULL)
Fecha de publicación:
19/11/2024
Última modificación:
21/11/2024
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: ocfs2: eliminar la entrada una vez en lugar de la desreferencia ptr nula en ocfs2_xa_remove() Syzkaller puede provocar la desreferencia ptr nula en ocfs2_xa_remove(): [ 57.319872] (a.out,1161,7):ocfs2_xa_remove:2028 ERROR: status = -12 [ 57.320420] (a.out,1161,7):ocfs2_xa_cleanup_value_truncate:1999 ERROR: Truncamiento parcial al eliminar xattr overlay.upper. Fuga de 1 clúster y eliminación de la entrada [ 57.321727] ERROR: desreferencia de puntero NULL del núcleo, dirección: 0000000000000004 [...] [ 57.325727] RIP: 0010:ocfs2_xa_block_wipe_namevalue+0x2a/0xc0 [...] [ 57.331328] Seguimiento de llamadas: [ 57.331477] [...] [ 57.333511] ? do_user_addr_fault+0x3e5/0x740 [ 57.333778] ? exc_page_fault+0x70/0x170 [ 57.334016] ? asm_exc_page_fault+0x2b/0x30 [ 57.334263] ? __pfx_ocfs2_xa_block_wipe_namevalue+0x10/0x10 [ 57.334596] ? ocfs2_xa_block_wipe_namevalue+0x2a/0xc0 [ 57.334913] ocfs2_xa_remove_entry+0x23/0xc0 [ 57.335164] ocfs2_xa_set+0x704/0xcf0 [ 57.335381] ? _raw_spin_unlock+0x1a/0x40 [ 57.335620] ? ocfs2_inode_cache_unlock+0x16/0x20 [ 57.335915] ? trace_preempt_on+0x1e/0x70 [ 57.336153] ? start_this_handle+0x16c/0x500 [ 57.336410] ? preempt_count_sub+0x50/0x80 [ 57.336656] ? _raw_read_unlock+0x20/0x40 [ 57.336906] ? ocfs2_xattr_set_handle+0x1fd/0x5d0 [ 57.337706] ? ocfs2_start_trans+0x13d/0x290 [ 57.337971] ocfs2_xattr_set+0xb13/0xfb0 [ 57.338207] ? dput+0x46/0x1c0 [ 57.338393] ocfs2_xattr_trusted_set+0x28/0x30 [ 57.338665] ? ocfs2_xattr_trusted_set+0x28/0x30 [ 57.338948] __vfs_removexattr+0x92/0xc0 [ 57.339182] __vfs_removexattr_locked+0xd5/0x190 [ 57.339456] ? preempt_count_sub+0x50/0x80 [ 57.339705] vfs_removexattr+0x5f/0x100 [...] El reproductor utiliza la función faultinject para hacer que ocfs2_xa_remove() -> ocfs2_xa_value_truncate() falle con -ENOMEM. En este caso, el comentario menciona que podemos devolver 0 si ocfs2_xa_cleanup_value_truncate() va a borrar la entrada de todos modos. Pero la siguiente comprobación de 'rc' es incorrecta y el flujo de ejecución ejecuta 'ocfs2_xa_remove_entry(loc);' dos veces: * 1.ª: en ocfs2_xa_cleanup_value_truncate(); * 2.ª: regresa a ocfs2_xa_remove() en lugar de ir a 'out'. Solucione esto omitiendo la segunda eliminación de la misma entrada y haciendo que syzkaller repro funcione correctamente.
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:*:*:*:*:*:*:*:* | 2.6.34 (incluyendo) | 4.19.324 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.20 (incluyendo) | 5.4.286 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (incluyendo) | 5.10.230 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.15.172 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.117 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.61 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.11.8 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.12:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc5:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.12:rc6:*:*:*:*:*:* |
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/0b63c0e01fba40e3992bc627272ec7b618ccaef7
- https://git.kernel.org/stable/c/168a9b8303fcb0317db4c06b23ce1c0ce2af4e10
- https://git.kernel.org/stable/c/2b5369528ee63c88371816178a05b5e664c87386
- https://git.kernel.org/stable/c/38cbf13b2e7a31362babe411f7c2c3c52cd2734b
- https://git.kernel.org/stable/c/6a7e6dcf90fe7721d0863067b6ca9a9442134692
- https://git.kernel.org/stable/c/86dd0e8d42828923c68ad506933336bcd6f2317d
- https://git.kernel.org/stable/c/dcc8fe8c83145041cb6c80cac21f6173a3ff0204
- https://git.kernel.org/stable/c/dd73c942eed76a014c7a5597e6926435274d2c4c