Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-64560-Analysis — Linux-Kernel-UAF-Analyse für CVE-2026-64560 mit Race-auslösendem PoC, Patch-Review, Matrix der betroffenen LTS-/Android-Versionen und Selbstcheck für gepatchte Geräte. | Kitploit
Tools/GitHubGitHub/villager1314/cve-2026-64560-analysis
Android-SicherheitSchwachstellenanalyseExploitationMobile SicherheitLernen & BildungBinary-Exploitation
GitHubvillager1314/cve-2026-64560-analysis

CVE-2026-64560-Analysis

Linux-Kernel-UAF-Analyse für CVE-2026-64560 mit Race-auslösendem PoC, Patch-Review, Matrix der betroffenen LTS-/Android-Versionen und Selbstcheck für gepatchte Geräte.

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
1145vor 1 MonatVon Kitploit geprüft

CVE-2026-64560 — Linux-Kernel-posix-cpu-timers-Nicht-Leader-exec()-Race-UAF

Reproducer / PoC (Trigger-Verifikation): Linux & Android (NDK) Dieses Repository dient ausschließlich der Verifikation des Patch-Status auf eigenen Testgeräten sowie zu Studienzwecken; es enthält keinerlei Privilege-Escalation-/Exploit-Primitive.

CVSS 3.1 CVSS 4.0 (SUSE) CWE-416 Fix


1. Schwachstellenübersicht

FeldInhalt
CVE IDCVE-2026-64560
Titelposix-cpu-timers: Prevent UAF caused by non-leader exec() race
TypUse-After-Free (CWE-416), Race Condition
CNAkernel.org (Linux CNA)
CVSS v3.17.8 High — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0 (SUSE)8.5 High — CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS~0.12 % (2. Perzentil, Stand 2026-08)
CISA KEVNicht gelistet
Veröffentlichungsdatum2026-07-29
Fix-Commit (Mainline)920f893f735e92ba3a1cd9256899a186b161928d
Problemverursachender Commit (Fixes:)55e8c8eb2c7b (v5.7, 2020) — „posix-cpu-timers: Store a reference to a pid not a task“
BeheberThomas Gleixner <[email protected]>
MelderWongi Lee <[email protected]>, Jungwoo Lee <[email protected]>
Betroffene Dateienkernel/exit.c, kernel/signal.c, kernel/time/posix-cpu-timers.c

Betroffene Versionen

Die Schwachstelle wurde in v5.7 (2020-05) eingeführt; der Fix wurde in die jeweiligen Stable-Zweige zurückportiert:

ZweigBetroffenFix-Version (≥)Stable-Fix-Commit
5.10 LTS5.7 ~ 5.10.2615.10.26267aa823e3e8c
5.15 LTS~ 5.15.2125.15.213d8bcb28abad8
6.1 LTS~ 6.1.1796.1.180cc35ddbc4973
6.6 LTS~ 6.6.1466.6.14712a891c773ae
6.12 LTS~ 6.12.996.12.100e74443f5db00
6.18~ 6.18.406.18.416a7ecc25abe6
7.1~ 7.1.47.1.5ad1cafa1bdaa
Mainline< 7.2-rc37.2-rc3920f893f735e

Android-Bezug

Android-GKI-Kernel basieren auf 5.10 / 5.15 / 6.1 / 6.6 / 6.12 LTS und sind sämtlich betroffen. Da der Mainline-Fix-Commit am 2026-07-29 veröffentlicht wurde, haben Android-Geräte mit SPL (Security Patch Level) bis einschließlich 2026-08-01 den Fix praktisch noch nicht übernommen. Auf dem Gerät lässt sich die Kernelversion und das SPL mit adb shell cat /proc/version und getprop ro.build.version.security_patch überprüfen.


2. Technische Details

2.1 Hintergrund: POSIX-CPU-Timer und sighand

POSIX-CPU-Timer (timer_create(CLOCK_PROCESS_CPUTIME_ID, ...) / timer_create(CLOCK_THREAD_CPUTIME_ID, ...)) werden im Kernel von kernel/time/posix-cpu-timers.c verwaltet. Jedes k_itimer merkt sich das Ziel-Task über it.cpu.pid; für Timer-Operationen wird lock_task_sighand(p, &flags) benötigt, um die sighand->siglock des Tasks zu sperren und die Timerqueue zu schützen.

