
Nginx整数オーバーフロー脆弱性(CVE-2017-7529)のPoCエクスプロイト。範囲外キャッシュ読み取りを可能にする。Dockerベースのラボ環境とテスト用Pythonスクリプトを含む。
参考資料:
Nginxはリバースプロキシとしてサイトを配信する際、通常、いくつかのファイル、特に静的ファイルをキャッシュします。キャッシュされた内容はファイルに保存され、各キャッシュファイルは「ファイルヘッダー」+「HTTPレスポンスヘッダー」+「HTTPレスポンスボディ」で構成されます。2回目のリクエストがこのキャッシュファイルにヒットすると、Nginxはそのファイル内の「HTTPレスポンスボディ」をユーザーに直接返します。
リクエストにRangeヘッダーが含まれている場合、Nginxは指定したstartとendの位置に応じて、指定された長さのコンテンツを返します。また、(-600, -9223372036854774591)のような2つの負の位置を指定すると、負の位置のデータを読み取れる可能性があります。このリクエストが再びキャッシュファイルにヒットした場合、「HTTPレスポンスボディ」の前にある「ファイルヘッダー」「HTTPレスポンスヘッダー」などのキャッシュファイル内の内容を読み取れる可能性があります。
テスト環境を起動します:
docker-compose up -d
http://your-ip:8080/にアクセスすると、Nginxのデフォルトページが表示されます。このページは実際にはリバースプロキシされた8081ポートのコンテンツです。
python3 poc.py http://your-ip:8080/を実行して、返された結果を読み取ります:

「HTTPレスポンスボディ」の前にある「ファイルヘッダー」「HTTPレスポンスヘッダー」などの内容が範囲外読み取りされていることがわかります。
正しく読み取れない場合は、poc.py内のオフセットアドレス(605)を調整してください。