
Laboratorio basato su Docker che dimostra l'esecuzione remota di codice CVE-2020-7247 in OpenSMTPD 6.6.1p1 con un PoC Python per test di sicurezza didattici.
WHS 4기 박솔민
OpenSMTPD è un server SMTP utilizzato sui sistemi operativi Unix-like. Può essere utilizzato su BSD, macOS, GNU/Linux, ecc. e funziona sulla base del protocollo SMTP RFC 5321.
CVE-2020-7247 è una vulnerabilità di esecuzione remota di comandi causata da una verifica insufficiente degli indirizzi del mittente o del destinatario in OpenSMTPD. Un attaccante può inviare una richiesta SMTP manipolata per eseguire comandi arbitrari sul server.
La vulnerabilità è stata corretta nella versione OpenSMTPD 6.6.2p1.
| Elemento | Dettagli |
|---|
| ID vulnerabilità | CVE-2020-7247 |
| Software vulnerabile | OpenSMTPD |
| Versione vulnerabile | OpenSMTPD 6.6.1p1 |
| Tipo di vulnerabilità | Remote Code Execution |
| Ambiente di laboratorio | Docker / Vulhub |
| Porta utilizzata | 8825:25 |

Utilizzare il seguente comando per avviare l'ambiente OpenSMTPD vulnerabile.
docker compose up -d
Verificare che il container sia stato avviato correttamente.
docker compose ps

Per verificare che il servizio SMTP funzioni correttamente, connettersi alla porta 8825.
nc 127.0.0.1 8825 -v
Se la connessione riesce, viene visualizzato il banner OpenSMTPD come segue.
220 <container-id> ESMTP OpenSMTPD

Utilizzare il codice PoC per inviare un comando al server di destinazione. Nell'esercitazione è stato utilizzato un comando che crea il file /tmp/proof.txt, non un comando pericoloso.
python3 poc.py 127.0.0.1 8825 'touch /tmp/proof.txt'
Successivamente, verificare all'interno del container che il file sia stato creato.
docker compose exec smtpd ls -l /tmp/proof.txt
Se il file /tmp/proof.txt è presente, significa che il comando inviato dall'esterno è stato eseguito all'interno del container.
È stato confermato che, se la validazione dell'input nel processo di gestione delle richieste SMTP di OpenSMTPD è insufficiente, un attaccante può eseguire comandi arbitrari sul server tramite richieste manipolate.
Questa esercitazione è stata condotta esclusivamente in un ambiente Docker locale e non deve essere eseguita su server reali o sistemi non autorizzati.