作者:Sean Pesce
该项目包含一个示例 Web 应用程序,演示了 Java Spring 框架中的 URL 解析漏洞CVE-2024-22243的可利用场景 (官方披露在此处:https://spring.io/security/cve-2024-22243)。
漏洞
受影响的 Spring 版本以独特的方式解析 URL 的“userinfo”段,可能导致提取与许多其他常用库不同的主机名段。
这种异常行为是由于类中的以下正则表达式(“regex”)造成的 (由 2014 年的这次提交UriComponentsBuilder 引入 ):
private static final String USERINFO_PATTERN = "([^@\[/?#]*)";
此正则表达式不允许[在用户信息段中使用“左括号”字符 ( )。但是,Spring 似乎在这种行为上是个例外,因此调用getHost()使用 UriComponents 或 构造的对象UriComponentsBuilder.fromUriString 可能 UriComponentsBuilder.fromHttpUrl 会导致意外行为。RestTemplate、 RestClient和WebClient 类也因其内部使用 而受到影响UriComponentsBuilder;因此,即使不直接使用 ,实现也可能容易受到攻击UriComponentsBuilder。
对于特制的输入,Spring 将返回与以下所有值不同的主机名值:
-
现代网络浏览器,包括:
-
Chrome(以及其他基于 Chromium 的浏览器)
-
火狐
-
苹果浏览器
-
java.net.URI(据报道仅适用于特定的 Java 版本;其他版本会引发URISyntaxException)
-
java.net.URL
-
curl
-
android.net.Uri
-
okhttp3.HttpUrl
-
(Python 3)urllib.parse.urlparse
(请注意,此列表并不详尽。)
如果依赖实现使用受信任的主机名进行授权或其他与安全相关的机制,则此行为可能会使基于 Spring 的 Web 应用程序容易受到 开放重定向和 服务器端请求伪造 (SSRF) 的攻击。
例子
示例 Web 应用程序包含两个易受攻击的端点。
第一个端点/redirect展示了 Spring 的异常 URL 解析如何导致开放重定向。可以使用如下 URL 来利用它:
https://127.0.0.1[@evil.com
第二个端点/health-check演示了 Spring 和 Java 标准库类之间的 URL 解析不匹配如何URL导致服务器端请求伪造 (SSRF)。可以使用如下 URL 来利用它:
https://evil.com[@127.0.0.1
用法
要使用 Maven 构建此项目,只需运行以下命令(使用 OpenJDK 17 测试):
mvn clean package
然后,使用以下命令启动 Web 应用程序:
java -jar seanpesce-cve-2024-22243.jar 9999
该网络应用程序可通过 访问http://127.0.0.1:9999/。
Docker
要构建 docker 镜像,请运行以下命令:
docker build -t seanpesce-cve-2024-22243:latest .
然后,使用以下命令启动 Web 应用程序:
docker run -i -e PORT=9999 -p 9999:9999 seanpesce-cve-2024-22243:latest
该 Web 应用程序将可在http://127.0.0.1:9999/Docker 主机上访问。
semgrep
该存储库还包含semgrep规则,以协助扫描可能存在漏洞的代码路径。spring-cve-2024-22243_loose.yaml 对任何使用易受攻击的 API 进行简单扫描;因此,它通常会返回大量误报。spring-cve-2024-22243_strict.yaml 尝试使用更严格的逻辑和污点分析;但是,这尚未经过彻底测试,很有可能错过一些易受攻击的实现(特别是在不使用跨文件分析所需的 Semgrep Pro 时)。
其他资源
-
NIST 数据库条目
https://nvd.nist.gov/vuln/detail/CVE-2024-22243
-
修复漏洞的 Git 提交
https://github.com/spring-projects/spring-framework/commit/7ec5c994c147f0e168149498b1c9d4a249d69e87
-
存在漏洞的实施演示:SecCoder 安全实验室的threedr3am提供的具有开放重定向的存在漏洞的 OAuth 流程
https://github.com/threedr3am/learnjavabug/blob/master/spring/spring-uricomponentsbuilder/src/main/java/com/threedr3am/bug/spring/uricomponentsbuilder/controller/OAuthController.java
-
CVE-2024-22259是 CVE-2024-22243 漏洞之后发现的第二个 URL 解析漏洞
https://spring.io/security/cve-2024-22259
-
CVE-2024-22262,是前两次发现的后果中发现的第三个 URL 解析漏洞
https://spring.io/security/cve-2024-22262
https://github.com/SeanPesce/CVE-2024-22243
原文始发于微信公众号(Ots安全):影响 Spring 框架的 CVE-2024-22243 的可利用场景示例(开放重定向和 SSRF)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论