前言
2022年1月18日,知道创宇区块链安全实验室监测到BSC上Crosswise遭遇攻击,此次攻击导致协议损失87.9万美元。
攻击者仅用1个CRSStoken便获取CrosswiseMasterChef池中价值87.9万美元的692K个CRSS。实验室将对本次事件深入跟踪并进行分析。
基础信息
攻击交易哈希:
0xd02e444d0ef7ff063e3c2cecceba67eae832acf3f9cf817733af9139145f479b
攻击者地址:
0x748346113B6d61870Aa0961C6D3FB38742fc5089
攻击合约:
0x530B338261F8686e49403D1b5264E7a1E169F06b
Friend.tech:突然断连问题已解决,如被突然注销需强制退出APP并重启:金色财经报道,friend.tech在社交媒体发文称,当前许多用户在APP上处理交易时会遭遇突然断开连接,这个问题目前已经解决,但如果发现依然无法看到屏幕内容或是账户被突然注销,需要强制退出APP并再次打开,如果被要求重新登陆则需再次输入账户进行登陆。如果系统提示输入邀请码,则意味着使用了与注册时不同的登录方法,需要退出并使用原来的登录方式。[2023/9/10 13:29:47]
MasterChef:
0x70873211CB64c1D4EC027Ea63A399A7d07c4085B
CrosswiseRouter:
0x8B6e0Aa1E9363765Ea106fa42Fc665C691443b63
Pop Social完成400万美元种子轮和战略轮融资:9月8日消息,Web3 AI社交基础设施平台Pop Social完成400万美元种子轮和战略轮融资,Fundamental Labs、Ceras Ventures、Chainlink、Cointelegraph、Fusion Labs、Promatrix Capital等参投。[2023/9/8 13:27:42]
CRSS:
0x99FEFBC5cA74cc740395D65D384EDD52Cb3088Bb
攻击核心
此次攻击的核心在于,Crosswise中的MasterChef合约Owner地址设置即transferOwnership函数能够被攻击者绕过,使得攻击者能够成为新的Owner并对MasterChef池子进行攻击利用。我们将本次攻击过程分为两个阶段进行分析:获取Owner权限攻击和MasterChef池攻击。
央行穆长春:要实现用数字人民币作为所有零售场景下的支付工具:9月3日消息,中国人民银行数字货币研究所所长穆长春在2023年中国国际服务贸易交易会金融服务专题的主论坛“2023中国国际金融年度论坛”上表示,要实现用数字人民币作为所有零售场景下的支付工具。微信、支付宝、作为运营机构的商业银行掌银APP、其他第三方支付机构的APP等钱包提供商,也包括数字人民币运营机构要有合规意识,取得相应金融牌照并服从监管。短期内,我们可以先从技术标准上统一二维码标准,实现条码互认;长期来看,我们将稳步实现支付工具的升级。[2023/9/3 13:15:12]
获取Owner权限攻击
1.由于在MasterChef合约中setTrustedForwarder函数为公开可见性且未作权限设置,攻击者先将自己的地址设置为TrustedForwarde地址。
Beefy发布提案建议将BIFI代币脱离Multichain并重新部署至以太坊,目前已获99.67%支持:7月14日消息,多链收益优化器Beefy社区近日发布一项非正式的ARFC提案,旨在评估是否迅速将BIFI代币从Multichain迁出。提案中,核心团队建议将BIFI重新部署在以太坊上,并设立一个全球统一的治理池,同时通过DAO管理的新桥接解决方案来实现对质押的mooBIFI代币的桥接。
此举是由于Beefy的桥接提供商Multichain在过去两个月中遭遇了一系列影响其协议支持的所有资产的严重故障。在最近的一次事件中,约18,690枚BIFI代币在未经Beefy预先知情或同意的情况下,从 Multichain 的路由器转移到了另一个由 Multichain 控制的钱包,导致桥接的BIFI代币(即不在BNB链上的代币)缺少支持。
目前的投票结果显示,支持迁移的投票占比99.67%,反对迁移的投票占比0.15%,弃权的投票占比0.17%。[2023/7/14 10:55:42]
今日恐慌与贪婪指数为62,等级仍为贪婪:金色财经报道,今日恐慌与贪婪指数为62(昨日为62),贪婪程度与昨日持平,等级仍为贪婪。
注:恐慌指数阈值为0-100,包含指标:波动性(25%)+市场交易量(25%)+社交媒体热度(15%)+市场调查(15%)+比特币在整个市场中的比例(10%)+谷歌热词分析(10%)。[2023/4/5 13:45:25]
2.Crosswisefi项目方对MasterChef的_msgSender()函数并未采取openzepplin的标准写法且存在漏洞,导致攻击者能够通过构造恶意的calldata实现绕过onlyOwner限制完成合约Owner的获取。
下图为攻击者绕过onlyOwner权限构造的恶意payload:
MasterChef池攻击
1.攻击者在CrosswiseRouter中用0.01个WBNB兑换出3.71个CRSS
2.攻击者调用deposit将1个CRSS质押到CrosswiseMasterChef
3.由于上一阶段攻击者已经获取到MasterChef的Owner权限,此时攻击者调用set函数对MasterChef的pid为0的池子重新部署了一个未开源的策略合约:0xccddce9f0e241a5ea0e76465c59e9f0c41727003
4.攻击者调用MasterChef的withdraw函数从池子中获取692K的CRSS
5.最后攻击者把692K的CRSS通过CrosswiseRouter合约swap兑换出547个BNB完成攻击,获利超87.9万美元。
策略合约
猜想
由于攻击者部署的策略合约并未开源,我们只能反向推导猜想策略合约的主要逻辑:
1.根据下图第18行代码可以推断出合约中lockedAmount应该是一个极大值才能支撑攻击者692k的代币转出;又根据第7-11行可以推导出攻击者部署的strategy合约的LockeTotal()函数返回值极大、sharesTotal()返回值极小。
2.在上图代码23行当_amount>0时,会先计算出user的shareRemoved,然后在执行user.amount=user.amount.sub(shareRemoved);,此时若shareRemoved大于user.amount则代码执行不会通过,可以推导出26行的shareRemoved值很小,又shareRemoved是调用攻击者部署strategy合约中withdraw获取,所以此时的strategy合约中withdraw的返回值会很小,小于之前质押的1个CRSS数量;再结合链上数据可推导攻击者部署strategy合约中的withdraw调用返回值为0。
反编译
为了证实我们的猜想是否正确,我们将攻击者部署的策略合约进行反编译。
反编译后我们可以发现存在一个极大值和一个较小值的常量,即对应猜想1中LockeTotal和sharesTotal值,猜想1正确。
对于猜想2,经过反编译后我们可以看到策略合约的withdraw最后的返回值为0,猜想2正确
总结
这次攻击产生的主要原因是项目方使用错误的方法去获取msgSender,导致合约的Owner权限更改能被绕过。知道创宇区块链安全实验室在此提醒,任何有关合约权限问题的操作都需要慎重考虑,合约审计、风控措施、应急计划等都有必要切实落实。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。