Play Framework セキュリティアドバイザリ

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には影響しないことに注意してください。

影響を受けるバージョン

回避策

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氏に帰します。