Play 框架安全公告

WS 无效 URI 解析

日期

2017 年 8 月 28 日

描述

在 AsyncHttpClient 的 URI 解析中发现了一个低严重性漏洞,该库被 Play WS 客户端和 play-ws-standalone 库使用。

如果 URI 后面跟着 `#`,该库会导致 WS API 错误地解析 URI 的 authority 部分。例如,传递 `http://example.com#@evil.com/foo.txt` 实际上会向 `evil.com` 发出请求。

AsyncHttpClient 问题也在 AsyncHttpClient 问题 1455 中描述。

影响

如果用户被允许传递任意 URI 字符串,此漏洞可用于绕过主机名的白名单或黑名单。符合 RFC 的解析器会正确解析 `http://example.com#@evil.com/foo.txt`。请注意,此问题不会影响像 `http://example.com/#@evil.com/foo.txt` 这样的 URI,因为路径开头有斜杠。

受影响的版本

解决方法

使用符合标准的解析器(如 `java.net.URI`)解析 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 及更高版本将自动提供正确的版本。

致谢

感谢 Agarri 的 Nicolas Grégoire 发现 AsyncHttpClient 中的此漏洞。