Vulnerabilidad en kernel de Linux (CVE-2024-50220)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
09/11/2024
Última modificación:
26/09/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: fork: no invocar uffd en fork si ocurre un error Serie de parches "fork: no exponer mm incompleto en fork". Durante fork podemos colocar el espacio de direcciones de memoria virtual en un estado inconsistente antes de que se complete la operación de fork. Además, podemos encontrar un error durante la operación de fork que indique que el espacio de direcciones de memoria virtual está invalidado. Como resultado, no deberíamos exponerlo de ninguna manera a maquinaria externa que pueda interactuar con mm o VMAs, maquinaria que no está diseñada para lidiar con estado incompleto. Actualizamos específicamente la lógica de fork para diferir khugepaged y ksm hasta el final de la operación y solo para ser invocados si no surgió ningún error, y no permitimos que uffd observe eventos de fork si se ha producido un error. Este parche (de 2): Actualmente en fork exponemos el espacio de direcciones virtuales de un proceso al espacio de usuario incondicionalmente si uffd está registrado en VMAs, independientemente de si surgió un error en la bifurcación. Esto se realiza en dup_userfaultfd_complete(), que se invoca de manera incondicional y realiza dos tareas: invocar controladores registrados para el evento UFFD_EVENT_FORK a través de dup_fctx() y limpiar los objetos userfaultfd_fork_ctx establecidos en dup_userfaultfd(). Esto es problemático, porque el espacio de direcciones virtuales puede no estar inicializado correctamente si surge un error. El cambio en el commit d24062914837 ("fork: use __mt_dup() to duplicate maple tree in dup_mmap()") hace que esto sea más pertinente, ya que podemos estar en un estado en el que las entradas en el árbol de maple aún no sean consistentes. Abordamos esto, en caso de error de fork, asegurándonos de revertir el estado que de otra manera esperaríamos limpiar a través del evento que está siendo manejado por el espacio de usuario y realizar la tarea de liberación de memoria que de otra manera realizaría dup_userfaultfd_complete(). Para ello, implementamos una nueva función, dup_userfaultfd_fail(), que realiza el mismo bucle, pero disminuyendo el recuento de referencias. Tenga en cuenta que ejecutamos mmgrab() en los mm principales y secundarios, sin embargo, userfaultfd_ctx_put() ejecutará mmdrop() una vez que el recuento de referencias baje a cero, por lo que evitaremos fugas de memoria correctamente aquí.
Impacto
Puntuación base 3.x
4.70
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
| CPE | Desde | Hasta |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.8 (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



