
PoC-Skelett für CVE-2021-28664, einen Use-after-Free im Mali-kbase-GPU-Treiber, das einen Kernel-Primitiv zum beliebigen physischen Speicherlesen/-schreiben auf ARM64 Android demonstriert.
Mali kbase GPU-Treiber UAF (CVE-2021-28664) → Kernel beliebiger physischer Speicher Lese-/Schreibprimitive PoC-Gerüst. Ausgerichtet auf generische ARM64-Android-Plattformen, unabhängig von konkretem Hersteller oder Modell.
Der Forschungsbereich endet genau bei "Kernel beliebiger physischer Speicher Lese-/Schreibprimitive": Wie man einen Use-after-free in einem GPU-Treiber in eine stabile, kontrollierbare und sicher fehlschlagende Kernel-Speicher-Lese-/Schreibfähigkeit verwandelt.
Dieses Repository stellt keinen Angriff bereit. Es enthält keinen fertigen Exploit, keinen direkt ausführbaren Code, keine Offset-/Seriennummern-/Firmware-Daten für irgendein Gerät; die Verwendung jeglicher Inhalte für Angriffshandlungen ist verboten (siehe unten).
pipe_buffer-Struktur/copy_page_to_iter-Validierung (ab 5.x
muss anhand des entsprechenden Quellcodes neu geprüft werden; die Kettenstruktur kann als Referenz dienen, aber Details sind nicht allgemeingültig);/dev/mali-Zugriffsberechtigung (seLinux-/Herstellerrichtlinien-Beschränkungen).TODO(DEVICE) leer gelassen; die Anpassung ist die eigene
Reverse-Engineering-Arbeit des Nutzers, das Repository übernimmt dies nicht.CVE-2021-28664: Der MEM_ALIAS-Pfad des Mali kbase Treibers entbehrt einer Prüfung der
GPU_WR-Berechtigung; ein Angreifer kann bereits freigegebene GPU-Speicherseiten in seinen eigenen GPU-Adressraum
aliasen, wodurch eine "GPU-seitige dauerhafte Sichtbarkeit/Beschreibbarkeit freigegebener physischer Seiten" entsteht – ein
Use-after-free über die GPU/Kernel-Grenze hinweg.
Der Ausnutzungswert liegt nicht im GPU-Speicher selbst, sondern darin:
WRITE_VALUE-Jobs gezielte Änderungen an alias-sichtbaren Seiten durchführen.victim GPU-Puffer + MMU-Seitentabellen-Dump → physische Adresskarte erstellen
→ Trigger-Pufferfreigabe erzeugt Druck → Pipe-Spray (F_SETPIPE_SZ verkleinern)
→ pipe_buffer-Array landet im freigegebenen Bereich (Cross-Cache-UAF-Wiederverwendung)
→ alias-Ansicht scannt ops-Zeiger → anon_pipe_buf_ops leaken → KASLR slide
→ GPU modifiziert page / offset / len des pipe_buffer
→ mit Hilfe des legitimen pipe read/write-Pfads
⇒ beliebiges physisches Seitenlesen (gefälschter page-Zeiger)
⇒ beliebiges physisches Seitenschreiben (pipe merge-Schreibpfad)
⇒ mit bekannter Inhaltsseite als Selbstbeweis-Oracle, um sicherzustellen, dass Lesen/Schreiben nicht in Lücken/unmapped-Bereiche fällt
Bis hierhin.
page_to_virt-Implementierung,
no-map-Reservierungsbereiche existieren im linearen Mapping überhaupt nicht (Lesen führt zu panic).docs/
01-exploit-chain.md Von UAF zu Lese-/Schreibprimitiven: Prinzipien und Implementierungspunkte jeder Phase
02-physical-address-model.md Physisches Adressmodell, Sicherheitstore, m-Ambiguität, bekannte Fallstricke
exploit/
cve-2021-28664-poc.c PoC-Vorlage: vollständiges Prozessgerüst der Lese-/Schreibprimitive (ohne Gerätewerte)
scripts/
README.md Designbeschreibung der experimentellen Automatisierungswerkzeuge (Schleife/Validierung/Wiederherstellung)
exploit/cve-2021-28664-poc.c ist die PoC-Gerüstvorlage der Lese-/Schreibprimitive:
TODO(DEVICE) gekennzeichnet, keine direkt verwendbaren Werte;Es dient dem Verständnis, wie die gesamte Kette organisiert ist, und kann nicht direkt zu einem für irgendein Gerät wirksamen Werkzeug kompiliert werden.
fs/pipe.c / include/linux/pipe_fs_i.h (öffentlicher Quellcode)Documentation/arch/arm64/memory.rst (öffentliche Dokumentation)exploit/): GPL-3.0, siehe LICENSEdocs/, scripts/): CC BY-NC-SA 4.0, siehe LICENSE-DOCS
(kommerzielle Nutzung verboten; abgeleitete Inhalte müssen unter gleichen Bedingungen geteilt werden und dieser Hinweis muss erhalten bleiben)| Phase | Voraussetzung |
|---|
| Schwachstelle selbst | Mali kbase Treiberversion fällt in den von CVE-2021-28664 betroffenen Bereich (r-Serie vor dem Upstream-Fix); unabhängig von der Kernelversion, nur der Treiber zählt |
| GPU-Ressourcen | /dev/mali für die Anwendung erreichbar; MEM_ALLOC unterstützt SAME_VA große Puffer; MEM_ALIAS-Verhalten entspricht der Schwachstellenbeschreibung |
| Pipeline-Wiederverwendung | Linux ≥ 4.5 (pipe_buf_operations eingeführt), praktisch bestätigt für 4.9 ~ 4.14; F_SETPIPE_SZ kann die Pipe auf eine einzelne Seite reduzieren |
| KASLR-Leak | Kernel mit CONFIG_RANDOMIZE_BASE aktiviert (arm64 ≥ 4.6); anon_pipe_buf_ops in der öffentlichen Symboltabelle vorhanden |
| Physisches Adressmodell | arm64 + vmemmap-Layout; sizeof(struct page), Seitentabellenformat müssen praktisch gemessen werden, keine Annahmen |