Vulnerabilidad en kernel de Linux (CVE-2022-48733)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-416
Utilización después de liberación
Fecha de publicación:
20/06/2024
Última modificación:
27/05/2025
Descripción
En el kernel de Linux, se resolvió la siguiente vulnerabilidad: btrfs: corrige el use-after-free después de una falla al crear una instantánea En ioctl.c:create_snapshot(), asignamos una estructura de instantánea pendiente y luego la adjuntamos a la lista de transacciones de instantáneas pendientes. Después de eso, llamamos a btrfs_commit_transaction(), y si eso devuelve un error, saltamos a la etiqueta 'falla', donde liberamos() la estructura de instantánea pendiente. Esto puede resultar en un uso posterior después de la liberación de la instantánea pendiente: 1) Asignamos la instantánea pendiente y la agregamos a la lista de instantáneas pendientes de la transacción; 2) Llamamos a btrfs_commit_transaction(), y falla en la primera llamada a btrfs_run_delayed_refs() o btrfs_start_dirty_block_groups(). En ambos casos, no abortamos la transacción y liberamos nuestro identificador de transacción. Saltamos a la etiqueta 'fallo' y liberamos la estructura de instantánea pendiente. Regresamos con la instantánea pendiente todavía en la lista de transacciones; 3) Otra tarea confirma la transacción. Esta vez no hay ningún error y luego, durante la confirmación de la transacción, accede a un puntero a la estructura de instantánea pendiente que la tarea de creación de instantánea ya ha liberado, lo que resulta en una liberación de usuario. En realidad, este problema podría ser detectado por smatch, que produjo la siguiente advertencia: fs/btrfs/ioctl.c:843 create_snapshot() advertencia: '&pending_snapshot->list' no se elimina de la lista. Así que solucione este problema al no tener el ioctl de creación de instantáneas directamente agregue la instantánea pendiente a la lista de transacciones. En su lugar, agregue la instantánea pendiente al identificador de la transacción, y luego en btrfs_commit_transaction() agregamos la instantánea a la lista solo cuando podamos garantizar que cualquier error devuelto después de ese punto resultará en la cancelación de la transacción, en cuyo caso el código ioctl puede Libera la instantánea pendiente y ya nadie podrá acceder a ella.
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.10.226 (excluyendo) | |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.15.22 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 5.16.8 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:5.17:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.17:rc2:*:*:*:*:*:* |
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/28b21c558a3753171097193b6f6602a94169093a
- https://git.kernel.org/stable/c/7e4c72dbaf62f8978af8321a24dbd35566d3a78a
- https://git.kernel.org/stable/c/9372fa1d73da5f1673921e365d0cd2c27ec7adc2
- https://git.kernel.org/stable/c/a7b717fa15165d3d9245614680bebc48a52ac05d
- https://git.kernel.org/stable/c/28b21c558a3753171097193b6f6602a94169093a
- https://git.kernel.org/stable/c/9372fa1d73da5f1673921e365d0cd2c27ec7adc2
- https://git.kernel.org/stable/c/a7b717fa15165d3d9245614680bebc48a52ac05d