
Docker 기반 실습 환경으로, OpenSMTPD 6.6.1p1에서 CVE-2020-7247 원격 코드 실행을 시연하며 교육용 보안 테스트를 위한 Python PoC가 포함되어 있습니다.
WHS 4기 박솔민
OpenSMTPD는 Unix 계열 운영체제에서 사용되는 SMTP 서버 프로그램이다. 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 파일이 확인되면, 외부에서 전달한 명령이 컨테이너 내부에서 실행되었음을 의미한다.
OpenSMTPD의 SMTP 요청 처리 과정에서 입력값 검증이 부족할 경우, 공격자가 조작된 요청을 통해 서버에서 임의 명령을 실행할 수 있음을 확인하였다.
본 실습은 로컬 Docker 환경에서만 진행하였으며, 실제 서버 또는 허가받지 않은 시스템을 대상으로 수행해서는 안 된다.