Play Framework 安全公告

使用 OAuth 1.0 時,Play WS 中的拒絕服務

日期

2017 年 1 月 20 日

說明

在 Play 中的 WS HTTP Client 中發現了一個拒絕服務 (DoS) 漏洞。這會影響 Play 的所有版本,從 2.0.0 到 2.5.10。

Play WS 包含透過 Signpost OAuth 與 OAuth 1.0 的整合,允許 HTTP 要求包含已簽署的 OAuth 標頭,以與遠端服務通訊。Signpost OAuth 在幕後使用 commons-httpclient4 作為 OAuth 提供者。

如果 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 報告此問題。