Notas de ingeniería inversa y PoC funcional para CVE-2026-84568, una violación del límite de confianza en automountd de macOS que permite montajes desde localhost o el propio nombre de host de la víctima.
Ingeniería inversa independiente del parche de autofs de macOS para CVE-2026-84568, más un PoC funcional para la violación de la frontera de confianza.
Apple publicó el aviso. Mr.Gedik (@h4ck2s3c) reportó el fallo. Este repositorio documenta el mecanismo técnico — la función parcheada, qué hace la comprobación y qué rutas de montaje bloquea el parche — e incluye un PoC funcional que reproduce la violación de confianza en un sistema vulnerable.
| Campo | Valor |
|---|
| CVE | CVE-2026-84568 |
| Componente | autofs / automountd |
| Afecta a | macOS Tahoe 26.6 y anteriores |
| Parcheado en | macOS Tahoe 26.7, macOS Golden Gate 27, macOS Sequoia 15.8 |
| Impacto del aviso | "Un atacante con control de un servidor de directorio de red podría ejecutar código arbitrario con privilegios de root." |
| Reportado por | Mr.Gedik (@h4ck2s3c) de Turkish Technology |
El aviso de Apple para CVE-2026-84568 documenta el impacto y la versión del parche. No documenta el mecanismo técnico:
No se encontró ningún análisis técnico público en el momento de escribir esto. Este
repositorio llena ese vacío con un análisis independiente de ingeniería inversa
de automountd_26.6 y automountd_27, y un PoC funcional
para la violación subyacente de la frontera de confianza.
Esto no es una reclamación de descubrimiento. El CVE fue reportado por Mr.Gedik y parcheado por Apple. La contribución aquí es el análisis técnico y la reproducción.
automountd obtiene mapas de automontaje de un servicio de directorio configurado
(LDAP, NIS, OpenDirectory). En la versión vulnerable (26.6 y anteriores),
automountd no validaba si el componente host de una entrada de mapa
resolvía a la máquina local.
Un servidor de directorio malicioso podía por lo tanto servir una entrada de mapa cuyo origen de montaje era:
localhost<hostname>.local)127.0.0.1La víctima entonces montaría desde sí misma en un punto de montaje controlado por el atacante.
La versión parcheada (26.7 / 27) añade una comprobación de nombre de host en
sym.func.100005bd8 que rechaza entradas que coincidan con cualquiera de las anteriores.
sym.func.100005bd8 entre automountd_26.6
y automountd_27 — véase docs/PATCH_DIFF.mdstrncasecmp contra
"localhost", gethostname(), SCDynamicStoreCopyLocalHostName +
".local", y un bucle getifaddrs / getipnodebyaddr que enumera
todas las IPs localesfstype a través de parse_nfs →
mapline_to_mapent → asprintf("%s/mount_%s", "/sbin", fstype) —
el campo no se valida antes de construir la ruta del programawebdavfs_agent — el
callback characters usa __memcpy_chk con comprobaciones explícitas de longitud;
sin desbordamientood_process_record_attributes — el parser de registros de OpenDirectory
usa APIs de CoreFoundation en todo momento; sin búferes de tamaño fijomount_nfs, mount_smbfs, mount_url,
y todos los bundles NetFSPlugins/* comprobados en busca de ejecución de shell; ninguno
encontradoVéase docs/ANALYSIS.md para el análisis completo y
docs/ARTIFACTS.md para direcciones y muestras de logs.
poc.sh — una configuración del lado del atacante en un solo archivo. Inicia un servidor
LDAP con un mapa malicioso auto_master / auto_evil y una exportación NFS
con un marcador de prueba de acceso. Cuando el automountd de la víctima
obtiene el mapa, monta su propia exportación NFS en la
ruta controlada por el atacante.auto_master / auto_evil manipuladoautomountd de la víctima obteniendo el mapa a través de la red127.0.0.1El impacto de "ejecución de código arbitrario con privilegios de root" en el aviso
de Apple no es alcanzable a través de las rutas probadas en este análisis.
Véase la sección "Rutas probadas y descartadas" en
docs/ANALYSIS.md para la lista completa.
El impacto demostrado es la violación de la frontera de confianza en sí misma: la víctima monta desde un origen que debería haber rechazado.
poc.sh configuración del lado del atacante (un solo archivo)
docs/
ANALYSIS.md análisis completo de ingeniería inversa
PATCH_DIFF.md diff de sym.func.100005bd8 entre 26.6 y 27
ARTIFACTS.md direcciones y muestras de logs
README.md este archivo
LICENSE
Cuatro archivos, dos directorios. Nada más.
brew install openldap)slapd.conf definiendo: database mdb con suffix "dc=evil,dc=local"nfsd) — viene con macOSslapd, nfsd, /etc/exports)automountd vulnerable)+auto_master presente en /etc/auto_masternfsd ejecutándose en la víctima, exportando un directorioLa víctima necesita un servidor NFS en ejecución para que el montaje tenga éxito. El
CVE trata sobre la aceptación de la entrada de host local, no sobre
entregar la exportación. Si la víctima no ejecuta nfsd, el montaje
falla con NFS server 127.0.0.1 not responding — lo cual aún
demuestra que automountd aceptó la entrada.
./poc.sh <ATTACKER_IP>
Reemplace <ATTACKER_IP> con la IP del atacante tal como se ve desde la víctima.
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
cat /System/Volumes/Data/mnt/evil/evil/proof.txt
El archivo proof.txt es legible a través del montaje. El origen del montaje
en la salida de mount es 127.0.0.1:<export_dir>:
127.0.0.1:/tmp/nfsroot on /System/Volumes/Data/mnt/evil/evil (nfs, nodev, nosuid, automounted, nobrowse)
La presencia de nodev y nosuid refleja los valores predeterminados de montaje NFS del kernel
y el propio manejo de opciones de mount_nfs — no provienen de
automountd. Véase docs/ANALYSIS.md para el desglose completo.
En un sistema parcheado (26.7 / 27), la misma entrada de mapa es rechazada antes de
cualquier intento de montaje. Véase docs/PATCH_DIFF.md para
la comparación de desensamblado de sym.func.100005bd8.
Para confirmar en un host parcheado:
# Serve the same map entry, then on the patched victim:
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
Esperado: el punto de montaje no se crea, y no aparece ninguna entrada en
la salida de mount. La comprobación de sym.func.100005bd8 rechaza la entrada cuando
el host es 127.0.0.1, localhost, o el nombre de host local.
fstype (hallazgo separado)Durante el análisis, se encontró una debilidad separada de defensa en profundidad:
sym.func.1000086f4 (run_mount_cmd) construye una ruta de programa mediante
asprintf("%s/mount_%s", "/sbin", fstype) sin validar el
campo fstype de la entrada del mapa.
Las secuencias de path traversal en fstype alcanzan la llamada a asprintf:
automountd: Can't stat mount program /sbin/mount_../../../../../../tmp/evil_prog: No such file or directory
En una instalación estándar de macOS, la ruta resultante no resuelve a
un ejecutable porque /sbin/mount_.. no existe. La inyección
es real pero está bloqueada por la resolución de rutas. Se volvería explotable
solo si existiera una ruta escribible bajo /sbin, o si se creara un
symlink de directorio mount_<X> — ninguna de las cuales se cumple en macOS estándar.
Esto se documenta como una observación separada, no como parte de
CVE-2026-84568. Véase docs/ANALYSIS.md para más detalles.
Este repositorio se proporciona únicamente para investigación de seguridad defensiva y educación.
MIT. Véase LICENSE.