獨家| 靈踪安全:代幣合約不匹配Cream Finance遭二次攻擊

Cream Finance是DeFi領域的知名去中心化借貸協議。項目方在業內首先推出了白名單機制的Ion Bank借貸機制。這一創新一方面為DeFi借貸提供了更為便捷的工具,另一方面也為黑客攻擊創造了條件。

在今年2月13日,Cream Finance就因為其Ion Bank被黑客利用並輔以閃電貸工具遭到攻擊。時隔半年,在8月30日,Cream Finance再次遭到閃電貸攻擊。

本次攻擊是因為項目中的APM代幣合約與借貸合約的cToken合約不適配造成重入漏洞,被黑客利用。

在本次攻擊中,攻擊者的地址為:0xce1f4b4f17224ec6df16eeb1e3e5321c54ff6ede。

攻擊合約的地址為:0x38c40427efbAAe566407e4CdE2A91947dF0bD22B。

被攻擊的合約有兩個,合約及地址分別為:

APM token合約:0xff20817765cb7f73d4bde2e66e067e58d11095c2

cToken合約:0xd06527d5e56a3495252a528c4987003b712860ee

我們先看cToken合約中出現漏洞的代碼片段:

上面的代碼所實現的邏輯是在轉賬完成之後,才修改借貸額度狀態accountBorrows。

這是一個典型的競態問題。

代碼中的doTransferOut函數最終會調用標的代幣(underling token)合約的transfer函數,在此之後再對與標的代幣關聯的cToken合約的狀態進行修改。

通常cToken對應的標的代幣合約都是標準的ERC-20代幣合約,這類標準的ERC-20代幣合約中的transfer函數中沒有回調函數。但如果標的代幣不是標準的ERC-20代幣合約,其transfer函數帶有回調函數,則會引發重入漏洞。

本次攻擊恰恰就是因為cToken對應的標的代幣(APM代幣)不是標準的ERC-20代幣。 APM代幣合約是個基於ERC-777標準的合約。這個合約中的transfer函數最後會調用_callPostTransferHooks()函數,在這個函數的最後會有一個回調函數IAmpTokensRecipient.tokensReceived。

下面是與此相關的代碼片段:

4DOYH5XGYf6jOAGwMTtB3IkeuMXbOAyHmp8oBoYU.png

在回調函數中,攻擊者可以再次發起交易,而此時cToken還未修改用戶借款的相關狀態,攻擊者卻已經收到借款,可以利用這些借款進行後續的動作。

合約中與cToken修改借款狀態的相關接口已經定義了防重入的鎖 borrowInternal,使用戶無法再次直接從初始的借款合約中藉入資金。

borrowInternal的代碼片段如下:

R50C1D1FKymBMD4R8ZxkMTRlTKTGiL8EUszmWSrf.png

攻擊者也注意到了這一點,於是選擇從一個借貸池借來的cToken,去另一個借貸池借款,以繞開上述防重入鎖的限制。

由於cToken被再次用於借款,因此超過了借款額度。如果攻擊者直接還款則會因為超額借貸而導致第一次借貸交易失敗。因此攻擊者選擇不還款,而是使用另一個地址清算了這個滿足清算條件的cToken,從而完成全部攻擊。

縱觀整個攻擊過程,導致本次攻擊成功的原因有兩個:

1 為AMP代幣添加借貸池時,沒有考慮到AMP代幣與借貸合約的適配性

2 借貸生成的cToken存在競態條件問題,代碼的實現邏輯沒有嚴格遵循狀態修改要放在外部調用之前的默認規範。

在此,靈踪安全提醒所有的項目方:編寫Solidity合約代碼時一定要遵循Solidity合約編寫的安全規範,不能心存僥倖。

在此例中Cream.Finance的代碼分叉複製於Compound,儘管後者已經經過考驗,但依然不能認為其代碼是萬無一失的。

根據我們的經驗,即便是利用一些成熟的、歷經考驗的項目代碼,也不能認為它們是絕對安全的,依然要進行充分的審計。尤其是要弄清楚,這些代碼適用的前提條件和安全假設,以及具體到自己的應用場景中,這些代碼是否還滿足這些前提和假設。

在靈踪安全審計代碼的過程中,對適用前提和安全假設都有嚴格的檢驗標準和審查流程,並不會因為項目代碼分叉自知名項目而忽略對這些安全事項的檢查。

關於靈踪安全:

靈踪安全科技有限公司是一家專注區塊鏈生態安全的公司。靈踪安全科技主要通過“代碼風險檢測+邏輯風險檢測“的一體化綜合方案服務了諸多新興知名項目。公司成立於2021年01月,團隊由一支擁有豐富智能合約編程經驗及網絡安全經驗的團隊創建。

團隊成員參與發起並提交了以太坊領域的多項標準草案,包括ERC-1646、ERC-2569、ERC-2794,其中ERC-2569 被以太坊團隊正式收入。

團隊參與了多項以太坊項目的發起及構建,包括區塊鏈平台、DAO組織、鏈上數據存儲、去中心化交易所等項目, 並參與了多個項目的安全審計工作,在此基礎上基於團隊豐富的經驗構建了完善的漏洞追踪及安全防範系統。

作者:

靈踪安全CEO 譚粵飛

美國弗吉尼亞理工大學(Virginia Tech, Blacksburg, VA, USA) 工業工程(Industrial Engineering) 碩士(Master)。曾任美國矽谷半導體公司AIBT Inc(San Jose, CA, USA) 軟件工程師,負責底層控制系統的開發、設備製程的程序實現、算法的設計,並負責與台積電的全面技術對接和交流。自2011至今,從事嵌入式,互聯網及區塊鏈技術的研究,深圳大學創業學院《區塊鏈概論》課程教師,中山大學區塊鏈與智能中心客座研究員,廣東省金融創新研究會常務理事 。個人擁有4項區塊鏈相關專利、3本出版著作。

Total
0
Shares
Related Posts