
Ursachenanalyse und Erreichbarkeits-PoC für CVE-2026-64747, einen Pufferüberlauf in der AppleAVE2-Kernel-Erweiterung. Enthält das rekonstruierte IOKit-Wire-Protokoll, die Überlaufberechnung und einen Userspace-PoC, der den Konfigurationspfad ansteuert.
Root-Cause-Analyse und macOS-Erreichbarkeits-PoC für
CVE-2026-64747, einen Pufferüberlauf in der AppleAVE2-Video-Encoder-Kernel-
Erweiterung (com.apple.driver.AppleAVE2), behoben in macOS 26.6 (Kext 905.40.1).
AppleAVE2 — Auswirkung: Eine App kann möglicherweise beliebigen Code mit Kernel- Privilegien ausführen. Ein Pufferüberlauf in der Berechnung der Arbeitspuffergröße des Encoders wurde durch verbesserte Grenzprüfungen behoben.
Dieses Repository dokumentiert das vollständig rekonstruierte IOKit-Wire-Protokoll von
AppleAVE2UserClient (Sitzung erstellen → konfigurieren → Verarbeitung pro Frame), die
exakte Überlaufstelle (ein 32-Bit-LRB-Arbeitspuffergrößen-Rechner im HEVC-
10-Bit-Multipass-Pfad) sowie einen Userspace-PoC, der den User-Client öffnet, den
Konfigurationspfad durch den Validierungs-Stack des Kernels treibt und die
Differenz zwischen verwundbaren (905.36.1) und behobenen (905.40.1) Builds demonstriert.
Stufe (ehrlich): Erreichbarkeit + vollständige Protokoll-RE + analytisch bewiesene Überlauf-Mathematik. Kein RCE, kein Live-Überlauf demonstriert — der Labor-Host läuft mit dem behobenen Kext, und eine Hardware-Fähigkeits-Sperre (in beiden Builds vorhanden) lehnt die überlaufenden Abmessungen ab, bevor der verwundbare Rechner läuft. Das Auslösen des Überlaufs erfordert ein Ziel, dessen Fähigkeitstabelle die erforderlichen Abmessungen zulässt (siehe FIRE_READY.md §5-6).
| Datei | Zweck |
|---|---|
poc_ave2_reach.c | IOKit-Userspace-PoC: öffnet AppleAVE2UserClient, erstellt eine Sitzung, treibt die Konfiguration mit den rekonstruierten Strukturen. Keine Berechtigungen erforderlich. |
ave2_wire.h | Das rekonstruierte Wire-Format: Selektornummern, Strukturgrößen und jedes relevante Feld-Offset (Breite/Höhe, encType, views/layers, Chroma, Bittiefe) |
WIRE_FORMAT.md | Wire-Format-Referenz: Dispatch-Tabellen-Layout, PAC-Eigenheit, Verträge pro Selektor |
FIRE_READY.md | Die Überlauf-Mathematik (Mode-5-LRB-Rechner), die exakte Eingabe zum Auslösen, Lauf-Evidenz auf gepatchtem Host und die verbleibenden Unbekannten |
evidence/ | ioreg-Erfassung + Kernel-Logs der Läufe auf dem gepatchten Host (Validierungs-Stack-Fortschritt) |
clang -O0 -g -arch arm64 -framework IOKit -framework CoreFoundation \
-o poc_ave2_reach poc_ave2_reach.c
./poc_ave2_reach # Root nicht erforderlich; Dienst öffnet aus Benutzerkontext
Der Encoder von AppleAVE2 berechnet eine LRB-Arbeitspuffergröße (Lookaside-Referenzpuffer)
mit 32-Bit-Arithmetik und ohne Überlaufprüfung. Im HEVC-10-Bit-Multipass-Pfad (Rechner
aufgerufen mit param_2 = 5) lassen Abmessungen wie 64656×8080 (die die
w*h ≤ 0x1FFE0000-Begrenzung des Treibers passieren) die Komponentensumme
0x80000000 werden — Vorzeichenbit gesetzt. Der verwundbare Rechner gibt
die nackte 32-Bit-Summe zurück; die Größe wird nachgelagert als negativ behandelt,
ein zu kleiner DART/IOMMU-Puffer wird zugewiesen, und der Encoder-DMA schreibt
darüber hinaus → Kernel-Heap/DART-Korruption → Kernel-Code-Ausführung. Der behobene
Rechner fügt Vorzeichenprüfungen pro Komponente und eine 64-Bit-Summenprüfung hinzu
und protokolliert LRB size overflow.
__const-Abschnitt der Metaklasse dekodiert (Zeilen mit
Schrittweite 0x18 = {func, inSize<<32, outSize<<32}, mit einer PAC-Pointer-Eigenheit).IOServiceOpen muss type=1 verwenden (type=0 → Erstellung abgelehnt).IOConnectCallAsyncStructMethod laufen (der synchrone Pfad wird an der
IO_Config:337-Sperre vor der Validierung abgelehnt).Für Bildungs- und Verteidigungsforschungszwecke. Der Fehler ist im aktuellen macOS behoben; teste nur auf Hardware, die dir gehört.