> 技术文档 > Cashio 漏洞解析:20亿美元凭空消失,DeFi安全的警钟_lp代币

Cashio 漏洞解析:20亿美元凭空消失,DeFi安全的警钟_lp代币


1、Cashio协议简介

Cashio是Solana区块链上的一个去中心化金融(DeFi)协议,主要功能是提供一种叫做$CASH的稳定币,Cashio允许用户做两件主要的事情:

  1. 铸造稳定币:用户可以存入Saber平台上的LP代币(流动性提供者代币)作为抵押品,然后铸造等值的$CASH稳定币
  2. 赎回抵押品:用户可以随时燃烧(销毁)他们的$CASH,赎回原始的LP代币

2.LP代币简介

2.1、LP代币是什么

LP代币是\"流动性提供者代币\"(Liquidity Provider tokens)的简称,是DeFi(去中心化金融)中的重要概念。简单来说,LP代币是你向交易池提供流动性后获得的\"凭证\"或\"股份证明\"。

2.2、具体工作方式

  1. 提供流动性: 当你向去中心化交易所(如Saber)的交易池中存入资金时(比如同时存入等值的USDC和USDT),你就成为了流动性提供者
  2. 获得LP代币: 作为回报,交易所会给你LP代币,证明你在这个流动性池中拥有一定比例的所有权
  3. LP代币的价值
    • LP代币代表你存入的资产,有实际价值
    • 随着交易池收取交易费,你的LP代币价值可能会增加
    • 你可以随时用LP代币赎回原始资产(加上你应得的交易费)

2.3、LP代币通用性

LP代币不是通用的,它们是平台特定的:

  • 每个LP代币都与特定的交易平台和特定的交易对绑定
  • Raydium的LP代币:仅代表在Raydium平台上特定交易对的流动性份额
  • Saber的LP代币:仅代表在Saber平台上特定交易对的流动性份额
  • Cashio只接受Saber的LP代币:Cashio特别设计为只接受来自Saber平台的LP代币作为抵押

3、黑客是怎么攻击的

攻击者利用了一个巧妙的漏洞:

  1. 创建了一个假的LP代币(没有实际价值)
  2. 用这个假LP代币作为抵押物铸造了大量$CASH
  3. 然后将这些凭空创造的$CASH兑换成真正的USDT/USDC
在北京时间2022年3月23日,Cashio 称遭到黑客攻击,合约存在铸造故障,声明用户不要铸造任何资金,并督促用户提取池中的资产

4、代码中的漏洞

问题出在print_cash.rs文件的验证逻辑中:

impl Validate for PrintCash { fn validate(&self) -> Result { self.common.validate()?; assert_keys_eq!(self.depositor, self.depositor_source.owner); assert_keys_eq!(self.depositor_source.mint, self.common.collateral.mint); assert_keys_eq!(self.mint_destination.mint, self.common.crate_token.mint); assert_keys_eq!(self.issue_authority, ISSUE_AUTHORITY_ADDRESS); Ok(()) }}

这段代码有一个致命缺陷:它没有检查提供的LP代币是否是合法的Saber池LP代币。也就是说,代码只检查了基本的密钥匹配,但没有验证用户提供的LP代币是否真的是一个有效的、被允许用作抵押物的代币。

由于缺少这个关键检查,黑客可以创建一个完全没有价值的假LP代币,然后用它来铸造价值20亿美元的$CASH,本质上是凭空创造了金钱。

这种类型的漏洞在DeFi领域非常危险,因为它破坏了\"所有铸造的代币都有足够抵押品支持\"的基本原则。

5、结论

Cashio 漏洞事件是一个代价高昂的教训,20亿美元的损失敲响了 DeFi 安全的警钟。开发者需加强智能合约的严谨性,用户需提升风险意识,社区需共同监督,才能构建一个更安全、更可持续的区块链生态系统。只有在安全性得到保障的前提下,DeFi 才能真正实现其去中心化金融的潜力。