于2022年3月23日16:20:08 UTC+8 开始,CashioApp 被利用,导致抵押品代币账户被耗尽,损失约5200万美元。此攻击得益于对输入账户检查不足,允许攻击者在没有任何存款的情况下铸造200亿枚$CASH代币。接下来,我们将展示技术细节。
摘要
此次事件是由于Brrr程序中存在一个bug,该程序旨在处理以Saber LP Arrows为抵押品的$CASH代币的铸造和销毁。具体来说,用户可以通过存入Arrow LP代币来打印$CASH,也就是铸造$CASH。请注意,Arrow LP代币接收Saber LP代币作为底层代币。print_cash指令可以铸造$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账户是有效的呢?让我们看看bankman程序中的NewBank结构体和crate_token程序中的NewCrate结构体来找到答案。


事实上,Bank账户是一个PDA,其种子包含crate_token的地址。同时,crate_token也是一个PDA,其种子包含crate_mint的地址。这确保了如果输入的crate_mint有效,Bank账户也是有效的。没有正确的crate_mint,攻击者就无法铸造$CASH,也无法发起攻击。
关于BlockSec
BlockSec是一家开创性的区块链安全公司,由一群全球知名的安全专家于2021年创立。公司致力于提高新兴Web3世界的安全性和可用性,以促进其大规模采用。为此,BlockSec提供智能合约和EVM链安全审计服务,用于安全开发和主动防御威胁的Phalcon平台,用于资金追踪和调查的MetaSleuth平台,以及供Web3开发者在加密世界高效冲浪的MetaSuites扩展。
迄今为止,公司已为MetaMask、Uniswap Foundation、Compound、Forta和PancakeSwap等300多家尊贵客户提供服务,并通过两轮融资从Matrix Partners、Vitalbridge Capital和Fenbushi Capital等知名投资者那里获得了数千万美元的资金。
官方网站:https://blocksec.com/ 官方Twitter账号:https://twitter.com/BlockSecTeam



