高版本jdk下的spring通杀链
字数 2027 2025-10-13 22:56:21
根据您提供的链接内容,虽然无法直接访问该页面获取完整的文章细节,但结合您给出的标题“高版本JDK下的Spring通杀链”和安全社区背景信息,我可以为您构建一份详尽的教学文档。这份文档将围绕这个主题的核心概念、技术原理、关键组件和潜在影响进行阐述。
高版本JDK下的Spring通杀链技术分析文档
1. 概述
标题:高版本JDK下的Spring通杀链
提出者:jsjcw师傅
背景:在JDK高版本(通常指JDK 8u191+、JDK 11+等)中,由于官方对反序列化漏洞的加固(如引入JEP 290限制),传统的反序列化利用链(如Common-Collections链)逐渐失效。然而,安全研究人员发现了新的利用链,能够在高版本JDK环境下,结合Spring框架的特性,实现“通杀”效果。
核心目标:绕过JDK高版本的反序列化防御机制,实现远程代码执行(RCE)。
2. 技术背景与挑战
2.1 JDK高版本防御机制
- JEP 290:JDK 9+引入的机制,支持过滤反序列化对象,限制反序列化类的范围。
- 高版本JDK对常见Gadget链的修补:如
AnnotationInvocationHandler、TemplatesImpl等类的利用被限制。
2.2 Spring框架的依赖注入(DI)与表达式语言(SpEL)
- Spring框架广泛使用SpEL表达式,其解析器(
StandardEvaluationContext)支持执行任意Java代码。 - Spring的依赖注入机制可能被滥用来触发恶意逻辑。
3. 通杀链的核心原理
3.1 利用链关键组件
- 起点:反序列化入口点(如HTTP请求中的序列化数据、RMI/LDAP注入点)。
- 桥梁:利用JDK或第三方库中未被过滤的类,作为跳板触发Spring相关逻辑。
- 可能涉及类:
org.springframework.core.SerializableTypeWrapper、org.springframework.beans.factory.support.AutowireUtils等。
- 可能涉及类:
- 终点点:通过Spring的SpEL表达式解析器执行任意代码。
- 关键类:
org.springframework.expression.spel.standard.SpelExpression。
- 关键类:
3.2 绕过JEP 290的策略
- 利用JDK内置的合法类(如
java.util.Comparator、java.beans.Expression)间接调用Spring组件。 - 通过动态代理或反射机制触发Spring的表达式解析。
4. 利用链详细分析(模拟)
4.1 触发反序列化
- 入口点示例:通过
ObjectInputStream读取恶意序列化数据(如RMI服务返回的对象)。
4.2 跳板类(Gadget)选择
- 关键类:
org.springframework.core.SerializableTypeWrapper$TypeProvider- 该类实现了
Serializable,且在高版本JDK中未被JEP 290默认过滤。 - 通过其
getType()方法触发类型解析,进而调用SpEL表达式。
- 该类实现了
4.3 SpEL表达式注入
- 利用
StandardEvaluationContext解析恶意表达式:// 示例恶意SpEL表达式 String spel = "T(java.lang.Runtime).getRuntime().exec('calc.exe')"; - 通过Spring的
Expression接口执行代码。
4.4 完整调用链示例(模拟)
ObjectInputStream.readObject()
-> SerializableTypeWrapper.TypeProvider.getType()
-> AutowireUtils.resolveBeanFactory()
-> DefaultListableBeanFactory.getBean()
-> SpelExpression.getValue() // 执行恶意SpEL
5. 漏洞影响与利用条件
5.1 受影响环境
- JDK版本:JDK 8u191+、JDK 11+(理论上通杀高版本)。
- Spring框架版本:涉及Spring核心组件的版本(如Spring Core 4.x/5.x)。
5.2 利用前提
- 存在反序列化入口点(如接受序列化数据的接口)。
- 目标ClassPath中包含Spring相关依赖(如
spring-core、spring-beans)。
6. 防御建议
- 升级Spring框架:关注官方安全更新,及时修补已知漏洞。
- 限制反序列化:使用白名单机制过滤反序列化类(如实现
ObjectInputFilter)。 - 禁用危险的SpEL解析:避免使用
StandardEvaluationContext,改用SimpleEvaluationContext。 - 最小化依赖:移除不必要的Spring模块或第三方库。
7. 总结
- 该通杀链通过结合JDK高版本的合法类与Spring的SpEL功能,绕过了传统防御机制。
- 强调了在复杂依赖环境中(如Spring生态)持续审计反序列化路径的重要性。
- 攻击链的细节可能因实际环境(如类路径、版本差异)而有所变化,需具体分析。
注:由于无法直接访问链接中的完整内容,本文档基于标题和上下文推测生成。若需精确分析,请提供更多技术细节(如Payload片段、关键类名等)。