Cream Finance是DeFi領域的知名去中心化借貸協議。項目方在業內首先推出了白名單機制的Ion Bank借貸機制。這一創新一方面為DeFi借貸提供了更為便捷的工具,另一方面也為黑客攻擊創造了條件。
在今年2月13日,Cream Finance就因為其Ion Bank被黑客利用并輔以閃電貸工具遭到攻擊。時隔半年,在8月30日,Cream Finance再次遭到閃電貸攻擊。
本次攻擊是因為項目中的APM代幣合約與借貸合約的cToken合約不適配造成重入漏洞,被黑客利用。
在本次攻擊中,攻擊者的地址為:0xce1f4b4f17224ec6df16eeb1e3e5321c54ff6ede。
攻擊合約的地址為:0x38c40427efbAAe566407e4CdE2A91947dF0bD22B。
獨家 | Bakkt期貨合約數據一覽:金色財經報道,Bakkt Volume Bot數據顯示,7月13日,Bakkt比特幣月度期貨合約日交易額為1509萬美元,同比下降16%,未平倉合約量為708萬美元,同比下降4%。[2020/7/14]
被攻擊的合約有兩個,合約及地址分別為:
APM token合約:0xff20817765cb7f73d4bde2e66e067e58d11095c2
cToken合約:0xd06527d5e56a3495252a528c4987003b712860ee
我們先看cToken合約中出現漏洞的代碼片段:
獨家 | Bakkt期貨合約數據一覽:金色財經報道,BakktVolumeBot數據顯示, Bakkt比特幣月度期貨合約當周總交易額為4300萬美元,環比下降3%,未平倉合約量為640萬美元,環比上升50%。[2020/4/5]
上面的代碼所實現的邏輯是在轉賬完成之后,才修改借貸額度狀態accountBorrows。
這是一個典型的競態問題。
代碼中的doTransferOut函數最終會調用標的代幣(underling token)合約的transfer函數,在此之后再對與標的代幣關聯的cToken合約的狀態進行修改。
通常cToken對應的標的代幣合約都是標準的ERC-20代幣合約,這類標準的ERC-20代幣合約中的transfer函數中沒有回調函數。但如果標的代幣不是標準的ERC-20代幣合約,其transfer函數帶有回調函數,則會引發重入漏洞。
獨家 | Bakkt期貨合約數據一覽:金色財經報道,Bakkt Volume Bot數據顯示,2月19日,Bakkt比特幣月度期貨合約單日交易額為1518萬美元,環比下降33%;未平倉合約量為1344萬美元,環比下降19%。[2020/2/20]
本次攻擊恰恰就是因為cToken對應的標的代幣(APM代幣)不是標準的ERC-20代幣。APM代幣合約是個基于ERC-777標準的合約。這個合約中的transfer函數最后會調用_callPostTransferHooks()函數,在這個函數的最后會有一個回調函數IAmpTokensRecipient.tokensReceived。
下面是與此相關的代碼片段:
獨家 | 蔡維德:穩定幣以前被認為是市場不穩定的來源之一:金色財經獨家采訪到蔡維徳,在問到USDT等穩定幣是否會有崩盤危險時,他表示,穩定幣以前被認為是市場不穩定的來源之一,市場上也有人批評稱Tether亂發幣,沒有足夠美元支持。[2018/10/15]
在回調函數中,攻擊者可以再次發起交易,而此時cToken還未修改用戶借款的相關狀態,攻擊者卻已經收到借款,可以利用這些借款進行后續的動作。
合約中與cToken修改借款狀態的相關接口已經定義了防重入的鎖 borrowInternal,使用戶無法再次直接從初始的借款合約中借入資金。
borrowInternal的代碼片段如下:
獨家 | 新增合約AGC敏感函數可被任意調用 類zethr游戲山寨合約冒頭:第三方大數據評級機構RatingToken最新數據顯示,2018年8月10日全球共新增992個合約地址,其中270個為代幣型智能合約。RatingToken安全審計團隊發現,名為Angelglorycoin(AGC)的新增合約由于構造函數違反規范,沒有與合約同名,使得該函數可以被任意調用,從而造成權限泄露。這意味著任何人都有可能獲得全部發行的代幣。該合約共存在19項安全風險,安全檢測得分僅3.2。除此之外,還出現了zethr的類似合約ZDC,近期zethr交易量巨大,山寨合約開始冒頭。如需查看更多智能合約檢測結果,請查看原文鏈接。[2018/8/12]
攻擊者也注意到了這一點,于是選擇從一個借貸池借來的cToken,去另一個借貸池借款,以繞開上述防重入鎖的限制。
由于cToken被再次用于借款,因此超過了借款額度。如果攻擊者直接還款則會因為超額借貸而導致第一次借貸交易失敗。因此攻擊者選擇不還款,而是使用另一個地址清算了這個滿足清算條件的cToken,從而完成全部攻擊。
縱觀整個攻擊過程,導致本次攻擊成功的原因有兩個:
1 為AMP代幣添加借貸池時,沒有考慮到AMP代幣與借貸合約的適配性
2 借貸生成的cToken存在競態條件問題,代碼的實現邏輯沒有嚴格遵循狀態修改要放在外部調用之前的默認規范。
在此,Fairyproof Tech提醒所有的項目方:編寫Solidity合約代碼時一定要遵循Solidity合約編寫的安全規范,不能心存僥幸。
在此例中Cream.Finance的代碼分叉復制于Compound,盡管后者已經經過考驗,但依然不能認為其代碼是萬無一失的。
根據我們的經驗,即便是利用一些成熟的、歷經考驗的項目代碼,也不能認為它們是絕對安全的,依然要進行充分的審計。尤其是要弄清楚,這些代碼適用的前提條件和安全假設,以及具體到自己的應用場景中,這些代碼是否還滿足這些前提和假設。
在Fairyproof Tech審計代碼的過程中,對適用前提和安全假設都有嚴格的檢驗標準和審查流程,并不會因為項目代碼分叉自知名項目而忽略對這些安全事項的檢查。
關于Fairyproof Tech:
Fairyproof Tech科技有限公司是一家專注區塊鏈生態安全的公司。Fairyproof Tech科技主要通過“代碼風險檢測+邏輯風險檢測“的一體化綜合方案服務了諸多新興知名項目。公司成立于2021年01月,團隊由一支擁有豐富智能合約編程經驗及網絡安全經驗的團隊創建。
團隊成員參與發起并提交了以太坊領域的多項標準草案,包括ERC-1646、ERC-2569、ERC-2794,其中ERC-2569 被以太坊團隊正式收入。
團隊參與了多項以太坊項目的發起及構建,包括區塊鏈平臺、DAO組織、鏈上數據存儲、去中心化交易所等項目, 并參與了多個項目的安全審計工作,在此基礎上基于團隊豐富的經驗構建了完善的漏洞追蹤及安全防范系統。
作者:
Fairyproof TechCEO 譚粵飛
美國弗吉尼亞理工大學(Virginia Tech, Blacksburg, VA, USA) 工業工程(Industrial Engineering) 碩士(Master)。曾任美國硅谷半導體公司 AIBT Inc(San Jose, CA, USA) 軟件工程師,負責底層控制系統的開發、設備制程的程序實現、算法的設計,并負責與臺積電的全面技術對接和交流。自2011至今,從事嵌入式,互聯網及區塊鏈技術的研究,深圳大學創業學院《區塊鏈概論》課程教師,中山大學區塊鏈與智能中心客座研究員,廣東省金融創新研究會常務理事 。個人擁有4項區塊鏈相關專利、3本出版著作。
Tags:TOKTOKEKENTOKENFluffy TokenSimba TokenRUBY TokenCheesecakeSwap Token
NA(Nirvana)Chain社區的伙伴們,大家9月好!時光如白駒過隙,一瞬而已。用一個關鍵詞來形容剛過去的8月的話,那就是“繼往開來”.
1900/1/1 0:00:00你可能已經簡單了解了NFT,但Loot 是什么?你可能還沒有聽說過。但過去4天,有人已經鑄造了它并且賺了10萬美元。這一切都始于這篇推文,8月28日,它的發行者 @dhof 對其進行了分發.
1900/1/1 0:00:00作為元宇宙的忠實粉絲,Facebook近期推出了一款虛擬現實視頻會議應用程序,正式跨出元宇宙第一步.
1900/1/1 0:00:002021年6月9日10:00左右Nayib Bukele發推表示正式向薩爾瓦多共和國立法會提交比特幣法案。 最新消息,據U.today報道,薩爾瓦多共和國立法會以絕對多數投票通過該法案.
1900/1/1 0:00:00在過去的幾個月里,PleasrDAO、NounsDAO、PaperclipDAO等因為NFT而聚集在一起。《紐約時報》在互聯網上購買了JPEG,因為顯然這就是目前的趨勢.
1900/1/1 0:00:00?引言?:CryptoPunks是近期區塊鏈行業最熱點的話題,沒有之一。這兩天在群里聽到一名網友聊元宇宙和CryptoPunks,頗有學者風范.
1900/1/1 0:00:00