
Reverse engineering notes and working PoC for CVE-2026-84568, a macOS automountd trust-boundary violation allowing mounts from localhost or the victim's own hostname.
Independent reverse engineering of the macOS autofs patch for CVE-2026-84568, plus a working PoC for the trust-boundary violation.
Apple published the advisory. Mr.Gedik (@h4ck2s3c) reported the bug. This repository documents the technical mechanism — the patched function, what the check does, and which mount paths the patch blocks — and includes a working PoC that reproduces the trust violation on a vulnerable system.
| Field | Value |
|---|
| CVE | CVE-2026-84568 |
| Component | autofs / automountd |
| Affected | macOS Tahoe 26.6 and earlier |
| Patched in | macOS Tahoe 26.7, macOS Golden Gate 27, macOS Sequoia 15.8 |
| Advisory impact | "An attacker with control of a network directory server may be able to execute arbitrary code with root privileges." |
| Reported by | Mr.Gedik (@h4ck2s3c) of Turkish Technology |
Apple's advisory for CVE-2026-84568 documents the impact and the patch version. It does not document the technical mechanism:
No public technical writeup was found at the time of writing. This
repository fills that gap with an independent reverse engineering
analysis of automountd_26.6 and automountd_27, and a working PoC
for the underlying trust-boundary violation.
This is not a discovery claim. The CVE was reported by Mr.Gedik and patched by Apple. The contribution here is the technical analysis and the reproduction.
automountd fetches automount maps from a configured directory service
(LDAP, NIS, OpenDirectory). In the vulnerable version (26.6 and earlier),
automountd did not validate whether the host component of a map
entry resolved to the local machine.
A malicious directory server could therefore serve a map entry whose mount source was:
localhost<hostname>.local)127.0.0.1The victim would then mount from itself at an attacker-controlled mount point.
The patched version (26.7 / 27) adds a hostname check in
sym.func.100005bd8 that rejects entries matching any of the above.
sym.func.100005bd8 between automountd_26.6
and automountd_27 — see docs/PATCH_DIFF.mdstrncasecmp against
"localhost", gethostname(), SCDynamicStoreCopyLocalHostName +
".local", and a getifaddrs / getipnodebyaddr loop enumerating
all local IPsfstype field through parse_nfs →
mapline_to_mapent → asprintf("%s/mount_%s", "/sbin", fstype) —
the field is not validated before constructing the program pathwebdavfs_agent's XML parser — the
characters callback uses __memcpy_chk with explicit length
checks; no overflowod_process_record_attributes — the OpenDirectory
record parser uses CoreFoundation APIs throughout; no fixed-size
buffersmount_nfs, mount_smbfs, mount_url,
and all NetFSPlugins/* bundles checked for shell execution; none
foundSee docs/ANALYSIS.md for the full writeup and
docs/ARTIFACTS.md for addresses and log samples.
poc.sh — a single-file attacker-side setup. Starts an LDAP
server with a malicious auto_master / auto_evil map and an NFS
export with a proof-of-access marker. When the victim's automountd
fetches the map, it mounts its own NFS export at the
attacker-controlled path.auto_master / auto_evil mapautomountd fetching the map over the network127.0.0.1The "arbitrary code execution with root privileges" impact in Apple's
advisory is not reachable through the paths tested in this analysis.
See the "Paths tested and ruled out" section in
docs/ANALYSIS.md for the full list.
The demonstrated impact is the trust-boundary violation itself: the victim mounts from a source it should have rejected.
poc.sh attacker-side setup (single file)
docs/
ANALYSIS.md full reverse-engineering writeup
PATCH_DIFF.md sym.func.100005bd8 diff between 26.6 and 27
ARTIFACTS.md addresses and log samples
README.md this file
LICENSE
Four files, two directories. Nothing else.
brew install openldap)slapd.conf defining: database mdb with suffix "dc=evil,dc=local"nfsd) — ships with macOSslapd, nfsd, /etc/exports)automountd)+auto_master present in /etc/auto_masternfsd running on the victim, exporting a directoryThe victim needs a running NFS server for the mount to succeed. The
CVE is about the acceptance of the local-host entry, not about
delivering the export. If the victim does not run nfsd, the mount
fails with NFS server 127.0.0.1 not responding — which still
demonstrates that automountd accepted the entry.
./poc.sh <ATTACKER_IP>
Replace <ATTACKER_IP> with the attacker's IP as seen from the victim.
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
cat /System/Volumes/Data/mnt/evil/evil/proof.txt
The file proof.txt is readable through the mount. The mount source
in mount output is 127.0.0.1:<export_dir>:
127.0.0.1:/tmp/nfsroot on /System/Volumes/Data/mnt/evil/evil (nfs, nodev, nosuid, automounted, nobrowse)
The presence of nodev and nosuid reflects the kernel's NFS mount
defaults and mount_nfs's own option handling — they are not from
automountd. See docs/ANALYSIS.md for the full breakdown.
On a patched system (26.7 / 27), the same map entry is rejected before
any mount attempt. See docs/PATCH_DIFF.md for
the disassembly comparison of sym.func.100005bd8.
To confirm on a patched host:
# Serve the same map entry, then on the patched victim:
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
Expected: the mount point is not created, and no entry appears in
mount output. The sym.func.100005bd8 check rejects the entry when
the host is 127.0.0.1, localhost, or the local hostname.
fstype injection (separate finding)During the analysis, a separate defense-in-depth weakness was found:
sym.func.1000086f4 (run_mount_cmd) constructs a program path via
asprintf("%s/mount_%s", "/sbin", fstype) without validating the
fstype field from the map entry.
Path traversal sequences in fstype reach the asprintf call:
automountd: Can't stat mount program /sbin/mount_../../../../../../tmp/evil_prog: No such file or directory
On a stock macOS installation, the resulting path does not resolve to
an executable because /sbin/mount_.. does not exist. The injection
is real but blocked by path resolution. It would become exploitable
only if a writable path existed under /sbin, or if a directory-symlink
mount_<X> were created — neither of which holds on stock macOS.
This is documented as a separate observation, not as part of
CVE-2026-84568. See docs/ANALYSIS.md for details.
This repository is provided for defensive security research and education only.
MIT. See LICENSE.