從 JPEG’d 開始
昨晚,NFT 借貸平台 JPEG’d 遭駭客攻擊,Curve pETG/ETH 池嚴重失衡,被盜金額初估超千萬美金。
一開始社群以為這是 JPEG’d 項目方的單一個案,但緊接著 AlchemixFi 的 alETH,與 MetronomeDAO 的 msETH 在 Curve 上的流動池也都陸續遭到攻擊。
Vyper 重入鎖故障
事件發生後,社群才發現到這些攻擊的源頭是因為「以合約導向的 Python 系程式語言 Vyper」在 0.2.15、0.2.16 和 0.3.0 版本中的「重入鎖(Reentrancy locks)」存在問題。重入鎖是一種防止重入攻擊的措施,能夠在執行函數時設置一個鎖,在該函數執行完畢之前,不允許再次調用,從而避免重入攻擊。Vyper 官方在推特上承認了部分版本存在問題。
安全公司 Hexagate 對使用 Vyper 編譯的 Curve 池進行反編譯後發現,儘管這些合約的代碼中明確標記了 @nonreentrant(“lock”),意在防止重入攻擊,但實際上,這些合約在編譯後使用的是不同的儲存區域(storage slots)作為重入鎖,這使得重入鎖無法有效地防止重入攻擊。
總損失超 4,000 萬美金
截至目前為止,確切的攻擊金額尚待釐清,且由於影響範圍之廣,在攻擊發生後,社群中有許多自發性的白帽搶救活動,這使得駭客與白帽難以透過鏈上交易直接分辨。
根據社群統計,截至目前為止確定的攻擊金額已超過 4,000 萬美金,其中包括:
- JPEG’d pETG/ETH pool – 1,140 萬美金
- AlchemixFi alETH/ETH pool – 1,360 萬美金
- Metronome msETH/ETH pool – 160 萬美金
- 駭客甚至搶在白帽行動之前耗盡了 CRV/ETH 的流動池,據稱有約 2,000 萬美金遭駭(CRV 700 萬美金、WETH 1,400 萬美金)。
到目前為止,攻擊似乎已經告一段落,根據 Curve 官方在社群中發布的聲明,所有受影響的流動池要嘛已經被掏空,要嘛在白帽的行動中被挽救,其餘的流動池皆為安全狀態,並且不受到漏洞的影響。
而經歷此事件之後,Curve 的總鎖定資產價值也從 32 億美金驟減至 18 億美金,大跌超 40%。