
Lab baseado em Docker demonstrando execução remota de código CVE-2020-7247 no OpenSMTPD 6.6.1p1 com um PoC em Python para testes educacionais de segurança.
WHS 4기 박솔민
Link original: https://github.com/vulhub/vulhub/blob/43eae7170d09e7748c3aac64cd6a8e5af508a8ef/opensmtpd/CVE-2020-7247/README.md
OpenSMTPD é um programa de servidor SMTP usado em sistemas operacionais do tipo Unix. Pode ser usado em BSD, macOS, GNU/Linux, etc., e opera baseado no protocolo SMTP RFC 5321.
CVE-2020-7247 é uma vulnerabilidade de execução remota de comandos no OpenSMTPD causada pela validação insuficiente dos endereços de remetente ou destinatário. Um atacante pode enviar uma requisição SMTP manipulada para executar comandos arbitrários no servidor.
Esta vulnerabilidade foi corrigida na versão 6.6.2p1 do OpenSMTPD.
| Item | Descrição |
|---|
| Número da Vulnerabilidade | CVE-2020-7247 |
| Software Vulnerável | OpenSMTPD |
| Versão Vulnerável | OpenSMTPD 6.6.1p1 |
| Tipo de Vulnerabilidade | Remote Code Execution |
| Ambiente de Prática | Docker / Vulhub |
| Porta Utilizada | 8825:25 |

Execute o ambiente OpenSMTPD vulnerável usando o seguinte comando:
docker compose up -d
Verifique se o contêiner foi executado corretamente.
docker compose ps

Para verificar se o serviço SMTP está funcionando corretamente, conecte-se à porta 8825.
nc 127.0.0.1 8825 -v
Se a conexão for bem-sucedida, o banner do OpenSMTPD será exibido conforme abaixo:
220 <container-id> ESMTP OpenSMTPD

Use o código PoC para enviar um comando ao servidor alvo. Neste exercício, foi usado um comando para criar o arquivo /tmp/proof.txt, que não é um comando perigoso.
python3 poc.py 127.0.0.1 8825 'touch /tmp/proof.txt'
Em seguida, verifique se o arquivo foi criado dentro do contêiner.
docker compose exec smtpd ls -l /tmp/proof.txt
Se o arquivo /tmp/proof.txt for encontrado, significa que o comando enviado externamente foi executado dentro do contêiner.
Foi confirmado que, se a validação de entrada no processo de tratamento de requisições SMTP do OpenSMTPD for insuficiente, um atacante pode executar comandos arbitrários no servidor através de requisições manipuladas.
Este exercício foi realizado apenas em ambiente Docker local e não deve ser executado contra servidores reais ou sistemas não autorizados.