CertiK:Vyper 5200萬美元損失 事件詳解

2023-08-02 11:10 CertiK中文社區


有報告稱 Vyper 0.2.15、0.2.16 和 0.3.0 版本存在漏洞,導致 Curve 上的許多池有遭受重入攻擊的風險。該漏洞允許攻擊者在移除流動性過程中調用添加流動性函數。

目前,總共有6,930萬美元受到影響,其中1,670萬美元已被白帽黑客追回。這也意味着此次事件造成了5,200萬美元被盜,成爲了2023年迄今爲止金額最高的重入攻擊。

事件總結

2023年7月30日,專爲以太坊虛擬機(EVM)設計的面向合約的編程語言 Vyper 編譯器0.2.15、0.2.16 和 0.3.0 版本被宣布存在重入鎖失效漏洞。多個 DeFi 項目受到該漏洞的影響,損失總額達 5,200 萬美元。

CertiK 已確定有六個地址涉及此次事件。第一個(0x172)未能利用區塊 17806056 中的漏洞。最初的漏洞利用者從 Tornado Cash 提取了 0.1 ETH,並繼續創建攻擊合約。然而,一個跑在前面的錢包(0x6Ec21)支付了更多的gas費用,並率先執行了交易,獲得了大約 6,100枚WETH(1,140 萬美元)。

由MEV機器人在前置交易失敗的漏洞 來源:Etherscan Etherscan 

該漏洞導致了進一步的損失:EOA 0xDCe5d 獲得了價值約 2,100 萬美元的資產。涉案錢包明細如下圖:

共有6個項目受到影響,約有6,930萬美元被盜走,其中1,670萬美元已被歸還,總計損失約爲5,200萬美元。

什么是Vyper

Vyper 是以太坊虛擬機(EVM)的一種面向合約的 pythonic 編程語言。Vyper 的測試版從 2017 年就开始有了,但其首個非測試版本是於2020年7月發布的 0.2.1 版。

Solidity是以太坊生態系統中的主流語言,它比Vyper存在的時間要長得多,因此許多社區成員創建了專門使用 Solidity 運行的工具。根據 DeFiLlama 的數據顯示,在DeFi協議中價值約700 億美元的總鎖倉價值(TVL)中,Vyper 智能合約佔 21.7 億美元,而 Solidity 則佔絕大多數,高達 674.9 億美元。

 根據語言劃分的總鎖倉價值 來源:DeFiLlama

截至2023年5月10日,Vyper的主導地位從 2020 年8月的30%高點降至 6.27%。盡管 Vyper的TVL 主導地位明顯低於Solidity,但這一事件仍導致6,200萬美元受到影響。

 不同編程語言在 TVL 中的主導地位 來源:DeFiLlama

編譯器版本

編譯器版本是指編程語言編譯器的特定版本,編譯器將人類可讀的源代碼轉換爲機器可讀的代碼。

編譯器版本會定期更新,以引入功能、修復漏洞並增強安全性。Vyper 語言目前不提供白客漏洞懸賞計劃。

版本 0.2.15 - 0.3.0

上文提到的就是Vyper 的0.2.15、0.2.16 和 0.3.0版本中發現了漏洞,導致了多個DeFi項目遭到重入攻擊。

而最早的Vyper 漏洞版本 0.2.15 發布於2021年7 月23日。到同年12月發布 0.3.1 版時,之前的漏洞已不復存在。

時間线

事件最初开始於北京時間7月30日晚9點10分,攻擊者針對Curve 上 JPEG’d池的交易由於前置運行交易而失敗。

北京時間7月30日晚10點,JPEG‘d 確認 pETH-ETH Curve池已被惡意利用。

Vyper 隨後宣布,0.2.15、0.2.16 和 0.3.0 版本包括了一個失效的重入鎖。Vyper 發布推文後,Metronome 和 Alchemix 也受到了影響。

Metronome DAO 宣布消息:

北京時間第二天凌晨,Curve Finance在 Discord 上發布公告稱,剩余的資金池不受Vyper Bug的影響,是安全的。

Curve Finance 在 Twitter 上宣布,Arbitrum上的一個資金池有可能受到影響,但沒有可供惡意行爲者執行的有利可圖的漏洞,這意味着資金池不太可能受到攻擊。CertiK也尚未檢測到任何其他利用Vyper漏洞的攻擊。

攻擊流程

以下是以JPEG’d爲目標的交易示例:

攻擊者: 0x6ec21d1868743a44318c3c259a6d4953f9978538

攻擊合約: 0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04#code

1.    攻擊者首先從 Balancer:Vault中借入80,000 WETH (約合149,371,300美元)

2.    然後,攻擊者將WETH 換成 ETH,調用 pETH-ETH-f.add_liquidity(),將 40,000 ETH(約合74,685,650美元)添加到 pETH-ETH-f 池中。作爲回報,攻擊者收到了32,431枚pETH(pETH-ETH-f)。

3.    攻擊者調用 remove_liquidity() 刪除了在步驟2中添加的流動性。3,740 pETH 和 34,316 ETH 被轉入攻擊合約,攻擊合約的 fallbak() 函數被觸發了,將控制權交給了攻擊者。在 fallback() 函數中,攻擊者又向 pETH-ETH-f 池中添加了40,000 ETH的流動性,並收到了 82,182 pETH。

4.    攻擊者再次調用remove_liquidity(),取出10,272pETH,收到47,506 ETH和1,184pETH。然後,攻擊者在pETH-ETH-f 池中用4,924枚 pETH交換了4,285枚ETH。

總的來說,攻擊者從第3步獲得了34,316枚ETH,從第4步獲得了47,506和 4,285枚ETH,共計 86,107枚ETH。在償還了 80,000 ETH閃電貸後,攻擊者還剩下6,107 ETH(約11,395,506美元)。 

漏洞

該漏洞允許攻擊者在移除流動性過程中調用添加流動性函數。雖然這些函數本應受到 @nonreentrant('lock')的保護,但對 add_liquidty() 和 remove_liquidity() 函數的測試證明,它並不能防止重入攻擊。

 Vyper_contract for Curve.fi Factory Pool 數據源: Etherscan

繼利用 JPEG'd、Metronome 和 Alchemix 漏洞之後,Vyper 的 v0.2.15、v0.2.16 和 v0.3.0 版本確實存在重入保護失敗的漏洞。

解決措施 

使用易受攻擊的Vyper版本的項目應聯系 Vyper協助進行緩解。項目也應盡量升級到不含此漏洞的最新版Vyper。

總結

Vyper被攻擊事件是CertiK2023 年檢測到的最大的重入漏洞。就資金損失而言,該攻擊損失金額佔據了此類事件的78.6%。

今年兩起最大的重入漏洞,都是利用Vyper編寫的合約,盡管漏洞並不相同。

目前,2023 年所有鏈中因重入攻擊造成的損失已超過 6,600 萬美元。這比 2020年全年多出約400萬美元,僅比 2021年的損失額少100萬美元。值得注意的是,2023年的總額也比 2022 年因重新定位攻擊造成的損失增加了 259.45%。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

標題:CertiK:Vyper 5200萬美元損失 事件詳解

地址:https://www.sgitmedia.com/article/6649.html

相關閱讀: