
CVE-2026-64747에 대한 근본 원인 분석 및 도달 가능성 PoC로, AppleAVE2 커널 확장의 버퍼 오버플로우입니다. 역분석된 IOKit 와이어 프로토콜, 오버플로우 계산, 그리고 configure 경로를 구동하는 사용자 공간 PoC를 포함합니다.
CVE-2026-64747에 대한 근본 원인 분석 및 macOS 도달 가능성 개념 증명(PoC)입니다.
macOS 26.6(kext 905.40.1)에서 수정된 AppleAVE2 비디오 인코더 커널
확장(com.apple.driver.AppleAVE2)의 버퍼 오버플로우입니다.
AppleAVE2 — 영향: 앱이 커널 권한으로 임의 코드를 실행할 수 있을 수 있음. 인코더의 작업 버퍼 크기 계산에서 버퍼 오버플로우가 발견되었으며, 개선된 경계 검사를 통해 해결되었습니다.
이 저장소는 AppleAVE2UserClient의 완전히 리버스 엔지니어링된 IOKit 와이어 프로토콜(세션 생성 → 구성 → 프레임별 처리), 정확한 오버플로우 지점(HEVC 10비트 멀티패스 경로의 32비트 LRB 작업 버퍼 크기 계산기), 그리고 사용자 클라이언트를 열고 커널의 검증 스택을 통해 구성 경로를 구동하며 취약한 빌드(905.36.1)와 수정된 빌드(905.40.1) 간의 차이를 입증하는 사용자 공간 PoC를 문서화합니다.
등급(정직하게): 도달 가능성 + 전체 프로토콜 RE + 분석적으로 입증된 오버플로우 수학. RCE 아님, 실제 오버플로우 시연 없음 — 실험실 호스트는 수정된 kext를 실행하며, (두 빌드 모두에 존재하는) 하드웨어 기능 게이트가 취약한 계산기가 실행되기 전에 오버플로우를 유발하는 치수를 거부합니다. 오버플로우를 발생시키려면 기능 테이블이 필요한 치수를 허용하는 대상이 필요합니다(FIRE_READY.md §5-6 참조).
| 파일 | 설명 |
|---|
poc_ave2_reach.c | IOKit 사용자 공간 PoC: AppleAVE2UserClient를 열고, 세션을 생성하고, 리버스된 구조체로 구성을 구동합니다. 자격(entitlement) 불필요. |
ave2_wire.h | 리버스된 와이어 포맷: 셀렉터 번호, 구조체 크기, 중요한 모든 필드 오프셋(너비/높이, encType, views/layers, chroma, 비트 심도) |
WIRE_FORMAT.md | 와이어 포맷 참조: 디스패치 테이블 레이아웃, PAC 특이점, 셀렉터별 계약 |
FIRE_READY.md | 오버플로우 수학(모드-5 LRB 계산기), 이를 트리거하는 정확한 입력, 패치된 호스트 실행 증거, 남은 미지 사항 |
evidence/ | 패치된 호스트 실행의 ioreg 캡처 + 커널 로그(검증 스택 진행) |
clang -O0 -g -arch arm64 -framework IOKit -framework CoreFoundation \
-o poc_ave2_reach poc_ave2_reach.c
./poc_ave2_reach # 루트 불필요; 서비스는 사용자 컨텍스트에서 열림
AppleAVE2의 인코더는 오버플로우 검사 없이 32비트 산술로 LRB(룩어사이드 참조 버퍼) 작업 버퍼 크기를 계산합니다. HEVC 10비트 멀티패스 경로(param_2 = 5로 호출되는 계산기)에서 64656×8080과 같은 치수(드라이버의 w*h ≤ 0x1FFE0000 클램프를 통과함)는 구성 요소 합계가 0x80000000이 되게 합니다 — 부호 비트 설정. 취약한 계산기는 순수한 32비트 합계를 반환합니다. 크기는 다운스트림에서 음수로 처리되고, 과소 크기의 DART/IOMMU 버퍼가 할당되며, 인코더 DMA가 이를 초과하여 기록합니다 → 커널 힙/DART 손상 → 커널 코드 실행. 수정된 계산기는 구성 요소별 부호 검사와 64비트 합계 검사를 추가하고 LRB size overflow를 기록합니다.
__const 섹션에서 디코딩된 디스패치 테이블(스트라이드 0x18 = {func, inSize<<32, outSize<<32} 행, PAC 포인터 특이점 포함).IOServiceOpen은 type=1을 사용해야 함(type=0 → 생성 거부).IOConnectCallAsyncStructMethod를 거쳐야 함(동기 경로는 검증 전 IO_Config:337 게이트에서 거부됨).교육 및 방어적 연구 목적으로 제공됩니다. 이 버그는 현재 macOS에서 패치되었습니다. 소유한 하드웨어에서만 테스트하십시오.