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 環境でのみ実施しました。実際のサーバーや許可を得ていないシステムを対象に実行してはなりません。