GeoServer是一个用Java编写的开源软件服务器,允许用户共享和编辑地理空间数据。它为提供交互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。GeoServer存在远程代码执行漏洞(CVE-2024-36401),未经身份认证的远程攻击者可以通过该漏洞在服务器上执行任意代码,从而获取服务器权限。在版本 2.23.6、2.24.4 和 2.25.2 之前,多个 OGC 请求参数允许未经身份验证的用户通过针对默认GeoServer 安装的特制输入进行远程代码执行(RCE),因为将属性名称评估为 XPath 表达式会不安全。
GeoServer 调用的 GeoTools 库 API 评估要素类型的属性/属性名称,从而不安全地将它们传递给 commons-jxpath 库,该库在评估 XPath 表达式时可以执行任意代码。此 XPath 评估仅供复杂要素类型(即应用程序架构数据存储)使用,但未错误地应用于简单要素类型,使得此漏洞适用于 **ALL** GeoServer 实例。未提供公开 PoC,但已确认可通过 WFS GetFeature、WFS GetPropertyValue、WMS GetMap、WMS GetFeatureInfo、WMS GetLegendGraphic 和 WPS Execute 请求利用此漏洞。
此漏洞可导致执行任意代码。版本 2.23.6、2.24.4 和 2.25.2 包含针对该问题的修补程序。解决方法是从GeoServer中删除“gt-complex-x.y.jar”文件,其中“x.y”是GeoTools版本(例如,如果运行GeoServer 2.25.1,则为“gt-complex-31.1.jar”)。这将从GeoServer中删除易受攻击的代码,但可能会破坏某些GeoServer功能,或者在需要gt-complex模块时阻止GeoServer部署。
经过开源网安RASP团队分析,该漏洞与CVE-2022-41852漏洞具有很高的相关性。
漏洞特性
漏洞危害等级 | 高 |
触发方式 | 网络远程权限 |
认证要求 | 无需任何权限系统 |
配置要求 | 默认配置可利用用户 |
交互要求 | 无需用户交互 |
利用成熟度 | POC/EXP 未公开 |
批量可利用性 | 可使用通用 POC/EXP |
批量检测/利用修复复杂度 | 低,官方提供缓解、修复方案 |
影响版本
GeoServer < 2.23.6
2.24.0 <= GeoServer < 2.24.4
2.25.0 <= GeoServer < 2.25.2
攻击效果
运行应用
未安装RASP,运行应用并发送攻击请求,如下图:
可以看出,当使用以下参数:
请求:
如图所示,执行了远程代码,exec(java.lang.Runtime.getRuntime(),'touch%20/tmp/success1')。
防护效果
安装RASP,再次请求:
响应被拦截。RASP平台针对该请求共检测出3条攻击行为,分别为:命令注入、不安全的反射、远程命令/代码执行漏洞(RCE)。
不安全的反射:
远程命令/代码执行漏洞(RCE):
命令注入:
综上所述,证明RASP可针对CVE-2024-36401漏洞从多个角度进行检测。
参考资料
https://github.com/advisories/GHSA-6jj6-gm7p-fcvv
推荐阅读
经验分享 | 科研行业如何搭建RASP防护体系?
干货分享 | WAF与RASP对比 【附:任意文件上传漏洞防护实例】