
CVE-2025-70342: Interceptação de credenciais via Named Pipe no erase-install
O erase-install anterior à v40.4 (commit 2c31239) grava a saída de credenciais do swiftDialog num caminho fixo /var/tmp/dialog.json. Em Macs com Apple Silicon, as credenciais de administrador introduzidas durante operações de reinstalação/apagamento são gravadas nesta localização previsível e gravável por todos. Um atacante local sem privilégios pode criar um named pipe (FIFO) neste caminho para intercetar as credenciais de administrador em tempo real.
Pontuação: 7.1 (Alta)
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
| Métrica | Valor |
|---|---|
| Vetor de Ataque | Local |
| Complexidade de Ataque | Baixa |
| Privilégios Necessários | Baixos |
| Interação do Usuário | Requerida (o administrador insere as credenciais) |
| Escopo | Inalterado |
| Confidencialidade | Alta |
| Integridade | Alta |
| Disponibilidade | Nenhuma |
Arquivo: erase-install.sh
Linha 72:
dialog_output="/var/tmp/dialog.json"
Linha 124:
"$dialog_bin" "${dialog_args[@]}" ... 2>/dev/null > "$dialog_output"
Em Macs com Apple Silicon, o erase-install solicita as credenciais do administrador via swiftDialog. As credenciais (nome de usuário + senha) são gravadas via redirecionamento de shell para /var/tmp/dialog.json — um caminho fixo num diretório gravável por todos. O script não verifica se esse caminho foi adulterado antes de gravar.
1. Unprivileged attacker creates a named pipe (FIFO): mkfifo /tmp/.fifo
2. Attacker creates symlink: ln -s /tmp/.fifo /var/tmp/dialog.json
3. Attacker reads from FIFO (blocks, waiting for data)
4. Admin runs: sudo erase-install.sh --erase
5. Admin enters credentials in swiftDialog prompt
6. Credentials flow through symlink → FIFO → attacker's terminal
Este ataque não exige timing especial nem condição de corrida — o atacante simplesmente cria o symlink e espera.
# Start the listener (as unprivileged user)
python3 poc.py
# Wait for admin to run erase-install with --erase or --reinstall
# Credentials will be printed to stdout when captured
# Cleanup
python3 poc.py --cleanup
Consulte poc.py para detalhes completos.
mktemp para gerar um nome de arquivo aleatório, impedindo a previsão do caminho:- dialog_output="/var/tmp/dialog.json"
+ dialog_output=$(/usr/bin/mktemp /var/tmp/dialog.XXX.json)
| Data | Evento |
|---|---|
| 2025-12-23 | Vulnerabilidade descoberta |
| 2025-12-23 | Problema relatado ao mantenedor |
| 2025-12-24 | Correção mesclada via PR #574 |
| 2026-02-20 | CVE-2025-70342 atribuído |
Esta prova de conceito é fornecida apenas para fins educacionais e de testes de segurança autorizados. Use com responsabilidade e apenas em sistemas seus ou sobre os quais você tenha permissão explícita para testar.