慢霧:Rari被黑事故分析

By:yudan@慢霧安全團隊 2021 年 5 月 8 日,據消息,以太坊收益聚合協議 Rari Capital 因集成了 Alpha Finance 產生了漏洞,損失近 1500 萬美元。事後,Rari Capital 官方發布了事故分析報告,分析

By:yudan@慢霧安全團隊

慢霧:Rari被黑事故分析

2021 年 5 月 8 日,據消息,以太坊收益聚合協議 Rari Capital 因集成了 Alpha Finance 產生了漏洞,損失近 1500 萬美元。事後,Rari Capital 官方發布了事故分析報告,分析了此次事故的主要原因。慢霧安全團隊在官方分析的基礎上,結合慢霧安全團隊對此次事件的深入分析,進一步解讀本次安全事故的原因。

攻擊細節分析

本次攻擊發生在 Rari Capital 的 RariManger 合約中,整個過程下來就是攻擊者首先通過閃電貸從 dYdX 中借出巨量資金,然後不停的重複調用 RariManger 合約中的depositwithdraw函數,完成獲利。如下圖:

慢霧:Rari被黑事故分析

那麼用戶是如何通過depositwithdraw這兩個操作獲利的呢?我們需要分析對應的函數:

慢霧:Rari被黑事故分析

慢霧:Rari被黑事故分析

以上是deposit函數的部分邏輯,首先deposit函數本身會調用內部的 _depositTo 函數,然後會再次調用 getFundBalance 函數來獲取合約的餘額。getFundBalance 函數最終是會調用到 Rari Controller 合約的 getBalance 函數去獲取餘額。最後是通過 Rari Controller 合約中的 AlphaPoolController 庫的 getBalance 函數獲取餘額。如下圖:

慢霧:Rari被黑事故分析

流程上略微複雜,用圖來展示大概就是下面這樣:

慢霧:Rari被黑事故分析

從上面的分析不難發現,Rari 合約最終是用到了 Alpha Finance 項目的 ibETH 合約的 totalETH 函數獲取合約的餘額,目的是為了根據 totalETH 和 totalSupply 的比值計算出 Rari 合約真正的 ETH 餘額。deposit函數是根據用戶的充值 ETH 的數量和比值計算要發放給用戶的 REPT 數量,而withdraw函數的公式也大同小異,同樣需要通過 getBalance 函數獲取合約的 ETH 餘額並計算比值,然後根據用戶的 REPT 代幣的餘額和比值計算需要返還給用戶的 ETH 的數量。但是問題恰恰出在這個獲取 ETH 餘額的公式上。

根據官方描述,從 ibETH 合約獲取的 totalETH 函數獲取的值是可以被用戶操控的。以下是官方原文:

慢霧:Rari被黑事故分析

根據官方的描述,用戶可通過 ibETH 合約的 work 函數操控 totalETH 函數返回的值,導致 Rari 整個價值計算公式崩潰。我們分別分析 ibETH 的 work 函數和 totalETH 函數:

totalETH 函數:

慢霧:Rari被黑事故分析

work 函數:

慢霧:Rari被黑事故分析

以上分別是 ibETH 合約中的 totalETH 函數和 work 函數的部分實現。不難發現 totalETH 函數其實就是獲取合約的總的 ETH 的數量。而 work 函數,本身是一個 payable 函數,也就是說,用戶是可以通過 work 函數來控制 ibETH 合約中的 ETH 數量從而來改變 totalETH 返回的值的。更糟糕的是,work 函數同時還支持調用其他的任意合約。那麼整個思路就很清晰了。

攻擊流程

1、從 dYdX 中進行閃電貸,借出大量的 ETH;

2、使用一部分的 ETH 充值到 Rari Capital 合約中,此時從 ibETH 獲取的比值還是正常的;

3、使用剩餘的 ETH 充值到 ibETH 合約中,調用 ibETH 合約的 work 函數,為後續推高 ibETH 合約的 totalETH 的返回值做準備;

4、在 work 函數中同時對 Rari Capital 合約發起提現,由於上一步已經推高 totalETH 值,但是計算的 totalETH()/totalSupply() 的值相對於充值時被拉高,從而使攻擊者能從 Rari Capital 中使用等量的 REPT 獲取到更多的 ETH。

總結

本次分析下來,主要的原因是協議的不兼容問題,攻擊者通過閃電貸和重入的方式,攻擊了 Rari Capital,造成了巨大的損失。慢霧安全團隊建議在 DeFi 逐漸趨於複雜的情況下,各 DeFi 項目在進行協議間交互時,需要做好協議之間的兼容性,避免因協議兼容問題導致的損失。

【參考鏈接】

Rari Capital 官方分析:

https://medium.com/rari-capital/5-8-2021-rari-ethereum-pool-post-mortem-60aab6a6f8f9

攻擊交易(其中一筆):

https://etherscan.io/tx/0x171072422efb5cd461546bfe986017d9b5aa427ff1c07ebe8acc064b13a7b7be

—-

編譯者/作者:慢霧安全團隊

玩幣族申明:玩幣族作為開放的資訊翻譯/分享平台,所提供的所有資訊僅代表作者個人觀點,與玩幣族平台立場無關,且不構成任何投資理財建議。文章版權歸原作者所有。

0

發表迴響