返回博客

重审 CashioApp 安全事件

Code Auditing
2022年5月16日
阅读约 5 分钟

自 2022年3月23日 16:20:08 UTC+8 起,CashioApp 遭到攻击,其抵押品代币账户中的资产被转走,损失约为 5,200万。此次攻击之所以得逞,是因为程序对输入账户的检查不足,使攻击者无需存入任何资产就铸造了 200亿 $CASH 代币。下文将介绍技术细节。

概要

此次事件源于 Brrr 程序中的一个漏洞。该程序旨在处理以 Saber LP Arrows 为抵押品的 $CASH 代币铸造与销毁。具体而言,用户可以通过存入 Arrow LP 代币来铸造 $CASH。需要注意的是,Arrow LP 代币以 Saber LP 代币 为底层代币。可铸造 $CASH 的 print_cash 指令接收一组账户,其中包括 Bank 账户和 Collateral 账户。这两个账户用于记录和追踪获准用于铸造 $CASH 的抵押品,即 Arrow LP 代币。按照设计,这两个账户只能由管理员初始化和授权。然而,程序未能检查 Bank 账户的有效性。因此,攻击者能够构造一系列虚假账户(包括 Bank 账户),将其作为输入传给 print_cash 指令,并以几乎为零的成本(仅需支付交易手续费)铸造 $CASH。

详细分析

我们先从下方 print_cash 指令所使用的账户开始分析。

common 属性(第 75 行)在程序中是一个类型为 BrrrCommon 的结构体。在 BrrrCommon 中,bank 账户和 collateral 账户由管理员初始化和授权。crate_token 是 $CASH 代币的账户,存储着有关 $CASH 的信息,例如 crate_mint 的公钥(第 107 行)、管理员角色的公钥等。crate_collateral_tokens 是保管从用户转入的抵押品代币的金库账户。由于抵押品应为 Arrow LP 代币,而这种代币接收 Saber 的 LP 代币,因此用户必须输入与 saber_swap 相关的账户。BrrrCommon 结构体中的最后两个属性,是该指令所使用的目标程序的程序 ID。需要注意的是,PrintCash 结构体中的最后四个属性分别是用户的系统账户(也是交易的签名者)、用户的抵押品账户、接收铸造所得 $CASH 的用户 $CASH 代币账户,以及拥有铸造 $CASH 权限的账户的公钥。

攻击交易

了解上述账户的功能后,我们开始分析这笔攻击交易:0x4fgL…z2K5。此次攻击由攻击者地址(见 0x6D7f)发起,PrintCash 指令的输入账户列表如下。

上面的 Account #1(0x5aha)对应 Bank 账户。我们注意到,它与 CashioApp 官方网站提供的地址(0xEm1P)不同,这意味着对 Bank 账户的验证不足!

验证机制

让我们仔细查看代码中对 BrrrCommon 结构体的验证,以弄清楚攻击者如何绕过检查。

对输入的 Bank 账户,唯一的检查是确保输入的 Collateral 账户与该 Bank 账户关联(第 12 行)。然而,只要同时提供一个虚假的 Collateral 账户,就能轻易绕过这一检查。此外,为了避免支付真实的抵押资产,攻击者还提供了虚假的 saber_swap 账户。需要注意的是,攻击者意图通过存入无价值的抵押资产来铸造有价值的 $CASH 代币,因此攻击者提供的 crate_token 和 crate_mint 应当是真实地址。换言之,由于对 Bank 账户的检查不足,攻击者得以构造一系列虚假账户,用无价值的抵押品铸造 $CASH。

修复方案

修复方法是添加 assert_keys_eq!(self.bank.crate_mint, self.crate_mint) 语句。该语句确保 Bank 账户的 crate_mint 是 $CASH 对应的正确 crate_mint。但这如何确保 Bank 账户有效?让我们查看 NewBank 结构体(位于 bankman 程序中)和 NewCrate 结构体(位于 crate_token 程序中)来寻找答案。

事实上,Bank 账户是一个 PDA,其种子包含 crate_token 的地址。同时,crate_token 也是一个 PDA,其种子包含 crate_mint 的地址。这确保了如果输入的 crate_mint 有效,Bank 账户也有效。没有正确的 crate_mint,攻击者就无法铸造 $CASH,也无法发动攻击。

关于 BlockSec

BlockSec 是一家由一群享誉全球的安全专家于 2021 年创立的区块链安全先驱企业。公司致力于提升新兴 Web3 世界的安全性和易用性,以促进其大规模应用。为此,BlockSec 提供智能合约及 EVM 链的安全审计服务、用于安全开发和主动阻断威胁的 Phalcon Security 平台、用于资金追踪和调查的 MetaSleuth 平台,以及帮助 Web3 建设者高效探索加密世界的 MetaSuites 扩展程序。

迄今为止,公司已服务超过 300 家知名客户,包括 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,并通过两轮融资从 Matrix Partners、Vitalbridge Capital 和 Fenbushi Capital 等知名投资者处获得了数千万美元融资。

官方网站:https://blocksec.com/

官方 Twitter 账号:https://twitter.com/BlockSecTeam

订阅最新动态
Autheo Network、UNCX 遭黑客攻击,损失约387万 USD | BlockSec 周报
Security Insights

Autheo Network、UNCX 遭黑客攻击,损失约387万 USD | BlockSec 周报

本周报告涵盖 2026年10月12日–2026年10月18日 期间的 3 起安全事件,估计总损失约为 387万 USD。Autheo Network 因私钥泄露损失约 176万 USD,Qubic Wallet 因种子生成机制薄弱损失约 130万 USD;UNCX Network 在 Ethereum、BNB Chain、Base 和 Robinhood Chain 上的 Smart Token Vesting V2 合约因会计核算错误损失约 80.7万 USD。重点分析的 UNCX 事件说明,有缺陷的总份额计算将按不同代币与份额兑换比率创建的归属批次混合计算,从而使人能够从共享资金池超额提取。

损失约54.2万美元:MakerDaoBot 漏洞利用事件|BlockSec 周报
Security Insights

损失约54.2万美元:MakerDaoBot 漏洞利用事件|BlockSec 周报

本报告涵盖2026/10/05至2026/10/11以太坊上的1起安全事件,估计损失约54.2万美元。攻击合约部署恶意适配器,并将其传入缺乏访问控制的MakerDaoBot函数,使机器人授予该适配器操作其内部MakerDAO余额的权限。适配器结算了4笔旧版ETH-A拍卖,将200单位ETH-A抵押品兑换为WETH;攻击合约随后将其解包,并向攻击者转出200 ETH。

损失约4.18亿美元:Bitget、NEAR Intents遭利用攻击 | BlockSec Weekly
Security Insights

损失约4.18亿美元:Bitget、NEAR Intents遭利用攻击 | BlockSec Weekly

本双周安全报告记录了2026年9月21日至10月4日期间发生的八起事件,涉及以太坊、BNB Chain、Solana、比特币、波场、XRP Ledger、Zcash、Avalanche、NEAR等网络,损失约4.184亿美元。详细分析涵盖Bitget因第三方安全产品漏洞损失3.875亿美元,以及NEAR Intents因退款验证缺陷和状态回滚缺失损失387万美元。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

BlockSec 审计