Cashio 漏洞解析:20亿美元凭空消失,DeFi安全的警钟_lp代币
1、Cashio协议简介
Cashio是Solana区块链上的一个去中心化金融(DeFi)协议,主要功能是提供一种叫做$CASH的稳定币,Cashio允许用户做两件主要的事情:
2.LP代币简介
2.1、LP代币是什么
LP代币是\"流动性提供者代币\"(Liquidity Provider tokens)的简称,是DeFi(去中心化金融)中的重要概念。简单来说,LP代币是你向交易池提供流动性后获得的\"凭证\"或\"股份证明\"。
2.2、具体工作方式
- 提供流动性: 当你向去中心化交易所(如Saber)的交易池中存入资金时(比如同时存入等值的USDC和USDT),你就成为了流动性提供者
- 获得LP代币: 作为回报,交易所会给你LP代币,证明你在这个流动性池中拥有一定比例的所有权
- LP代币的价值:
- LP代币代表你存入的资产,有实际价值
- 随着交易池收取交易费,你的LP代币价值可能会增加
- 你可以随时用LP代币赎回原始资产(加上你应得的交易费)
2.3、LP代币通用性
LP代币不是通用的,它们是平台特定的:
- 每个LP代币都与特定的交易平台和特定的交易对绑定
- Raydium的LP代币:仅代表在Raydium平台上特定交易对的流动性份额
- Saber的LP代币:仅代表在Saber平台上特定交易对的流动性份额
- Cashio只接受Saber的LP代币:Cashio特别设计为只接受来自Saber平台的LP代币作为抵押
3、黑客是怎么攻击的
攻击者利用了一个巧妙的漏洞:
- 创建了一个假的LP代币(没有实际价值)
- 用这个假LP代币作为抵押物铸造了大量$CASH
- 然后将这些凭空创造的$CASH兑换成真正的USDT/USDC

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 才能真正实现其去中心化金融的潜力。