CVE-2026-98258 Uso después de liberar en posix-cpu-timers del kernel de Linux
En el kernel de Linux, una condición de carrera en el código de temporizadores POSIX de CPU permite liberar un temporizador que sigue en la lista de expiración, lo que deriva en un uso después de liberar (UAF). El problema se corrige verificando si el temporizador está en la lista de expiración en lugar del indicador firing.
CVSS 3.1
- Probabilidad de explotación · EPSS del 09/110,2 % · percentil 8
- Explotada activamenteNo confirmada
- Exploit públicoSí, 1
Afectados
Linux
desde bf635681c906ad056d1fda325de8d1c12c9f8201 hasta antes de 9971dac1a77845ff467146915fcbb9170f6a8209desde bf635681c906ad056d1fda325de8d1c12c9f8201 hasta antes de 4336e3f47d9d516441066e9a65eaf076790d8d45desde bf635681c906ad056d1fda325de8d1c12c9f8201 hasta antes de c21eaa72f02fc6e85621cbe09d303d8fb8bd39cd
Linux
6.13
Qué hacer
- Verificá si usás Linux y en qué versión.
- Actualizá a la versión corregida que indique el fabricante en su aviso o aplicá su mitigación.
- Revisá registros y accesos de los sistemas expuestos para descartar un uso previo.
- Priorizá la corrección: hay código de explotación público.
Exploits públicos
Código publicado por terceros. Puede ser malicioso: revisalo solo en un entorno aislado.
Calculadora CVSS
CVSS 3.1 · 7.8 ALTA
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
- Vector de ataqueLocal
- Complejidad del ataqueBaja
- Privilegios requeridosBajos
- Interacción del usuarioNinguna
- AlcanceSin cambio
- ConfidencialidadAlta
- IntegridadAlta
- DisponibilidadAlta
Descripción original
In the Linux kernel, the following vulnerability has been resolved:
posix-cpu-timers: Prevent freeing a timer which is queued on the expiry list
Kijo analyzed another race in the POSIX CPU timer code:
Commit bf635681c906 converted cpu_timer::firing from a tristate value to a
boolean. This lost the distinction between "not owned by the firing list"
and "still owned, but delivery was canceled". The resulting race is:
expiry handler timer_settime() timer_delete()
-------------- --------------- --------------
collect timer onto
private firing list
firing = true
observes firing = true
firing = false
return TIMER_RETRY
wait for handler
observes firing = false
finish deletion
unhash and free timer
resume list traversal
read freed elist.next
-> UAF
The firing bit is clearly the wrong indicator since that commit.
Check whether the timer is queued on the expiry list or not instead. If it
is queued clear the firing bit to prevent signal delivery as before and
return TIMER_RETRY so the caller unlocks the timer which allows the expiry
code to make progress and remove it from the list.
Referencias (3)
Resumen traducido automáticamente de la descripción original. Fuente: Nureq Monitor. Cómo funciona.