Der Commit 55e8c8eb2c7b aus dem Jahr 2020 ersetzte den im Timer gecachten Task-Zeiger durch eine PID-Referenz (um das durch den Workaround von 2010, e0a70217107e, verursachte Problem zu beheben). Vor jeder Operation wird eine Suche mit pid_task(pid, type) durchgeführt. Diese Änderung hinterließ das Race-Fenster dieser CVE.

2.2 Race-Szenario (Non-Leader-Thread exec)

Wenn execve() von einem Nicht-Leader-Thread ausgelöst wird, überträgt de_thread() → switch_leader() die TGID vom alten auf den neuen Leader. Der alte Leader durchläuft release_task() → __exit_signal(), wobei old_leader->sighand = NULL gesetzt und unhash_task(old_leader) ausgeführt wird.

Gleichzeitig läuft auf einer anderen CPU sys_timer_delete() → posix_cpu_timer_del():

 sys_timer_delete()                        exec()
   posix_cpu_timer_del()
   // 观察到旧 leader
   p = pid_task(pid, pid_type);            de_thread()
                                             switch_leader();
                                             release_task(old_leader)
                                               __exit_signal(old_leader)
                                                 sighand = lock(old_leader, sighand);
                                                 posix_cpu_timers*_exit();
   sighand = lock_task_sighand(p)            unhash_task(old_leader);
     sh = lock(p, sighand)                   old_leader->sighand = NULL;
                                               unlock(sighand);
     (p->sighand == NULL)
       unlock(sh)
       return NULL;

   // 直接返回,没有摘链!
   if (!sighand)
      return 0;
   free_posix_timer();   // ← k_itimer 被释放

Das von posix_cpu_timer_del() ermittelte p ist der alte Leader; da p->sighand == NULL ist, nimmt die Funktion an, dass „das Task gerade beendet wird und der Exit-Pfad das Entfernen aus der Queue übernimmt“, und gibt ohne jede Aktion Erfolg zurück. Anschließend gibt free_posix_timer() das k_itimer frei.

Kernpunkt: Anders als exit() ändert exec() die TGID nicht; armed Timer auf Prozessebene (p->signal->cpu_timers) werden vererbt und bleiben eingereiht. Daher:

  • run_posix_cpu_timers() (durchläuft die Timerqueue im Tick) greift auf das timerqueue_node des freigegebenen Objekts zu → UAF-Lesen/-Schreiben;
  • Auch Add/Delete-Operationen auf andere Timer durchlaufen diesen R-Baum mit dem verwaisten Knoten → UAF.

Gleichartige Probleme bestehen auch in:

  • posix_cpu_timer_set(): Normale Timer geben lediglich vorübergehend -ESRCH zurück; der kernelinterne do_cpu_nanosleep() verwendet jedoch ein auf dem Stack allokiertes k_itimer – dieselbe UAF.
  • posix_cpu_timer_rearm(): Das Rearm schlägt still fehl, der Timer läuft nicht mehr ab (funktionaler Bug).

2.3 Sekundäres Problem auf Architekturen mit schwacher Speicherordnung

Frederic Weisbecker weist darauf hin: tsk->sighand = NULL in __exit_signal() ist ein gewöhnlicher Store. Auf Architekturen mit schwacher Speicherordnung wie ARM64 ist nicht garantiert, dass posix_cpu_timer_del() beim Beobachten von sighand == NULL auch die vor posix_cpu_timers*_exit() durchgeführten Entfernungs-Schreibvorgänge sieht, wodurch WARN_ON_ONCE(timer_queued(tmr)) fälschlich ausgelöst werden kann.

2.4 Behebungsansatz

  1. In __exit_signal() wird auf smp_store_release(&tsk->sighand, NULL) umgestellt;
  2. Der !sighand-Pfad von lock_task_sighand() erhält smp_acquire__after_ctrl_dep();
  3. Neuer Helper timer_lock_sighand(): Task nachschlagen + sighand sperren; bei sighand == NULL wird nicht zurückgekehrt, sondern die Suche wiederholt – im Exec-Szenario findet man den neuen Leader, im Exit-Szenario gibt man erst auf, wenn die Suche fehlschlägt;
  4. Die drei betroffenen Funktionen (_del / _set / _rearm) verwenden einheitlich diesen Helper.

Das vollständige Diff siehe patches/920f893f735e.patch.


3. PoC-Beschreibung (Trigger-Verifikation, keine Privilege-Escalation)

Unter poc/ wird ein Race-Trigger bereitgestellt: Zwei Threads durchlaufen jeweils eine intensive Schleife

Tool herunterladen