WS URI 解析無效
日期
2017 年 8 月 28 日
說明
在 AsyncHttpClient 的 URI 解析中發現一個低嚴重性漏洞,Play WS 伺服器和 play-ws-standalone 函式庫會使用此漏洞。
如果 URI 的權限元件後面接著 #
,這個函式庫會導致 WS API 錯誤解析權限元件。例如,傳遞 http://example.com#@evil.com/foo.txt
實際上會向 evil.com
發出請求。
AsyncHttpClient 問題也說明在 AsyncHttpClient 問題 1455
影響
如果允許使用者傳遞任意 URI 字串,此漏洞可用於規避主機名稱的白名單或黑名單。符合 RFC 的剖析器會正確剖析 http://example.com#@evil.com/foo.txt
。請注意,此問題不會影響路徑開頭帶有斜線的 URI,例如 http://example.com/#@evil.com/foo.txt
。
受影響版本
- 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 版本
解決方法
使用相容的剖析器剖析 URI,例如 java.net.URI
。如果路徑為空,請將空路徑替換為單一斜線。
修正
升級至 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。