多個專案被黑,因 Vyper 重入鎖漏洞造成的損失已超 5900w 美元,你的資金還安全嗎?

封面:Photo by Markus Spiske on Unsplash

2023 年 7 月 30 日晚,多個項目迎來至暗時刻。

7 月 30 日 21:35 左右,據 Beosin 旗下 Beosin EagleEye 安全風險監控、預警與阻斷平臺監測顯示,NFT 借貸協定 JPEG'd 專案遭遇攻擊。

在 Beosin 安全團隊正在分析之時,又有幾個專案接連受損。

7 月 30 日 22:51 左右,msETH-ETH 池子被駭客突襲。

7 月 30 日 23:35 左右,alETH-ETH 池子被同樣的攻擊方式破解。

緊接著,DeFi 專案 Alchemix、Metronome 專案歸屬的流動性池子相繼遭遇攻擊。

同一個攻擊方式,被駭客多次利用,到底是哪裡出了問題?

多個專案遭受攻擊的原因是 Vyper?

根據 7 月 31 日淩晨乙太坊程式設計語言 Vyper 發推表示,Vyper 0.2.15、0.2.16 和 0.3.0 版本有重入鎖有漏洞,加上原生的 ETH 可以在轉帳時調 callback,導致這幾個和 ETH 組的 lp 池子可以被重入攻擊。

接著 Curve 官方推特發文表示,由於重入鎖出現故障,許多使用 Vyper 0.2.15 的穩定幣池(alETH/msETH/pETH)遭到攻擊,但其他池子是安全的。

Beosin 安全團隊對遭受攻擊專案的分析

以下為本次駭客攻擊事件涉及的相關交易

●攻擊交易

0xc93eb238ff42632525e990119d3edc7775299a70b56e54d83ec4f53736400964

0xb676d789bb8b66a08105c844a49c2bcffb400e5c1cfabd4bc30cca4bff3c9801

0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c

0x2e7dc8b2fb7e25fd00ed9565dcc0ad4546363171d5e00f196d48103983ae477c

0xcd99fadd7e28a42a063e07d9d86f67c88e10a7afe5921bd28cd1124924ae2052

●攻擊者位址

0xC0ffeEBABE5D496B2DDE509f9fa189C25cF29671

0xdce5d6b41c32f578f875efffc0d422c57a75d7d8

0x6Ec21d1868743a44318c3C259a6d4953F9978538

0xb752DeF3a1fDEd45d6c4b9F4A8F18E645b41b324

●被攻擊合約

0xc897b98272AA23714464Ea2A0Bd5180f1B8C0025

0xC4C319E2D4d66CcA4464C0c2B32c9Bd23ebe784e

0x9848482da3Ee3076165ce6497eDA906E66bB85C5

0x8301AE4fc9c624d1D396cbDAa1ed877821D7C511

漏洞分析

根據 Beosin 安全團隊的分析,本次攻擊主要是源於是 Vyper 0.2.15 的防重入鎖失效,攻擊者在調用相關流動性池子的 remove_liquidity 函數移除流動性時通過重入 add_liquidity 函數添加流動性,由於餘額更新在重入進 add_liquidity 函數之前,導致價格計算出現錯誤。

攻擊流程

我們以 0xc93eb238f 交易攻擊的 msETH-ETH-f 池子為例。

駭客攻擊準備階段,首先通過 balancer:Vault 閃電貸借出 10,000 枚 ETH 作為攻擊資金。

攻擊階段:

1. 第一步,攻擊者調用 add_liquidity 函數將閃電貸借入的 5000ETH 添加進池子中。

2. 第二步,隨後攻擊者調用 remove_liquidity 函數移除池子中的 ETH 流動性時再次重入進 add_liquidity 函數添加流動性。

3. 第三步,由於餘額更新在重入進 add_liquidity 函數之前,導致價格計算出現錯誤。 值得注意的是 remove_liquidity 函數和 add_liquidity 函數已經使用了防重入鎖防止重入。

4. 因此這裡防重入存在並未生效,通過閱讀如下圖所示的左邊存在漏洞的 Vyper 代碼可以發現當重入鎖的名稱第二次出現的時候,storage_slot 原有數量會加 1。 換而言之,第一次獲取鎖的 slot 為 0,但是再次有函數使用鎖後 slot 變為 1,重入鎖此時已經失效。

https://github.com/vyperlang/vyper/commit/eae0eaf86eb462746e4867352126f6c1dd43302f

資金統計

截止發文時,本次攻擊事件損失的資金已超 5900W 美元,Beosin KYT監測到目前 c0ffeebabe.eth 位址已歸還 2879 個 ETH,被盜資金仍在多個攻擊者位址上。

後續影響

關於本次事件造成的影響,7 月 31 日消息,幣安創始人趙長鵬 CZ 發推稱,CEX 喂價拯救了 DeFi。 幣安使用者不受影響。 幣安團隊已檢查 Vyper 可重入漏洞。 幣安只使用 0.3.7 或以上版本。 保持最新的代碼庫、應用程式和操作系統非常重要。

7 月 31 日消息,Curve 發推稱,由於版本 0.2.15-0.3.0 中的 Vyper 編譯器存在問題,CRV/ETH、alETH/ETH、msETH/ETH、pETH/ETH 被駭客攻擊。  此外,Arbitrum Tricrypto 池也可能會受影響,審計人員和 Vyper 開發人員暫未找到可攻擊漏洞,但請退出使用。

可以看到本次事件造成的影響依然沒有結束,這些池子有資金的使用者還需要多加注意。

針對本次事件,Beosin 安全團隊建議:當前使用 Vyper 0.2.15、0.2.16 和 0.3.0 版本的重入鎖均存在失效的問題,建議相關專案方進行自查。 項目上線后,強烈建議專案方仍然關注第三方元件/依賴庫的漏洞披露資訊,及時規避安全風險。

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。