
自 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 等知名投资者处获得了数千万美元融资。
官方 Twitter 账号:https://twitter.com/BlockSecTeam



