Play フレームワーク セキュリティ アドバイザリ

OAuth 1.0 を使用した Play WS のサービス拒否

日付

2017 年 1 月 20 日

説明

Play の WS HTTP クライアントにサービス拒否 (DoS) の脆弱性が発見されました。これは Play のすべてのバージョン 2.0.0 ~ 2.5.10 に影響します。

Play WS には Signpost OAuth による OAuth 1.0 とのインテグレーションが含まれており、HTTP リクエストに署名された OAuth ヘッダーを含めてリモート サービスと通信できます。Signpost OAuth は、内部で OAuth プロバイダーとして commons-httpclient4 を使用します。

WS リクエストが OAuth を使用していて HTTPS 接続である場合、サーバーが TLS ハンドシェイクに応答しないと、HTTP リクエスト接続は http.socket.timeout を無視するため、ハングします。

影響

Signpost OAuth 自体はマルチスレッドではないため、呼び出し自体がブロッキング操作になります。適切なパラメーターが与えられた場合、リモート サービスに対するサービス拒否攻撃につながる可能性があります。すべての WS リクエスト処理スレッドが枯渇するからです。

この脆弱性は CVE-2015-5262 として登録されています。

影響を受けるバージョン

Play 2.0.0 - 2.5.10

回避策

この脆弱性の回避策は、HTTPClient ライブラリをバージョン 4.5.2 にアップグレードすることです。このバージョンにはこれらの問題がありません。

libraryDependencies += "org.apache.httpcomponents" % "httpclient" % "4.5.2"

修正

Play 2.5.12 または 2.4.10 にアップグレードするか、以前のバージョンの Play を使用している場合はライブラリをアップグレードしてください。

謝辞

この問題の報告に協力してくれた Denny Ma 氏に感謝します。