
CVE-2026-84568에 대한 리버스 엔지니어링 노트 및 동작하는 PoC로, localhost 또는 피해자 자신의 호스트 이름에서 마운트를 허용하는 macOS automountd 신뢰 경계 위반입니다.
| 필드 | 값 |
|---|
| CVE | CVE-2026-84568 |
| 구성 요소 | autofs / automountd |
| 영향 받는 버전 | macOS Tahoe 26.6 및 이전 |
| 패치된 버전 | macOS Tahoe 26.7, macOS Golden Gate 27, macOS Sequoia 15.8 |
| 권고문 영향 | "네트워크 디렉터리 서버를 제어하는 공격자가 root 권한으로 임의 코드를 실행할 수 있습니다." |
| 보고자 | Turkish Technology의 Mr.Gedik(@h4ck2s3c) |
CVE-2026-84568에 대한 Apple의 권고문은 영향과 패치 버전을 문서화합니다. 하지만 기술적 메커니즘은 문서화하지 않습니다:
작성 시점에 공개된 기술 문서는 발견되지 않았습니다. 이 저장소는
automountd_26.6과 automountd_27에 대한 독립적인 리버스 엔지니어링
분석과 근본적인 신뢰 경계 위반에 대한 동작하는 PoC로 그 공백을 채웁니다.
이것은 발견 주장이 아닙니다. CVE는 Mr.Gedik에 의해 보고되었고 Apple에 의해 패치되었습니다. 여기서의 기여는 기술적 분석과 재현입니다.
automountd는 구성된 디렉터리 서비스(LDAP, NIS, OpenDirectory)로부터
automount 맵을 가져옵니다. 취약한 버전(26.6 및 이전)에서 automountd는
맵 항목의 호스트 구성 요소가 로컬 머신으로 확인되는지 검증하지 않았습니다.
따라서 악성 디렉터리 서버는 마운트 소스가 다음과 같은 맵 항목을 제공할 수 있었습니다:
localhost<hostname>.local)127.0.0.1을 포함한 모든 로컬 IP 주소그러면 피해자는 공격자가 제어하는 마운트 지점에서 자기 자신으로부터 마운트하게 됩니다.
패치된 버전(26.7 / 27)은 sym.func.100005bd8에 호스트 이름 검사를 추가하여
위의 항목 중 어느 것과든 일치하는 항목을 거부합니다.
automountd_26.6과 automountd_27 간의 sym.func.100005bd8
디스어셈블리 diff — docs/PATCH_DIFF.md 참조"localhost", gethostname(),
SCDynamicStoreCopyLocalHostName + ".local", 그리고 모든 로컬 IP를
열거하는 getifaddrs / getipnodebyaddr 루프에 대한 strncasecmpparse_nfs → mapline_to_mapent →
asprintf("%s/mount_%s", "/sbin", fstype)를 통한 fstype 필드의
추적 — 이 필드는 프로그램 경로를 구성하기 전에 검증되지 않음webdavfs_agent의 XML 파서에 대한 SAX 콜백 분석 — characters
콜백은 명시적 길이 검사와 함께 __memcpy_chk를 사용하며 오버플로 없음od_process_record_attributes 분석 — OpenDirectory 레코드 파서는
전반적으로 CoreFoundation API를 사용하며 고정 크기 버퍼 없음mount_nfs, mount_smbfs, mount_url,
그리고 모든 NetFSPlugins/* 번들에 대해 셸 실행 여부를 검사했으며
발견되지 않음전체 문서는 docs/ANALYSIS.md를, 주소와 로그 샘플은
docs/ARTIFACTS.md를 참조하세요.
poc.sh — 단일 파일 공격자 측 설정. 악성 auto_master /
auto_evil 맵을 가진 LDAP 서버와 접근 증명 마커가 있는 NFS export를
시작합니다. 피해자의 automountd가 맵을 가져오면, 공격자가 제어하는
경로에 자신의 NFS export를 마운트합니다.auto_master / auto_evil 맵을 제공하는 악성 LDAP 서버automountd가 네트워크를 통해 맵을 가져오는 것127.0.0.1인 것Apple 권고문의 "root 권한으로 임의 코드 실행" 영향은 이 분석에서
테스트된 경로를 통해 도달 가능하지 않습니다. 전체 목록은
docs/ANALYSIS.md의 "Paths tested and ruled out"
섹션을 참조하세요.
시연된 영향은 신뢰 경계 위반 자체입니다: 피해자가 거부했어야 할 소스로부터 마운트합니다.
poc.sh 공격자 측 설정 (단일 파일)
docs/
ANALYSIS.md 전체 리버스 엔지니어링 문서
PATCH_DIFF.md 26.6과 27 간의 sym.func.100005bd8 diff
ARTIFACTS.md 주소 및 로그 샘플
README.md 이 파일
LICENSE
네 개의 파일, 두 개의 디렉터리. 그 외에는 없습니다.
brew install openldap)slapd.conf에 정의: database mdb와 suffix "dc=evil,dc=local"nfsd) — macOS에 포함slapd, nfsd, /etc/exports용)automountd)/etc/auto_master에 +auto_master 존재nfsd로 디렉터리를 export마운트가 성공하려면 피해자가 실행 중인 NFS 서버를 필요로 합니다. 이
CVE는 export를 전달하는 것이 아니라 로컬 호스트 항목의 수용에 관한
것입니다. 피해자가 nfsd를 실행하지 않으면 마운트는
NFS server 127.0.0.1 not responding으로 실패합니다 — 이는 여전히
automountd가 해당 항목을 수용했음을 보여줍니다.
./poc.sh <ATTACKER_IP>
<ATTACKER_IP>를 피해자로부터 본 공격자의 IP로 바꾸세요.
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
cat /System/Volumes/Data/mnt/evil/evil/proof.txt
proof.txt 파일이 마운트를 통해 읽힙니다. mount 출력의 마운트 소스는
127.0.0.1:<export_dir>입니다:
127.0.0.1:/tmp/nfsroot on /System/Volumes/Data/mnt/evil/evil (nfs, nodev, nosuid, automounted, nobrowse)
nodev와 nosuid의 존재는 커널의 NFS 마운트 기본값과 mount_nfs의
자체 옵션 처리를 반영합니다 — automountd에서 온 것이 아닙니다. 전체
분석은 docs/ANALYSIS.md를 참조하세요.
패치된 시스템(26.7 / 27)에서는 동일한 맵 항목이 마운트 시도 전에
거부됩니다. sym.func.100005bd8의 디스어셈블리 비교는
docs/PATCH_DIFF.md를 참조하세요.
패치된 호스트에서 확인하려면:
# 동일한 맵 항목을 제공한 후, 패치된 피해자에서:
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
예상: 마운트 지점이 생성되지 않고 mount 출력에 항목이 나타나지
않습니다. sym.func.100005bd8 검사는 호스트가 127.0.0.1,
localhost, 또는 로컬 호스트 이름일 때 항목을 거부합니다.
fstype 주입 (별도 발견)분석 중 별도의 심층 방어 약점이 발견되었습니다:
sym.func.1000086f4(run_mount_cmd)는 맵 항목의 fstype 필드를
검증하지 않고 asprintf("%s/mount_%s", "/sbin", fstype)를 통해
프로그램 경로를 구성합니다.
fstype의 경로 순회 시퀀스가 asprintf 호출에 도달합니다:
automountd: Can't stat mount program /sbin/mount_../../../../../../tmp/evil_prog: No such file or directory
기본 macOS 설치에서는 /sbin/mount_..가 존재하지 않기 때문에 결과
경로가 실행 파일로 확인되지 않습니다. 주입은 실제이지만 경로 확인에
의해 차단됩니다. 이는 /sbin 아래에 쓰기 가능한 경로가 존재하거나
디렉터리 심볼릭 링크 mount_<X>가 생성된 경우에만 악용 가능해질
것입니다 — 둘 다 기본 macOS에서는 성립하지 않습니다.
이는 CVE-2026-84568의 일부가 아닌 별도의 관찰로 문서화되었습니다.
자세한 내용은 docs/ANALYSIS.md를 참조하세요.
이 저장소는 방어적 보안 연구 및 교육 목적으로만 제공됩니다.
MIT. LICENSE를 참조하세요.