声明:该文章仅供区块链安全学习和技术分享,请勿将该文章和文章中提到的技术用于违法活动上,切勿参与区块链相关违法项目,如产生任何后果皆由读者本人承担,与余生安全团队无关!
如有侵权,请联系后台进行删除。转载请注明出处,感谢!
Rikkei Finance 攻击事件分析
1. 事件概述
北京时间 2022 年 4 月 15 日,DeFi 协议 Rikkei Finance 受到攻击,其中被盗资金有 2600 余个 BNB 已被转入 Tornado Cash。
2. 事件分析
两次攻击事件如下图所示:
2.1 地址信息
攻击合约:
- 0xe6df12a9f33605f2271d2a2ddc92e509e54e6b5f(对应第一个攻击)
- 0x9ae92cb9a3ca241d76641d73b57c78f1bcf0b209(对应第二个攻击)
攻击者地址:
- 0x803e0930357ba577dc414b552402f71656c093ab
恶意预言机地址:
- 0x99423d4dfce26c7228238aa17982fd7719fb6d7f(对应第一个攻击)
- 0xa36f6f78b2170a29359c74cefcb8751e452116f9(对应第二个攻击)
攻击 tx:
- 0x4e06760884fd7bfdc076e25258ccef9b043401bc95f5aa1b8f4ff2780fa45d44(对应第一个攻击)
- 0x93a9b022df260f1953420cd3e18789e7d1e095459e36fe2eb534918ed1687492(对应第二个攻击)
被攻击预言机地址:0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5
2.2 攻击流程
这里我们以第二个攻击为例,攻击者的攻击流程如下:
- 攻击者调用
external
可见性的 setOracleData()
函数将预言机设置为自己的恶意预言机。 - 由于恶意预言机替换了原来的预言机,导致预言机输出的 rTokens 价格可以被攻击者任意操控。攻击者向 RBinance 合约发送 0.0001 BNB 获得 4995533044307110.024 rBNB。
- 由于兑换了大量的 rBNB,所以攻击者借出 346199.781 USDC。
- 攻击者将借出的 346199.781 USDC 兑换成 776.298 WBNB。
- 攻击者重复第三步和第四步操作分别借出 3.033 BTCB、52275.873 DAI、297082.798 BSC-USD、299822.459 BUSD 并兑换成相应的 WBNB。
- 将兑换的共 2571.201 BNB 转移到攻击者账户上。
- 最后攻击者再次调用
setOracleData()
还原预言机状态。
❝第一个攻击的手法相同,只是先将 BNB 兑换成 BUSD 再转去 RBinance 获得 rBUSD。
❞
2.3 攻击细节
该次事件的问题在于 Cointroller
中的 SimplePriceOracle.sol
(https://bscscan.com/address/0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5#code) 合约,其中 setOracleData
函数可见性为 external
,权限过大,可以被任何人外部调用从而恶意修改预言机地址。
正常预言机的价格为 416247538680000000000
。
攻击者调用 setOracleData
将地址为 0x1578
的 rToken
的预言机地址恶意修改为 0xa36f
。
恶意预言机将价格提升到 416881147930000000000000000000000
。
2.4 攻击后续
攻击者在攻击成功后把绝大部分的 BNB 分批次转入 Tornado Cash 中。
在本次攻击事件发生后,Rikkei Finance 官方称将全额补偿受影响用户,并在未来做好安全措施。
3. 事件总结
函数的可见性设置错误,导致权限过大,攻击者通过修改预言机为自己的恶意预言机提高价格。