返回论坛

TonConnect SDK 的 Origin 伪造漏洞深度剖析

查找币 学术研究 安全研究 Web3安全 区块链安全

查找币安全研究院

钱包恢复评估 | 链上取证分析 | Web3 事件响应
以合法授权、证据保全、隐私保护和可复核流程为前提,不要求用户在线提交完整私钥或助记词。

查看研究院 研究报告中心
## 背景 随着 TON 生态的蓬勃发展,Web3 钓鱼攻击者已将目光投向这片新兴领域。TON 生态广泛采用 TonConnect SDK 作为跨平台/应用钱包连接与交互的标准解决方案。然而,这类方案普遍面临一个核心挑战:**跨平台/应用通讯时的域名验证问题**。 在理想情况下,用户通过钱包连接 DApp 或确认签名请求时,钱包应清晰展示请求来源的域名,以便用户验证操作来源是否一致,从而防范恶意签名请求的欺诈攻击。查找币安全团队此前已发现并披露过类似的安全隐患,如 MetaMask SDK 和 WalletConnect Web3Modal 中的域名验证缺陷。在与项目方沟通后,我们确认该问题目前尚未有完美解决方案,MetaMask 和 WalletConnect 仍存在此风险。 近期,我们针对 TON 生态的 TonConnect SDK 进行了深入分析,发现其同样存在 Origin 伪造漏洞。本文将详细披露该漏洞的技术细节,并帮助用户识别与防范此类攻击。 ## 技术分析 ### 浏览器扩展钱包的安全机制 浏览器扩展钱包(如 MetaMask)与 DApp 交互时,通常通过注入 JS 脚本(Content Script)来转发网页与扩展之间的消息。网页与 Content Script 通过 `window.postMessage` 和 `window.addEventListener` 进行通信。浏览器原生提供的 `origin` 属性不可伪造,因此钱包可以依赖该属性进行来源验证、黑名单过滤及鉴权。 **关键点**:浏览器环境下的 `origin` 由浏览器引擎提供,攻击者无法篡改。 ### 跨平台/应用通讯的风险 当消息通过转发服务器进行跨平台传输时,情况则截然不同。消息转发服务器无法验证消息发起的原始域名,因为客户端数据可以被轻易伪造。以下是两个典型场景: 1. **浏览器网页 ↔ 消息转发服务器 ↔ 钱包 APP** 2. **其他 APP ↔ 消息转发服务器 ↔ 钱包 APP** 在这两种场景中,攻击者可以通过伪造消息来源,诱导用户批准恶意签名请求。 ### TonConnect SDK 的漏洞细节 TonConnect SDK 要求 DApp 在接入时配置 `dappMetadata`,其中包含 `manifestUrl`。该 URL 指向一个 JSON 文件,用于描述 DApp 的身份信息。然而,**`dappMetadata` 中的数据无法被有效验证**,恶意 DApp 可以轻松修改该字段,伪装成可信网站。 **示例代码**: ```javascript import { SendTransactionRequest, TonConnect, UserRejectsError, WalletInfo, WalletInfoInjected } from '@tonconnect/sdk'; import { notification } from 'antd'; import { isMobile, openLink } from 'src/utils'; const dappMetadata = { manifestUrl: 'https://x.x.x/tonconnect-manifest.json', }; export const connector = new TonConnect(dappMetadata); ``` 攻击者只需将 `manifest.json` 内容设置为: ```json { "url": "https://ton.org", "name": "Fake and evil DApp", "iconUrl": "https://ton-connect.github.io/demo-dapp/apple-touch-icon.png", "termsOfUseUrl": "https://ton-connect.github.io/demo-dapp/terms-of-use.txt", "privacyPolicyUrl": "https://ton-connect.github.io/demo-dapp/privacy-policy.txt" } ``` 即可将 Origin 伪造为 `https://ton.org`。通过部署上述代码并生成二维码,攻击者可以诱骗用户扫描二维码,从而与钱包建立连接。钱包应用在解析二维码中的 `manifestUrl` 后,会显示伪造的 Origin,用户难以辨别真伪。 **PoC 验证**:我们成功将 Origin 伪造为 `https://ton.org`,钱包界面显示为可信来源,而实际 DApp 为恶意钓鱼站点。 ## 攻击场景 攻击者可以利用该漏洞实施以下攻击: 1. **钓鱼攻击**:伪造知名 DApp(如 Tonkeeper、WalletConnect)的 Origin,诱导用户签署恶意交易。 2. **权限滥用**:通过伪造的 Origin 获取用户钱包的签名权限,转移资产或执行未授权操作。 3. **社交工程**:结合二维码或链接传播,伪装成空投、奖励等活动,降低用户警惕。 ## 现有解决方案的局限性 目前,主流 SDK 项目方尝试通过额外验证机制缓解该问题。例如,WalletConnect 推出了 **Verify 机制**([官方文档](https://docs.walletconnect.com/cloud/verify)),通过 Verify API 验证 DApp 域名的可信度。然而,该方案存在以下局限: - **DApp 参与度不足**:大多数主流 DApp 尚未集成 Verify 机制,导致验证形同虚设。 - **验证延迟**:API 验证存在时间差,攻击者可在验证通过前发起攻击。 - **用户感知弱**:用户对验证状态的理解不足,容易被伪造的验证结果欺骗。 ## 安全建议 ### 对用户 1. **核实域名一致性**:在批准任何签名请求前,务必检查钱包显示的 Origin 是否与当前访问的网站一致。 2. **警惕异常请求**:对于突然弹出的签名请求,尤其是涉及大额转账或授权时,保持高度警惕。 3. **使用硬件钱包**:硬件钱包可提供额外的物理验证,降低软件层面的攻击风险。 ### 对开发者 1. **强制域名验证**:在 DApp 中集成 WalletConnect Verify 或其他域名验证机制,确保 Origin 可信。 2. **限制 manifestUrl 来源**:对 `manifestUrl` 进行白名单校验,仅允许已知的可信 URL。 3. **用户提示强化**:在钱包界面增加更醒目的安全提示,例如显示“未验证域名”警告。 ## 总结 TonConnect SDK 的 Origin 伪造漏洞揭示了跨平台/应用通讯中的根本性安全挑战。由于消息转发服务器无法验证来源,攻击者可以轻易伪装成可信 DApp,实施钓鱼攻击。尽管 WalletConnect 等方案尝试通过 Verify 机制缓解问题,但实际效果有限。 查找币安全团队建议用户加强安全意识,开发者和钱包项目方应共同推动域名验证机制的普及。只有通过多方协作,才能有效遏制日益猖獗的伪造 Origin 钓鱼攻击。 --- **本文由查找币安全团队整理发布**
在论坛中查看和回复