CVE-2025-43300: iOS/macOS DNG 이미지 처리 메모리 손상
개요
CVE-2025-43300은 Apple의 이미지 처리 프레임워크에서 발견된 심각한 메모리 손상 취약점으로, iOS 18.6.1 및 macOS 시스템에 영향을 미칩니다. 이 취약점은 RawCamera.bundle 내 JPEG 무손실 압축 해제 코드에 존재하며, DNG 파일 내 TIFF 메타데이터와 JPEG 스트림 매개변수 간 불일치로 인해 발생합니다.
취약점 세부 정보
근본 원인
이 취약점은 DNG(Digital Negative) 파일의 메타데이터/스트림 불일치에서 비롯됩니다:
- TIFF 헤더의 SamplesPerPixel 메타데이터는 예상 색상 구성 요소를 나타냅니다.
- JPEG 무손실 스트림의 SOF3 구성 요소 수는 실제 데이터 구성 요소를 지정합니다.
- 이 값들이 다를 경우 할당과 처리가 정렬되지 않습니다.
메모리 손상 흐름
1. 파서가 TIFF 메타데이터에서 SamplesPerPixel을 읽음 (예: 2개 구성 요소)
2. 시스템 버퍼 할당: width × height × 2 구성 요소
3. JPEG 디코더가 SOF3 구성 요소 수를 읽음 (예: 1개 구성 요소)
4. 디코더가 일관되지 않은 가정에 따라 데이터를 씀
5. 할당된 것보다 더 많은 데이터가 기록되어 버퍼 오버플로우 발생
공격 벡터
- 제로 클릭 취약점: 사용자 상호 작용 불필요
- 자동 처리: DNG 파일을 보거나, 가져오거나, 수신하면 트리거됨
- 교차 플랫폼 영향: iOS 및 macOS 시스템 모두에 영향
- 메모리 손상: 애플리케이션 충돌 또는 잠재적 코드 실행으로 이어질 수 있음
도구 개요
이 저장소에는 CVE-2025-43300을 분석 및 재현하기 위한 두 가지 Python 도구가 포함되어 있습니다.
1. DNG 취약점 분석기 (dng_vulnerability_analyzer.py)
목적: DNG 파일 구조를 분석하여 취약점 조건 식별
주요 기능:
- IFD 및 SubIFD를 포함한 TIFF/DNG 파일 구조 파싱
- SamplesPerPixel 메타데이터 태그 위치 찾기
- JPEG 무손실 SOF3 마커 및 구성 요소 수 식별
- 메타데이터/스트림 불일치 감지
- 정확한 바이트 오프셋 보고
사용법:
python3 dng_vulnerability_analyzer.py <dng_file>
출력:
- 파일 구조 분석
- 메타데이터 태그 위치 및 값
- JPEG 스트림 구성 요소 정보
- 취약점 평가
- PoC 제작을 위한 특정 오프셋
2. 안전한 16진수 수정기 (hex_modifier.py)
목적: 특정 바이트를 안전하게 수정하여 개념 증명 파일 생성
주요 기능:
- 수정 전 예상 바이트 값 확인
- 파일 추적을 위한 SHA256 해시 생성
- 바이너리 diff 보고서 생성
- 우발적 손상을 방지하기 위한 안전 점검 구현
- 수동 및 자동 PoC 제작 모두 지원
사용법:
# 알려진 취약한 오프셋을 사용하여 PoC 생성
python3 hex_modifier.py create-poc <input.dng>
# 수동 바이트 수정
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# Diff 보고서 생성
python3 hex_modifier.py diff <original.dng> <modified.dng>
PoC 제작 과정
1단계: 대상 파일 분석
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
다음 항목을 식별합니다:
- SamplesPerPixel 메타데이터 위치
- JPEG SOF3 구성 요소 수 위치
- 현재 값 및 제안된 수정 사항
2단계: 취약한 샘플 생성
PoC에는 두 가지 특정 바이트 수정이 필요합니다:
- SamplesPerPixel 메타데이터 증가 (일반적으로 1에서 2로)
- SOF3 구성 요소 수 감소 (일반적으로 2에서 1로)
python3 hex_modifier.py create-poc IMGP0847.DNG
3단계: PoC 확인
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
불일치가 존재하고 취약점이 트리거됨을 확인합니다.
PoC가 작동하는 이유
기술적 메커니즘
-
할당 단계:
- 이미지 파서가 SamplesPerPixel = 2를 읽음
- 2개 구성 요소 분량의 픽셀 데이터를 위한 버퍼 할당
- 버퍼 크기 = image_width × image_height × 2
-
처리 단계:
- JPEG 무손실 디코더가 1개 구성 요소의 SOF3를 만남
- 구문 분석 논리가 실제 데이터 크기와 예상 데이터 크기 사이에서 혼란스러워짐
- 일관되지 않은 가정에 따라 데이터 쓰기 시도
-
메모리 손상:
- 원래 할당된 것보다 더 많은 데이터가 버퍼에 기록됨
- 버퍼 오버플로우가 인접 메모리 영역을 손상시킴
- 애플리케이션 충돌 또는 잠재적 코드 실행 발생
파일 형식 세부 사항
DNG 파일은 임베디드 JPEG 무손실 스트림이 있는 TIFF 컨테이너 형식을 사용합니다:
- TIFF 메타데이터는 이미지 속성 및 색상 정보를 설명합니다.
- JPEG 스트림은 압축된 픽셀 데이터를 포함합니다.
- 메타데이터와 스트림 콘텐츠 사이에는 신뢰 관계가 존재합니다.
- 검증 차이로 인해 일치하지 않는 값이 처리 코드에 도달할 수 있습니다.
영향 평가
심각도: 치명적
- CVSS 점수: 높음 (제로 클릭, 메모리 손상, 광범위한 영향)
- 영향받는 시스템: iOS 18.6.1 및 유사한 이미지 처리를 사용하는 macOS 시스템
- 공격 벡터: 네트워크/로컬 파일 전송
- 사용자 상호 작용: 필요 없음
- 범위: DNG 파일을 처리하는 모든 장치
실제 시나리오
- DNG 파일이 포함된 이메일 첨부 파일
- AirDrop 전송
- 클라우드 사진 동기화
- 사진가 샘플의 웹 다운로드
- 메시징 앱 미디어 공유
완화 및 패치
공급업체 대응
- iOS 18.6.2에서 수정됨: Apple이 적절한 메타데이터 검증을 구현함
- macOS 업데이트: macOS 이미지 처리에 유사한 수정 적용
- 근본 원인: 메타데이터와 스트림 매개변수 간의 일관성 검사 추가
권장 완화 조치
- 시스템 업데이트: iOS 18.6.2 이상 설치
- 입력 검증: 사용자 정의 파서에서 메타데이터 일관성 확인
- 경계 검사: 엄격한 버퍼 크기 검증 구현
- 퍼징: 파일 형식 파서의 정기적인 테스트
파일 구조 및 기술 세부 정보
TIFF/DNG 구조
TIFF 헤더 → IFD 체인 → SubIFD → 이미지 데이터
├── 메타데이터 태그 (SamplesPerPixel, Compression 등)
├── JPEG 무손실 스트림 (SOF3 마커)
└── 픽셀 데이터 (압축됨)
주요 취약점 위치
- SamplesPerPixel 태그: IFD 구조의 TIFF 태그 0x0115
- SOF3 마커: JPEG 무손실 프레임 시작 (0xFFC3)
- 구성 요소 수: SOF3 마커에서 바이트 오프셋 +9
- 중요 불일치: 태그 값 ≠ 구성 요소 수인 경우
테스트 지침
안전한 테스트 환경
- 격리된 시스템 사용: VM 또는 전용 테스트 장치
- 스냅샷 생성: PoC 파일 테스트 전
- 충돌 모니터링: 시스템 로그 및 충돌 보고서 확인
- 네트워크 격리: 의도하지 않은 파일 공유 방지
예상 동작
- 취약한 시스템: 애플리케이션 충돌, 메모리 손상 오류
- 패치된 시스템: 정상적인 오류 처리 또는 올바른 처리
- 로그 표시기: 메모리 액세스 위반, 세그멘테이션 오류
기술 참조
파일 형식 문서
- TIFF 6.0 사양: 태그 구조 및 IFD 형식
- DNG 사양: Adobe Digital Negative 형식
- JPEG 표준: 무손실 압축 (ITU-T T.87)
보안 연구
- 메모리 손상 기법: 버퍼 오버플로우 기초
- 파일 형식 퍼징: 자동화된 취약점 발견
- 파서 보안: 입력 검증 모범 사례
면책 조항: 이 연구는 교육 및 방어적 보안 목적으로만 제공됩니다. 사용자는 해당 법률 및 윤리 지침을 준수할 책임이 있습니다.
참고
충돌이 트리거되는 데 약 1~3분이 소요됩니다. 재미있게 즐기세요.
PoC의 경우 open vuln_file.dng을 실행하여 파일을 실행하거나 미리보기만 해도 실행됩니다.