Notas de engenharia reversa e PoC funcional para CVE-2026-84568, uma violação de limite de confiança do automountd do macOS que permite montagens a partir de localhost ou do próprio hostname da vítima.
Engenharia reversa independente do patch do autofs do macOS para CVE-2026-84568, além de um PoC funcional para a violação de fronteira de confiança.
A Apple publicou o aviso. Mr.Gedik (@h4ck2s3c) reportou o bug. Este repositório documenta o mecanismo técnico — a função corrigida, o que a verificação faz e quais caminhos de montagem o patch bloqueia — e inclui um PoC funcional que reproduz a violação de confiança em um sistema vulnerável.
| Campo | Valor |
|---|
| CVE | CVE-2026-84568 |
| Componente | autofs / automountd |
| Afetado | macOS Tahoe 26.6 e anteriores |
| Corrigido em | macOS Tahoe 26.7, macOS Golden Gate 27, macOS Sequoia 15.8 |
| Impacto do aviso | "Um atacante com controle de um servidor de diretório de rede pode ser capaz de executar código arbitrário com privilégios de root." |
| Reportado por | Mr.Gedik (@h4ck2s3c) da Turkish Technology |
O aviso da Apple para CVE-2026-84568 documenta o impacto e a versão da correção. Ele não documenta o mecanismo técnico:
Nenhum writeup técnico público foi encontrado no momento da escrita.
Este repositório preenche essa lacuna com uma análise independente de
engenharia reversa de automountd_26.6 e automountd_27, e um PoC
funcional para a violação de fronteira de confiança subjacente.
Isto não é uma reivindicação de descoberta. O CVE foi reportado por Mr.Gedik e corrigido pela Apple. A contribuição aqui é a análise técnica e a reprodução.
O automountd busca mapas de automount de um serviço de diretório
configurado (LDAP, NIS, OpenDirectory). Na versão vulnerável (26.6 e
anteriores), o automountd não validava se o componente de host
de uma entrada de mapa resolvia para a máquina local.
Um servidor de diretório malicioso poderia, portanto, servir uma entrada de mapa cuja origem de montagem era:
localhost<hostname>.local)127.0.0.1A vítima então montaria a partir de si mesma em um ponto de montagem controlado pelo atacante.
A versão corrigida (26.7 / 27) adiciona uma verificação de hostname em
sym.func.100005bd8 que rejeita entradas que correspondam a qualquer
um dos itens acima.
sym.func.100005bd8 entre automountd_26.6
e automountd_27 — veja docs/PATCH_DIFF.mdstrncasecmp contra
"localhost", gethostname(), SCDynamicStoreCopyLocalHostName +
".local", e um loop getifaddrs / getipnodebyaddr enumerando
todos os IPs locaisfstype através de parse_nfs →
mapline_to_mapent → asprintf("%s/mount_%s", "/sbin", fstype) —
o campo não é validado antes de construir o caminho do programawebdavfs_agent — o
callback characters usa __memcpy_chk com verificações explícitas
de comprimento; sem overflowod_process_record_attributes — o parser de registros
do OpenDirectory usa APIs CoreFoundation em todo o código; sem
buffers de tamanho fixomount_nfs, mount_smbfs,
mount_url e todos os bundles NetFSPlugins/* verificados quanto a
execução de shell; nenhum encontradoVeja docs/ANALYSIS.md para o writeup completo e
docs/ARTIFACTS.md para endereços e amostras de log.
poc.sh — uma configuração do lado do atacante em arquivo único.
Inicia um servidor LDAP com um mapa malicioso auto_master /
auto_evil e uma exportação NFS com um marcador de prova de acesso.
Quando o automountd da vítima busca o mapa, ele monta sua própria
exportação NFS no caminho controlado pelo atacante.auto_master /
auto_evil elaboradoautomountd da vítima buscando o mapa pela rede127.0.0.1O impacto de "execução de código arbitrário com privilégios de root"
no aviso da Apple não é alcançável através dos caminhos testados
nesta análise. Veja a seção "Caminhos testados e descartados" em
docs/ANALYSIS.md para a lista completa.
O impacto demonstrado é a violação de fronteira de confiança em si: a vítima monta a partir de uma origem que deveria ter rejeitado.
poc.sh configuração do lado do atacante (arquivo único)
docs/
ANALYSIS.md writeup completo de engenharia reversa
PATCH_DIFF.md diff de sym.func.100005bd8 entre 26.6 e 27
ARTIFACTS.md endereços e amostras de log
README.md este arquivo
LICENSE
Quatro arquivos, dois diretórios. Nada mais.
brew install openldap)slapd.conf definindo: database mdb com suffix "dc=evil,dc=local"nfsd) — vem com o macOSslapd, nfsd, /etc/exports)automountd vulnerável)+auto_master presente em /etc/auto_masternfsd em execução na vítima, exportando um diretórioA vítima precisa de um servidor NFS em execução para que a montagem
seja bem-sucedida. O CVE é sobre a aceitação da entrada de host
local, não sobre a entrega da exportação. Se a vítima não executar o
nfsd, a montagem falha com NFS server 127.0.0.1 not responding —
o que ainda demonstra que o automountd aceitou a entrada.
./poc.sh <ATTACKER_IP>
Substitua <ATTACKER_IP> pelo IP do atacante conforme visto pela vítima.
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
cat /System/Volumes/Data/mnt/evil/evil/proof.txt
O arquivo proof.txt é legível através da montagem. A origem da
montagem na saída de 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)
A presença de nodev e nosuid reflete os padrões de montagem NFS do
kernel e o próprio tratamento de opções do mount_nfs — eles não vêm
do automountd. Veja docs/ANALYSIS.md para a análise completa.
Em um sistema corrigido (26.7 / 27), a mesma entrada de mapa é
rejeitada antes de qualquer tentativa de montagem. Veja
docs/PATCH_DIFF.md para a comparação de
desmontagem de sym.func.100005bd8.
Para confirmar em um host corrigido:
# Sirva a mesma entrada de mapa, então na vítima corrigida:
sudo automount -vc
ls /System/Volumes/Data/mnt/evil/evil/
Esperado: o ponto de montagem não é criado, e nenhuma entrada aparece
na saída de mount. A verificação sym.func.100005bd8 rejeita a
entrada quando o host é 127.0.0.1, localhost ou o hostname local.
fstype (achado separado)Durante a análise, uma fraqueza separada de defesa em profundidade foi
encontrada: sym.func.1000086f4 (run_mount_cmd) constrói um caminho
de programa via asprintf("%s/mount_%s", "/sbin", fstype) sem
validar o campo fstype da entrada de mapa.
Sequências de path traversal em fstype alcançam a chamada asprintf:
automountd: Can't stat mount program /sbin/mount_../../../../../../tmp/evil_prog: No such file or directory
Em uma instalação padrão do macOS, o caminho resultante não resolve
para um executável porque /sbin/mount_.. não existe. A injeção é
real, mas bloqueada pela resolução de caminho. Ela se tornaria
explorável apenas se existisse um caminho gravável sob /sbin, ou se
um symlink de diretório mount_<X> fosse criado — nenhuma das duas
condições se aplica ao macOS padrão.
Isto é documentado como uma observação separada, não como parte do
CVE-2026-84568. Veja docs/ANALYSIS.md para detalhes.
Este repositório é fornecido para pesquisa de segurança defensiva e educação apenas.
MIT. Veja LICENSE.