返回博客

重审CashioApp安全事件

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

于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指令使用的账户开始分析。

BrrrCommon结构中的common属性(第75行)是一个结构体。在BrrrCommon中,bank账户和collateral账户由管理员初始化和授权。crate_token是$CASH代币的账户,存储关于$CASH的信息,例如crate_mint(第107行)的公钥、管理员角色的公钥等。crate_collateral_tokens是一个金库账户,持有用户转移的抵押品代币。由于抵押品应该是Arrow LP代币,而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

订阅最新动态
Bitget 3.875亿美元链下漏洞事件:不止于密钥与合约
Security Insights

Bitget 3.875亿美元链下漏洞事件:不止于密钥与合约

2026年9月24日,攻击者利用第三方安全产品漏洞,获取内部凭证并伪造提现指令,导致Bitget部分运营钱包资金转出约3.875亿美元,涉及以太坊、其他EVM网络、XRP Ledger、Zcash和TRON,私钥及冷钱包未受影响。本文梳理事件路径与资金流向,分析资产快速转换及生态恢复应对,提出机构纵深防御体系,并说明授权区块链渗透测试如何验证跨层安全假设。

损失约1130万美元:Multicall Router、Nostra | BlockSec Weekly
Security Insights

损失约1130万美元:Multicall Router、Nostra | BlockSec Weekly

本报告覆盖2026/09/14至09/20,分析以太坊与Starknet上两起共约1130万美元损失的安全事件。较大一起中,多重调用路由器将自身地址当作调度目标,致嵌套调用以路由器已授权身份而非外部调用者身份进入Safe钱包的Gateway模块,约2900个aEthrsETH被转入攻击者创建的Uniswap v4池。Starknet上,Nostra预言机仅需一个聚合来源,三个价格源中仅两个参与聚合时,被操纵的浅池报价与正常报价平均,使NSTR估值约49.52美元,支持约350万美元超额抵押借贷。

~3.2亿美元损失:Liquid Network、Symbiosis 遭利用攻击 | BlockSec
Security Insights

~3.2亿美元损失:Liquid Network、Symbiosis 遭利用攻击 | BlockSec

本报告覆盖2026/09/07-09/13,分析两起共损失约3.2亿美元的安全事件,含此前未覆盖的Liquid Network于09/06遭利用事件。较大事件中,Elements的rangeproof验证缓存因字段拼接无分隔符导致验证结果错配,攻击者伪造4000枚无支撑L-BTC并几乎全部兑出。Symbiosis跨链桥比特币路线因手续费未做负值校验,330聪存款铸造出46,116,860,184.27388234 syBTC,流动性池仅存11.26 syBTC,致约970万美元损失(约9.97 BTC)。

Web3 最佳安全审计方

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

BlockSec 审计