GeoServer property 表达式注入代码执行(CVE-2024-36401)

type
status
date
slug
summary
tags
category
icon
password

漏洞描述

2024年7月,互联网上披露Geoserver表达式注入致远程代码执行漏洞(CVE-2024-36401),攻击者无需认证即可利用该漏洞获取服务器权限,建议受影响的客户尽快修复漏洞。
该系统不安全地将属性名称解析为 XPath 表达式。GeoServer 调用的 GeoTools 库 API 以不安全的方式将要素类型的属性名称传递给 commons-jxpath 库。该库在解析 XPath 表达式时,可以执行任意代码。这种 XPath 评估本应仅供复杂要素类型(例如应用程序架构数据存储)使用,但由于错误,该机制也被应用于简单要素类型。这使得所有 GeoServer 实例都可能受到该漏洞的影响。

漏洞影响

此漏洞可能导致远程代码执行 (RCE)。未经身份验证的用户可以通过向默认的 GeoServer 安装发送特制的输入,利用多个 OGC 请求参数,如 WFS GetFeature、WFS GetPropertyValue、WMS GetMap、WMS GetFeatureInfo、WMS GetLegendGraphic 和 WPS Execute 请求,从而执行任意代码。这种远程代码执行将导致系统被完全控制,严重威胁系统安全,可能造成数据泄露、勒索或更广泛的网络攻击。

影响范围

环境搭建

漏洞利用

存在两种传参方式,第一种是xml格式:

POST XML传参

notion image
第二种是POST/GET传参方式

普通GET传参

notion image
notion image
 

普通POST传参

notion image
notion image
如果出现响应 400 同时出现 java.lang.ClassCastException: java.lang.ProcessImpl cannot be cast to org.opengis.feature.type.AttributeDescriptor 报错,说明命令已执行成功,漏洞存在。
 
进入容器,touch /tmp/success1touch /tmp/success2均已成功执行。
notion image
需要注意,typeNames必须存在,可以在Web页面中找到当前服务器中的所有Types:
notion image
或者直接请求
notion image
默认有这些

Sleep延时探测

延迟两秒执行,则代表存在漏洞
notion image

JNDI注入

notion image
notion image

探测JDK版本

notion image
除此之外还可以通过报错的信息判断JDK大致区间 利用33*33数学计算触发类型转换错误获取系统信息
notion image
如果出现了
则可以确认JDK版本为Java 9 或更高版本(因为只有 Java 9+ 才有模块系统)

命令执行

 

Memshell

注意在JDK>8时,defineAnonymousClass做了限制,被加载的Class要满足两个条件之一:
  • 没有包名
  • 包名跟第一个参数Class的包名一致,此处为java.lang,否则会报错 同时也要注意中间件,有的是tomcat有的是jetty

JDK 8-11

Behinder(JDK8)

密码7

Behinder(JDK11)

js执行反射调用unsafe注入
注意⚠️:js引擎JDK15就已经删除,无法使用。
密码7(jetty)

JDK 11-22 通杀内存马

通过观察 JMG 的 payload 我们可以看到,其中恶意字节码是直接使用 Base64 编码的。
众所周知,class 文件经过一次 Base64 编码会使得恶意字节码字符串大小增加,这个时候我们可以考虑使用 gzip 先压缩 class 文件,接着再套一层 Base64 编码,这样可以大大缩小 SpEL 表达式的长度。

Bypass WAF

notion image
request.getValueReference().replaceAll("\\\\[.*\\\\]", ""),这里会将[]中的内容替换为空,但是为贪婪匹配,所以只能使用一次
在xml中,<!--xxx-->代表注释,因此可以使用如下payload:
notion image
参考:
 
Loading...

© thestar 2021-2025