Vulnerabilidad en kernel de Linux (CVE-2024-53052)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
19/11/2024
Última modificación:
22/11/2024
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: io_uring/rw: se corrige la comprobación NOWAIT faltante para el inicio de escritura O_DIRECT Cuando io_uring inicia una escritura, llamará a kiocb_start_write() para impulsar el rwsem del superbloque, evitando que se produzcan congelamientos mientras esa escritura está en curso. El lado de congelamiento tomará ese rwsem para escribir, excluyendo que se produzcan nuevos escritores y esperando a que finalicen las escrituras existentes. Pero io_uring usa incondicionalmente kiocb_start_write(), que se bloqueará si alguien está intentando congelar el punto de montaje. Esto provoca un punto muerto en el que el congelamiento espera a que se completen las escrituras anteriores, pero las escrituras anteriores no se pueden completar, ya que la tarea que se supone que debe completarlas está bloqueada esperando a iniciar una nueva escritura. Esto da como resultado el siguiente seguimiento atascado que muestra que la dependencia con la escritura bloqueó el inicio de una nueva escritura: task:fio state:D stack:0 pid:886 tgid:886 ppid:876 Seguimiento de llamadas: __switch_to+0x1d8/0x348 __schedule+0x8e8/0x2248 schedule+0x110/0x3f0 percpu_rwsem_wait+0x1e8/0x3f8 __percpu_down_read+0xe8/0x500 io_write+0xbb8/0xff8 io_issue_sqe+0x10c/0x1020 io_submit_sqes+0x614/0x2110 __arm64_sys_io_uring_enter+0x524/0x1038 invocar_syscall+0x74/0x268 el0_svc_common.constprop.0+0x160/0x238 do_el0_svc+0x44/0x60 el0_svc+0x44/0xb0 el0t_64_sync_handler+0x118/0x128 el0t_64_sync+0x168/0x170 INFORMACIÓN: tarea fsfreeze:7364 bloqueada durante más de 15 segundos. No contaminado 6.12.0-rc5-00063-g76aaf945701c #7963 con el congelador intentando agarrar el rwsem: tarea:fsfreeze estado:D pila:0 pid:7364 tgid:7364 ppid:995 Rastreo de llamadas: __switch_to+0x1d8/0x348 __schedule+0x8e8/0x2248 schedule+0x110/0x3f0 percpu_down_write+0x2b0/0x680 freeze_super+0x248/0x8a8 do_vfs_ioctl+0x149c/0x1b18 __arm64_sys_ioctl+0xd0/0x1a0 anybody_syscall+0x74/0x268 el0_svc_common.constprop.0+0x160/0x238 do_el0_svc+0x44/0x60 el0_svc+0x44/0xb0 el0t_64_sync_handler+0x118/0x128 el0t_64_sync+0x168/0x170 Solucione esto haciendo que el lado io_uring respete IOCB_NOWAIT y solo intente una captura de bloqueo del superbloque rwsem si no está configurado. Para un problema normal donde IOCB_NOWAIT siempre estaría configurado, esto devuelve -EAGAIN que hará que el núcleo io_uring emita un intento de bloqueo de la escritura. Eso, a su vez, también hará que se ejecuten las finalizaciones, lo que garantiza el progreso hacia adelante. Dado que el congelamiento requiere CAP_SYS_ADMIN en primer lugar, esto no es algo que pueda ser activado por un usuario normal.
Impacto
Puntuación base 3.x
4.40
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 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.116 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.60 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.11.7 (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:*:*:*:*:*:* |
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/003d2996964c03dfd34860500428f4cdf1f5879e
- https://git.kernel.org/stable/c/1d60d74e852647255bd8e76f5a22dc42531e4389
- https://git.kernel.org/stable/c/26b8c48f369b7591f5679e0b90612f4862a32929
- https://git.kernel.org/stable/c/485d9232112b17f389b29497ff41b97b3189546b
- https://git.kernel.org/stable/c/4e24041ba86d50aaa4c792ae2c88ed01b3d96243
- https://git.kernel.org/stable/c/9e8debb8e51354b201db494689198078ec2c1e75