複数のプロジェクトがハッキングされ、Vyperの再入ロックの脆弱性による損失は5900万ドルを超えました。あなたの資金はまだ安全ですか?
出典 :Beosin
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日未明、Ethereumプログラミング言語Vyperがツイートしたところによると、Vyper 0.2.15、0.2.16および0.3.0バージョンには再入ロックの脆弱性があり、加えてネイティブのETHが送金時にcallbackを調整できるため、これらのETH組のlpプールが再入攻撃を受ける可能性があるとのことです。
続いてCurve公式Twitterが発表し、再入ロックの故障により、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の再入ロックの失効に起因しており、攻撃者は関連する流動性プールのremoveliquidity関数を呼び出して流動性を除去する際に再入してaddliquidity関数を呼び出し、残高の更新がadd_liquidity関数に再入する前に行われるため、価格計算に誤りが生じました。
攻撃フロー
ここでは0xc93eb238f取引攻撃のmsETH-ETH-fプールを例にとります。
ハッカーの攻撃準備段階では、まずbalancer:Vaultからフラッシュローンで10,000枚のETHを借りて攻撃資金とします。
攻撃段階:
- 第一歩、攻撃者はadd_liquidity関数を呼び出し、フラッシュローンで借りた5000ETHをプールに追加します。
- 第二歩、その後攻撃者はremoveliquidity関数を呼び出してプール内のETH流動性を除去する際に再入してaddliquidity関数を呼び出し流動性を追加します。
- 第三歩、残高の更新がaddliquidity関数に再入する前に行われるため、価格計算に誤りが生じます。なお、removeliquidity関数とadd_liquidity関数は再入防止ロックを使用して再入を防いでいます。
- したがって、ここでの再入防止は機能していません。以下の図に示すように、左側に脆弱性のあるVyperコードを読むと、再入ロックの名前が二度目に現れると、storage_slotの元の数が1増加することがわかります。言い換えれば、最初にロックを取得したslotは0ですが、再度関数がロックを使用するとslotは1に変わり、再入ロックはこの時点で無効になります。 https://github.com/vyperlang/vyper/commit/eae0eaf86eb462746e4867352126f6c1dd43302f
資金統計
発表時点で、今回の攻撃事件で失われた資金は5900万ドルを超え、 Beosin KYTは現在c0ffeebabe.ethアドレスが2879ETHを返還したことを監視しており、盗まれた資金は依然として複数の攻撃者アドレスに残っています。
今後の影響
今回の事件による影響について、7月31日のニュースで、Binance創業者の赵长鹏CZがツイートし、CEXの価格提供がDeFiを救ったと述べました。Binanceのユーザーは影響を受けていません。BinanceチームはVyperの再入脆弱性を確認しました。Binanceは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バージョンの再入ロックには失効の問題があるため、関連プロジェクトは自己点検を行うことをお勧めします。プロジェクトが立ち上がった後も、プロジェクトチームは第三者コンポーネント/依存ライブラリの脆弱性開示情報に注意を払い、安全リスクを適時回避することを強くお勧めします。