
Ursachenanalyse und Proof-of-Concept für CVE-2026-64705, einen macOS HFS-xattr-Kernel-Heap-Overflow. Enthält eine weaponisierte HFS+-Image, einen Patcher, einen Parser und eine detaillierte Dokumentation für Bildungs- und Verteidigungsforschung.
Root-Cause-Analyse und Proof-of-Concept für CVE-2026-64705, einen Pufferüberlauf in der HFS-Kernel-Erweiterung, der in macOS Sonoma 14.8.7 (HT127117) behoben wurde:
HFS — Auswirkung: Eine App könnte einen unerwarteten Systemabbruch verursachen oder Kernel-Speicher beschreiben. Ein Pufferüberlauf wurde durch verbesserte Grenzprüfungen behoben.
Der PoC ist ein bewaffnetes HFS+-Datenträgerabbild. Das Einhängen und Lesen eines
präparierten erweiterten Attributs treibt das HFS-kext in eine unbegrenzte
64-Byte-bcopy-Schleife in einen 512-Byte-Kernel-Heap-Puffer → Kernel-Heap-Overflow
mit angreiferkontrolliertem On-Disk-Inhalt → Panik auf verwundbaren Builds.
Absturz-/Panik-Stufe — kein RCE.
adds/b.hs-Übertrags-
prüfungen, Null-Zähler-Terminierung sowie total==0-/total>expected-Ablehnung hinzuhfs_setxattr: %s has a malformed overflow extent, ebenso für getxattr.| Datei | Zweck |
|---|---|
poc-cve-2026-64705.dmg | Bewaffnetes 32-MB-HFS+-Abbild (Trigger-Datei + präparierte xattr-Datensätze) |
weaponize.py | Der Patcher, der das Abbild erstellt hat — leitet jeden Offset aus dem Abbild selbst neu ab; funktioniert mit jedem kompatiblen Basis-Abbild |
parse_attr.py | Attribut-B-Baum-Parser zum Auffinden/Ausgeben der xattr-Datensätze |
BUILD.md | Vollständiges Build-Rezept aus einem sauberen Basis-Abbild plus die exakten Hex-Deltas |
WRITEUP.md | Root-Cause-Analyse: kext-Diff (14.8.5 vs. 14.8.7), verwundbare Schleife, Mechanismus |
Auf einem Vor-Fix-System (oder einer Opfer-VM — dies verursacht eine Kernel-Panik):
hdiutil attach -nobrowse poc-cve-2026-64705.dmg
xattr -l /Volumes/CVE64705/trigger.txt # Kernel-Heap-Overflow -> Panik
Auf einem gepatchten System lässt sich dasselbe Abbild problemlos einhängen, und der Auslöser wird vom neuen Validator abgewiesen — den Differenzbeweis können Sie im Kernel-Log beobachten:
hfs_getxattr: bigattr has a malformed overflow extent
Dies bestätigt zugleich, dass der präparierte Datensatz die Ausführung exakt in den gepatchten (und zuvor verwundbaren) Durchlauf lenkt.
hdiutil create -fs HFS+ -size 32m -volname CVE64705 base.dmg
hdiutil attach -nobrowse base.dmg
echo trigger > /Volumes/CVE64705/trigger.txt
xattr -w bigattr "$(head -c 8192 /dev/zero | base64)" /Volumes/CVE64705/trigger.txt
hdiutil detach /Volumes/CVE64705
python3 weaponize.py # -> poc-cve-2026-64705.dmg
Bei einem großen xattr, das als kHFSPlusAttrForkData gespeichert ist, durchläuft
hfs_getxattr_internal (und das gespiegelte hfs_setxattr_internal) die 8
Extent-Deskriptoren des Overflow-Datensatzes. count_extent_blocks() überspringt
jeden Deskriptor, dessen blockCount die erwartete Gesamtsumme übersteigt, und
gibt die 32-Bit-Summe ohne Übertrags- oder Nullprüfung zurück. Wenn jeder
blockCount die Gesamtsumme übersteigt, kommt der Zähler als 0 zurück, blkcnt
schreitet nie voran, und die while (blkcnt < totalblocks)-Schleife kopiert
weiterhin 64 angreiferkontrollierte Bytes pro Iteration über einen
totalblocks*8-Byte-Heap-Puffer hinaus. Die Integer-Wrap-Variante (blockCounts,
die sich über 2^32 summieren) ist dieselbe fehlende Prüfung; der 14.8.7-Patch
beseitigt beide.
Für Bildungs- und defensive Forschungszwecke. Der Fehler ist im aktuellen macOS behoben; testen Sie nur auf Maschinen, die Ihnen gehören.