Uma falha no tratamento de mensagens do protocolo SSH permite que um ator malicioso obtenha acesso não autorizado a sistemas afetados e execute comandos arbitrários sem credenciais válidas no servidor SSH do Erlang/OTP
✅ RCE PRÉ-AUTENTICAÇÃO CONFIRMADO — Exploit demonstrado com sucesso.
📄 Blog Técnico (PDF):CVE-2025-32433-Technical-Blog.pdf
📸 Evidência Visual:screenshots/
🔍 Detalhes da Prova de Conceito:docs/PROOF_OF_CONCEPT.md
CVE-2025-32433 é uma vulnerabilidade CVSS 10.0 Crítica no daemon SSH do Erlang/OTP. Um atacante não autenticado pode abrir canais SSH e executar comandos arbitrários antes de concluir a autenticação — sem necessidade de credenciais.
Este laboratório fornece um ambiente isolado e totalmente funcional para reproduzir a vulnerabilidade, executar o exploit, verificá-lo e testar mecanismos de deteção — tudo na sua máquina local.
Antes de começar, certifique-se de que tem o seguinte instalado:
| Ferramenta | Versão Mínima | Comando de Verificação |
|---|---|---|
| Docker Desktop | 4.x+ | docker --version |
| Docker Compose | v2.20+ | docker compose version |
| Python | 3.10+ | python --version |
Também precisa da biblioteca Python paramiko para a suite de deteção:
pip install paramiko
A tag de imagem
erlang:26.2.5do Docker Hub foi silenciosamente substituída pela versão corrigida26.2.5.11após a divulgação da CVE-2025-32433. Baixá-la do Docker Hub fornece a versão corrigida, não a vulnerável.O
lab/Dockerfiledeste laboratório compila o OTP 26.2.5 diretamente a partir do tarball oficial de release do Erlang no GitHub para garantir o runtime vulnerável genuíno. A primeira compilação leva ~10 minutos.
┌──────────────────────────────────────────┐
│ Isolated Docker Bridge │
│ (cve-lab-bridge) │
└────┬────────────────────────────┬────────┘
│ │
┌───────────────┴─────────────┐┌─────────────┴──────────────┐
│ target_vulnerable ││ target_patched │
│ OTP 26.2.5 (source-built) ││ erlang:26.2.5.11 │
│ Host Port: 127.0.0.1:2222 ││ Host Port: 127.0.0.1:2223 │
└─────────────────────────────┘└─────────────────────────────┘
│
┌──────────────┴──────────────┐
│ attacker │
│ Python 3 + Scapy/Paramiko │
│ Workdir: /work │
└─────────────────────────────┘
| Container | Porta | Versão do OTP | Status |
|---|---|---|---|
cve-2025-32433-vulnerable | 127.0.0.1:2222 | 26.2.5 (ERTS 14.2.5) | ❌ Vulnerável |
cve-2025-32433-patched | 127.0.0.1:2223 | 26.2.5.11 (ERTS 14.2.5.15) | ✅ Corrigido |
cve-2025-32433-attacker | Apenas interno | Ferramentas Python 3 | Conjunto de ferramentas do atacante |
git clone https://github.com/damnkrishna/CVE-2025-32433-LAB.git
cd CVE-2025-32433-LAB
⏱️ Isso leva ~10 minutos — ele compila o Erlang/OTP 26.2.5 a partir do código-fonte C. Isso é esperado. Não interrompa.
docker compose build --no-cache target_vulnerable
Você verá uma saída do compilador como make[1]: Leaving directory '/tmp/otp_src_26.2.5/lib/...' —
isso é normal. Ela termina com:
✔ Image ine_cyber_assignment_job-target_vulnerable Built
docker compose build --no-cache target_patched
docker compose up -d target_vulnerable target_patched
docker compose ps
I can't translate the content because no source text was included in your message. The "INPUT:" section is empty—there's no chunk 17 text to work with.
Please paste the actual Markdown content for chunk 17, and I'll return the Portuguese translation following all the rules you specified.
NAME STATUS PORTS
cve-2025-32433-vulnerable Up (healthy) 127.0.0.1:2222->2222/tcp
cve-2025-32433-patched Up (healthy) 127.0.0.1:2223->2222/tcp
Ambos os contentores devem mostrar (healthy) antes de continuar.
Confirme que o contentor está genuinamente a executar o OTP 26.2.5 (não a versão corrigida):
docker exec cve-2025-32433-vulnerable cat /usr/local/otp/lib/erlang/releases/RELEASES
Saída esperada — deve mostrar 14.2.5 SEM o sufixo .15:
[{release,"Erlang/OTP","26","14.2.5",
[{kernel,"9.2.4",...},
Se você vir 14.2.5.15 — a imagem do container está errada. Reconstrua com --no-cache.
Conecte-se como um usuário legítimo para confirmar que o servidor aceita autenticação padrão:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 [email protected]
Quando solicitado, insira a senha: LabPass2026!Secured
Você entrará em um shell Erlang:
Eshell V14.2.5 (press Ctrl+G to abort, type help(). for help)
1>
Experimente alguns comandos dentro do shell do Erlang:
ls().
file:write_file("test.txt", "hello").
file:read_file("test.txt").
Para sair do shell Erlang:
q().
Antes de executar o exploit, abra um segundo terminal PowerShell e acompanhe o log do servidor:
Get-Content -Path .\logs\target_vulnerable\ssh.log -Wait -Tail 20
Mantenha este terminal aberto. Você verá eventos de conexão aparecerem em tempo real.
Esta é a prova de conceito de execução remota de código pré-autenticação. Nenhuma credencial é utilizada.
cd attacker_work\exploit
python payload.py
I can't translate the content because no source text was included in your message. The "INPUT:" section is empty—there's no chunk 17 text to work with.
Please paste the actual Markdown content for chunk 17, and I'll return the Portuguese translation following all the rules you specified.
[*] Connecting to SSH server...
[+] Received banner: SSH-2.0-Erlang/5.1.4
[*] Sending SSH_MSG_KEXINIT...
[*] Sending SSH_MSG_CHANNEL_OPEN...
[*] Sending SSH_MSG_CHANNEL_REQUEST (pre-auth)...
[✓] Exploit sent! If the server is vulnerable, it should have written to /lab.txt.
[+] Received response: 000003d4...
O banner deve mostrar SSH-2.0-Erlang/5.1.4 (sem o sufixo .15) para confirmar que você atingiu o servidor vulnerável.
docker exec cve-2025-32433-vulnerable cat /lab.txt
I can't translate the content because no source text was included in your message. The "INPUT:" section is empty—there's no chunk 17 text to work with.
Please paste the actual Markdown content for chunk 17, and I'll return the Portuguese translation following all the rules you specified.
pwned
Se você vir pwned — o RCE pré-autenticação CVE-2025-32433 está confirmado.
O exploit gravou no sistema de arquivos do contêiner sem nenhuma credencial.