Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2024-36401-geoserver-rce — CVE-2024-36401 的可重现研究:通过 JXPath 评估注入在 GeoServer 中实现未认证远程代码执行。包含技术报告、可工作的利用/验证程序以及 Docker 环境,用于在易受攻击和已修补实例上演示该漏洞。 | Kitploit
工具/GitHubGitHub/danielegiovanardi2408/cve-2024-36401-geoserver-rce
漏洞分析漏洞利用Web应用程序漏洞利用CTF渗透测试学习与教育
GitHubdanielegiovanardi2408/cve-2024-36401-geoserver-rce

cve-2024-36401-geoserver-rce

CVE-2024-36401 的可重现研究:通过 JXPath 评估注入在 GeoServer 中实现未认证远程代码执行。包含技术报告、可工作的利用/验证程序以及 Docker 环境,用于在易受攻击和已修补实例上演示该漏洞。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
103个月前尚未审核
分享

CVE-2024-36401 — GeoServer 中的未认证 RCE

CVE CVSS CISA KEV Type License

一份完整且可复现的 CVE-2024-36401 研究,这是 GeoServer(最广泛使用的开源地理空间数据服务器)中的一个未认证远程代码执行漏洞。该漏洞是一个 eval 注入:通过 OGC 标准的参数,GeoServer 将攻击者控制的 属性名 传递给 GeoTools,而 GeoTools 中的 Apache Commons JXPath 将这些属性名作为 XPath 表达式求值,并且设计上可以通过反射调用任意 Java 方法。因此,一个未认证的请求(例如 exec(java.lang.Runtime.getRuntime(),'id'))即可在主机上执行命令。

本仓库包含技术报告、可用的漏洞利用/验证器,以及一个一键式 Docker 环境,该环境在有漏洞的实例上演示 RCE,并展示相同的漏洞利用在已修补的实例上失败。

教育项目。 为大学课程(数据隐私与安全,LUISS DASMA)而建。所有操作仅针对本地隔离容器——请参阅负责任的用途。

概览

字段值
CVE (GeoServer)CVE-2024-36401
根本原因 (GeoTools)CVE-2024-36404
类型未认证远程代码执行
CWECWE-95,Eval 注入
CVSS v3.19.8 危急(AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
受影响版本GeoServer < 2.25.2 / GeoTools < 31.2(以及早期分支)
CISA KEV是(2024年7月15日)
研究版本有漏洞 2.25.1,已修补 2.25.2

仓库结构

root@kitploit:~
.
├── report/
│   ├── report.pdf            # 完整技术报告(请先阅读此文件)
│   ├── report.md             # 报告源码(Pandoc/XeLaTeX)
│   └── images/               # 图片与截图
├── docker/
│   ├── vulnerable/Dockerfile # GeoServer 2.25.1(有漏洞)
│   └── patched/Dockerfile    # GeoServer 2.25.2(已修补)
├── docker-compose.yml        # 有漏洞实例在 :8080,已修补实例在 :8081
├── exploit/
│   ├── exploit.py            # 漏洞利用 + 有漏洞/已修补验证器(仅依赖标准库)
│   ├── exploit.sh            # 基于 curl 的 PoC(GET 和 POST 变体)
│   ├── payloads.md           # 按 OGC 端点分类的 payload 目录
│   └── output/               # 捕获的证明日志与记录
└── run-reproduction.sh       # 一键命令:构建 + 对两个实例进行漏洞利用 + 收集证明

快速开始

要求:运行中的 Docker Desktop,python3,curl。

root@kitploit:~
# 构建两个容器,分别对其运行漏洞利用,并收集证明
chmod +x run-reproduction.sh
./run-reproduction.sh

或按步骤执行:

root@kitploit:~
docker compose up -d --build       # 有漏洞实例在 :8080,已修补实例在 :8081

# 有漏洞实例(预期:VULNERABLE,约8秒延迟)
python3 exploit/exploit.py -t http://localhost:8080/geoserver --label vuln -o exploit/output

# 已修补实例(预期:PATCHED,立即拒绝)
python3 exploit/exploit.py -t http://localhost:8081/geoserver --label patched -o exploit/output

docker compose down                # 完成后关闭

漏洞利用原理

两个独立的探测使结果明确无误:

  • 盲注(基于时间): java.lang.Thread.sleep(8000) 会阻塞正在求值 XPath 的线程,因此 HTTP 响应会延迟约 8 秒——客户端可测量,无需访问容器。这与官方修复测试中使用的金丝雀相同。
  • 文件(命令执行): exec(java.lang.Runtime.getRuntime(),'touch /tmp/<marker>') 在容器内创建一个文件,可通过 docker exec 验证。

在有漏洞的实例上,手动发送 payload 会返回关于 ProcessImpl 的 ClassCastException——JVM 执行了 Runtime.exec,但随后未能将生成的 Process 对象用作属性。该异常就是执行证明:

使用 exec payload 的 WFS GetPropertyValue 在有漏洞实例上返回 ClassCastException

修复方法

GeoTools 提交 e53e5170(包含在 GeoServer 2.25.2、2.24.4、2.23.6、2.22.6 中)对漏洞的两个部分应用了纵深防御:

  • 汇点: JXPathUtils.newSafeContext(...) 辅助函数安装了一个空的 FunctionLibrary,因此 JXPath 无法再将 exec/Thread.sleep 解析为函数——字符串仍然是普通的属性名。
  • 范围: FeaturePropertyAccessorFactory 现在也检查 SimpleFeatureType,因此简单要素无法再到达有漏洞的访问器。

在已修补的实例上,相同的 payload 返回 No such attribute: ...,并且不执行任何操作。

完整细节——受影响的代码(含文件/行引用)、漏洞利用、修复差异以及并排复现——请参见 report/report.pdf。

负责任的用途

此 CVE 已公开,已修补超过 18 个月,列入 CISA 已知被利用漏洞目录,并且有公开的 PoC(Vulhub、Nuclei、Metasploit)。此处的代码仅针对 localhost 和本仓库中的隔离研究容器。请勿将其用于您不拥有或未经明确授权测试的系统。

许可证

MIT © 2026 Daniele Giovanardi

作者

Daniele Giovanardi — 数据科学与管理学(DASMA),LUISS Guido Carli 大学。 课程作业:《数据隐私与安全》。

下载工具