Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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-2025-8045 — Dirty-Pagetable-Exploit für CVE-2025-8045 | Kitploit
Tools/GitHubGitHub/kuzeyardabulut/cve-2025-8045
Android-SicherheitPrivilege EscalationExploitationBinary-Exploitation
GitHubkuzeyardabulut/cve-2025-8045

CVE-2025-8045

Dirty-Pagetable-Exploit für CVE-2025-8045

Repository anzeigen
614vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2025-8045 — Arm Mali GPU KCPU Queue UAF

Ein lokaler Privilege-Escalation-Exploit für CVE-2025-8045, einen Use-after-Free im Arm-Mali-GPU-Kernel-Treiber (kbase). Ein nicht privilegierter lokaler Prozess liefert sich mit dem Dump-Pfad der CSF-KCPU-Queue ein Wettrennen, um ein cpu_queue.buffer freizugeben und zurückzugewinnen, macht aus der hängenden Allokation eine Seitentabelle, die ihm gehört („dirty pagetable") und nutzt diese Primitive, um beliebige physische Lese-/Schreibzugriffe auf den Kernel zu erlangen — was in einer Root-Shell mit SELinux im Modus permissive endet.

Ausgenutzt auf Pixel 7 Pro (Build BP3A.250905.014). Die hartcodierten Offsets in exploit.c sind für dieses Ziel kalibriert; für andere Geräte/Builds müssen die Offsets neu abgeleitet werden (siehe Tuning & Portabilität).


Die Schwachstelle

CVE-2025-8045 ist ein Use-after-Free in den Kernel-Treibern der Arm-Valhall- und GPU-Architektur der 5. Generation (r53p0–r54p1). Ein lokaler, nicht privilegierter Prozess kann GPU-Verarbeitungsoperationen so ansteuern, dass der Treiber auf bereits freigegebenem Speicher arbeitet, was Kernel-Speicheroffenlegung, -korruption und Codeausführung Tür und Tor öffnet.

Dieser Exploit erreicht die Schwachstelle über die CSF-KCPU-Queue-Schnittstelle, die über /dev/mali0 bereitgestellt wird:

  • Eine KCPU-Queue wird mit einem nicht erfüllbaren CQS_WAIT ausgestattet, gefolgt von einem FENCE_SIGNAL. Das Warten stoppt die Queue, sodass der Fence-Timer später an der vorhersagbaren Grenze eines Timer-Rad-Buckets auslöst.
  • KBASE_IOCTL_CS_CPU_QUEUE_DUMP ruft kbase_csf_cpu_queue_dump_buffer() auf. Indem der Zustandsübergang der Queue (ISSUED → COMPLETE/PENDING) gegen den Dump-Pfad in einen Wettlauf gebracht wird, wird cpu_queue.buffer freigegeben, während er noch referenziert wird — der UAF.

Der Exploit ist ein Timing-Exploit: Zuerst kalibriert er die Deadline, dann sagt er sie in jeder Runde voraus und feuert eine „Welle" harmloser Dump-Aufrufe ab, um das Race-Fenster um den Moment der Freigabe zu vergrößern.

Exploit-Strategie

Da eine Seite am Ende sowohl eine Mali-Allokation als auch eine aktive CPU-Seitentabelle ist, parkt der Prozess für immer, anstatt zu beenden — ein Freigeben wäre ein Double-Free und würde eine Kernel-Panic auslösen.

Kompilieren

root@kitploit:~
# Android / arm64 (NDK)
aarch64-linux-android31-clang -O2 -o exploit exploit.c

Ausführen

root@kitploit:~
./exploit

Bei Erfolg erhalten Sie eine Root-Shell (uid=0) mit SELinux im Modus permissive. Beispielhafter Ablauf:

root@kitploit:~
[*] pid=...  cpus=8  wave=64  harvest cpu=7  rounds=256
[*] round  1  calibrate  deadline t0+... ms  phase ... ms
[*] round  N  read +... us
[+] UAF page: spray region R page P @ ..., 1 live descriptor
[+] entry 0 = ... -- a CPU page table, writable through the GPU
[+] alias: dirty pagetable
[+] selinux_state.enforcing = 0 @ phys ...
[+] sel_read_enforce patched @ phys ...
[+] root shell: uid=0 euid=0

Laufen alle Runden ohne Erfolg durch, deutet cpu_queue.c:71 in dmesg darauf hin, dass das Race greift, das Reclaim aber danebengegangen ist — justieren Sie die Reclaim-/Wave-Parameter.

Tuning & Portabilität

Die Werte in exploit.c sind für das Pixel 7 Pro, Build BP3A.250905.014, kalibriert. Offsets und Konstanten sind geräte-/kernel-spezifisch und müssen für jedes andere Ziel neu abgeleitet werden:

  • KERNEL_PA_BASE, SEL_READ_ENFORCE, INIT_CRED, COMMIT_CREDS, SELINUX_STATE — Kernel-Symbol-Offsets bzw. physische Offsets.
  • ARM64_PTE_FLAGS — Deskriptorvorlage der letzten Ebene für die MMU-Konfiguration des Zielgeräts.
  • WAVE_*, SWEEP_*, BUCKET_NS, WAIT_NS, Spray-Größen — Stellschrauben für Race-Timing und Heap-Grooming.

Betroffene Versionen

  • Arm Valhall GPU-Kernel-Treiber: r53p0 – r54p1
  • Arm-GPU-Kernel-Treiber der 5. Generation: r53p0 – r54p1

Aktualisieren Sie zur Behebung auf die korrigierte Treiberversion von Arm.

Haftungsausschluss

Dieser Code wird ausschließlich für defensive Sicherheitsforschung, Detection Engineering und Bildungszwecke veröffentlicht. Führen Sie ihn nicht gegen Systeme aus, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben. Der Autor übernimmt keine Haftung für Missbrauch oder für dadurch verursachte Schäden. Die Verwendung gegen Systeme ohne Erlaubnis ist illegal.

Tool herunterladen
PhaseWas passiert
KalibrierenRunde 1 misst die ISSUED→COMPLETE-Kante, um die Phase des Timer-Rad-Buckets zu ermitteln.
Vorhersagen + SweepSpätere Runden sagen die Deadline voraus und überstreichen den Lese-Offset ±ms, um genau auf die Freigabe zu treffen.
Welle64 Threads stapeln CS_CPU_QUEUE_DUMP-Aufrufe auf csf.lock, um die Deadline einzurahmen und das Fenster zu dehnen.
ReclaimUNMOVABLE-Freilisten vorab leeren und dann gestempelte GPU-Seiten sprühen, sodass der freigegebene Block unter unsere Kontrolle zurückkehrt.
Dirty PagetableErneut freigeben und sofort CPU-Seitentabellen in dieselbe Seite sprühen; die GPU-Allokation aliasiert nun eine aktive Tabelle der letzten Ebene.
Beliebiges R/WEine nie wiederverwendete Fenster-PTE wird auf physische Kernel-Seiten gerichtet; die TLB wird über einen PROT_NONE-Roundtrip auf einem großen Scratch-Mapping zwangsweise geleert.
Rootselinux_state.enforcing löschen, sel_read_enforce mit commit_creds(init_cred) patchen und ein geparktes Kind freigeben, das eine Root-Shell ausführt.