
Docker-лаборатория, демонстрирующая удалённое выполнение кода CVE-2020-7247 в OpenSMTPD 6.6.1p1, с Python PoC для образовательного тестирования безопасности.
WHS 4-й набор, Пак Сольмин
Оригинальная ссылка: https://github.com/vulhub/vulhub/blob/43eae7170d09e7748c3aac64cd6a8e5af508a8ef/opensmtpd/CVE-2020-7247/README.md
OpenSMTPD — это SMTP-сервер, используемый в Unix-подобных операционных системах. Он доступен для BSD, macOS, GNU/Linux и других систем и работает на основе протокола RFC 5321 SMTP.
CVE-2020-7247 — это уязвимость удалённого выполнения команд в OpenSMTPD, вызванная недостаточной проверкой адреса отправителя или получателя. Злоумышленник может отправить специально сформированный SMTP-запрос и выполнить произвольные команды на сервере.
Данная уязвимость была исправлена в версии OpenSMTPD 6.6.2p1.
| Пункт | Содержание |
|---|
| Номер уязвимости | CVE-2020-7247 |
| Уязвимое ПО | OpenSMTPD |
| Уязвимая версия | OpenSMTPD 6.6.1p1 |
| Тип уязвимости | Remote Code Execution |
| Лабораторная среда | Docker / Vulhub |
| Используемый порт | 8825:25 |

Запустите уязвимую среду OpenSMTPD с помощью следующей команды.
docker compose up -d
Проверьте, что контейнер запущен корректно.
docker compose ps

Чтобы проверить, что SMTP-сервис работает корректно, подключитесь к порту 8825.
nc 127.0.0.1 8825 -v
При успешном подключении будет выведен баннер OpenSMTPD, как показано ниже.
220 <container-id> ESMTP OpenSMTPD

Используя PoC-код, передайте команду на целевой сервер. В лабораторной работе использовалась команда, создающая файл /tmp/proof.txt, а не опасная команда.
python3 poc.py 127.0.0.1 8825 'touch /tmp/proof.txt'
Затем проверьте, был ли создан файл внутри контейнера.
docker compose exec smtpd ls -l /tmp/proof.txt
Если файл /tmp/proof.txt обнаружен, это означает, что команда, переданная извне, была выполнена внутри контейнера.
Подтверждено, что при недостаточной проверке входных данных в процессе обработки SMTP-запросов OpenSMTPD злоумышленник может выполнить произвольные команды на сервере с помощью специально сформированного запроса.
Данная лабораторная работа выполнялась только в локальной среде Docker; её не следует проводить на реальных серверах или неавторизованных системах.