本次攻擊事件是由於Rikkei Finance 項目中的SimplePriceOracle 合約文件中的setOracleData 函數缺少鑑權,可以被任意調用。
By:Dig2@慢霧安全團隊
2022 年04 月15 日,由於惡意攻擊,Rikkei Finance 的五個資金池(USDT, BTC, DAI, USDT, BUSD) 中近乎全部代幣被盜。
慢霧安全團隊將復現分析結果分享如下:
相關信息
Rikkei Finance 是BSC 上的一個DeFi 借貸平台。
以下是本次攻擊涉及的相關地址:
攻擊者地址:
https://bscscan.com/address/0x803e0930357ba577dc414b552402f71656c093ab
攻擊合約:
https://bscscan.com/address/0xe6df12a9f33605f2271d2a2ddc92e509e54e6b5f
攻擊交易:
https://bscscan.com/tx/0x93a9b022df260f1953420cd3e18789e7d1e095459e36fe2eb534918ed1687492
攻擊核心點
此次Rikkei Finance 遭受攻擊的根本原因是setOracleDate 函數調用的權限控制缺失導致預言機價格被惡意操縱。
具體細節分析
1. 攻擊者用0.0001 BNB 兌換一些rBNB 作為抵押物,rBNB 合約地址為
https://bscscan.com/address/0x157822aC5fa0Efe98daa4b0A55450f4a182C10cA
慢霧
2. 對rBNB 設置惡意預言機,合約地址為
https://bscscan.com/address/0xd55f01b4b51b7f48912cd8ca3cdd8070a1a9dba5
部署的惡意預言機地址為
https://bscscan.com/address/0xA36F6F78B2170a29359C74cEFcB8751E452116f9,其反編譯得到:
可以看到,預言機返回價格被寫成一個巨大的常數。
3. 分別對rUSDC, rBTC, rDAI, rUSDT, rBUSD 合約進行借貸。由於上一步部署了惡意預言機,rBNB 被認為有高價值,因此能貸出池子中所有幣。然後在pancake 中進行swap 換成BNB,攻擊者總獲利約2571 枚BNB。
4. 攻擊者將BNB 打入Tornado.Cash:
總結
本次攻擊事件是由於Rikkei Finance 項目中的SimplePriceOracle 合約文件中的setOracleData 函數缺少鑑權,可以被任意調用。攻擊者通過setOracleData 函數將惡意Oracle 合約加入到SimplePriceOracle 中,在藉貸時攻擊者持有的少量抵押物,由於抵押物的價格是從惡意Oracle 合約中獲取,導致攻擊者的抵押物被誤認為具有很高價值,從而允許攻擊者用少量的抵押物將Rikkei Finance 池子中的USDC, BTC, DAI, USDT, BUSD 全部借出。慢霧安全團隊建議建議開發合約代碼時注意函數的訪問權限控制,例如使用OpenZeppelin 提供的Ownable.sol 合約。
展開全文打開碳鏈價值APP 查看更多精彩資訊