WS URIの無効な解析
日付
2017年8月28日
説明
Play WSクライアントとplay-ws-standaloneライブラリで利用されているAsyncHttpClientのURI解析において、深刻度の低い脆弱性が発見されました。
このライブラリにより、WS APIがURIの権限コンポーネントを、コンポーネントの後ろに#
が続く場合に誤って解析します。たとえば、http://example.com#@evil.com/foo.txt
を渡すと、実際にはevil.com
にリクエストが送信されます。
AsyncHttpClientの問題も、AsyncHttpClient Issue 1455で説明されています。
影響
ユーザーが任意のURI文字列を渡すことができる場合、この脆弱性を悪用してホスト名のホワイトリストやブラックリストを回避することができます。RFCに準拠したパーサーは、http://example.com#@evil.com/foo.txt
を正しく解析します。この問題は、http://example.com/#@evil.com/foo.txt
のようにパスの先頭にスラッシュが付いたURIには影響しないことに注意してください。
影響を受けるバージョン
- Play 2.6.0-2.6.3
- play-ws-standalone 1.0.0-1.0.6
- Play 2.5.0-2.5.16
- それ以前のすべての2.xバージョン
回避策
java.net.URI
などの準拠パーサーを使用してURIを解析します。パスが空の場合、空のパスを1つのスラッシュに置き換えます。
修正
play-ws-standalone 1.0.7にアップグレードするか、Play 2.5.xを使用している場合は、async-http-client 2.0.35にアップグレードします。この問題は、Play 2.4.x以前で使用されているAsyncHttpClientでは修正されていません。
正しいバージョンは、Play 2.6.4以降、Play 2.5.17以降に自動的に提供されます。
謝辞
この脆弱性をAsyncHttpClientで発見した功績は、AgarriのNicolas Grégoire氏に帰します。