CVE-2026-98260
exec: POSIX-Timer direkt nach de_thread() aufräumen
- Veröffentlicht
- 06.10.2026
- Aktualisiert
- 30.10.2026
- CNA zuweisen
- Linux
- Beweise beobachtet
- 04.11.2026
Primäres CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HNiedrig · nächste 30 Tage
- Perzentil
- 8,2 %
- Modelldatum
- 04.11.2026
EPSS ist eine statistische Schätzung, keine Gewissheit oder ein Maß für die Auswirkung. Kombinieren Sie es mit CVSS, KEV-Status, Belichtung und Ihrer Umgebung.
Zusammenfassung
Im Linux-Kernel wurde die folgende Schwachstelle behoben: exec: POSIX-Timer direkt nach de_thread() bereinigen Ein CPU-Timer pro Thread hält eine Referenz auf die PID des Threads, an den er gebunden ist, und solange er scharfgeschaltet ist, ist sein Knoten in den posix_cputimers dieses Threads eingereiht. Die Task wird über diese PID nachgeschlagen. Wenn ein Nicht-Leader-Thread exec() ausführt, ändert de_thread(), welche Task diese PID besitzt. pid_task(timer->it.cpu.pid, PIDTYPE_PID) gibt dann NULL zurück, aber der Knoten ist weiterhin auf tsk eingereiht, das noch lebt. timer_lock_sighand() interpretiert einen fehlgeschlagenen Lookup so, dass der Knoten bereits aus der Warteschlange entfernt wurde, und hat daher nichts rückgängig zu machen. begin_new_exec() ruft posix_cpu_timers_exit(me) direkt nach exec_task_namespaces() auf, wodurch der verbliebene Knoten entfernt wird, sodass der Zustand normalerweise unsichtbar bleibt. Aber bprm->point_of_no_return wird vor de_thread() gesetzt, sodass die Task stirbt, bevor sie dorthin gelangt, falls unshare_files(), set_mm_exe_file(), exec_mmap() oder exec_task_namespaces() fehlschlägt. exit_itimers() gibt dann den k_itimer frei, während sein Knoten noch eingereiht ist, und das spätere Reapen von tsk entfernt diesen freigegebenen Knoten aus dem rbtree. Kurz gesagt: der Nicht-Leader-Thread B der Parent timer_create(CLOCK_THREAD_CPUTIME_ID) timer_settime() arm_timer() // der Knoten ist auf B eingereiht execve() de_thread(B) exchange_tids(B, leader) // Bs PID gehört jetzt dem Leader release_task(leader) __exit_signal(leader) posix_cpu_timers_exit(leader) // bereinigt die Warteschlange des Leaders, nicht die von B __unhash_process(leader) // diese PID hat keine Task mehr exec_mmap() mmap_read_lock_killable(old_mm) kill(B, SIGKILL) // -EINTR get_signal() do_exit() exit_itimers() posix_timer_delete() posix_cpu_timer_del() posix_timer_unhash_and_free() // freigegeben, während noch eingereiht wait4() release_task(B) posix_cpu_timers_exit(B) cleanup_timerqueue() timerqueue_del() // Use-after-free Verschieben Sie die POSIX-Timer-Bereinigung direkt nach de_thread(), bevor eine der späteren Fehlerbedingungen die Task in do_exit() bringt. [ tglx: Die Bereinigung direkt nach de_thread() verschieben ]
Quellen
Verantwortungsvoller Umgang
Verwenden Sie Schwachstelleninformationen nur auf Systemen, die Sie besitzen oder zu deren Testen Sie berechtigt sind. Kitploit verlinkt auf öffentliche Forschungsmetadaten und speichert keinen Exploit-Code oder bösartige Payloads.