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 は、インシデントに関与した 6 つのアドレスを特定しました。最初の 1 つ (0x172) は、ブロック 17806056 の脆弱性の悪用に失敗しました。元のエクスプロイト者は Tornado Cash から 0.1 ETH を引き出し、攻撃コントラクトの作成を進めました。しかし、主要なウォレット (0x6Ec21) は、より多くのガス料金を支払い、最初にトランザクションを実行し、約 6,100 WETH (1,140 万ドル) を獲得しました。MEV ロボットによるトランザクション前障害の脆弱性 出典: Etherscan Etherscanこの侵害によりさらなる損失が発生し、EOA 0xDCe5d は約 2,100 万ドル相当の資産を取得しました。対象となるウォレットの詳細は以下の通りです。合計 6 つのプロジェクトが影響を受け、約 6,930 万ドルが盗まれ、そのうち 1,670 万ドルが返還され、損失総額は約 5,200 万ドルになりました。## **Vyper とは**Vyper は、イーサリアム仮想マシン (EVM) 用のコントラクト指向の Python プログラミング言語です。 Vyper は 2017 年からベータ版になっていますが、最初の非ベータ版リリースは 2020 年 7 月のバージョン 0.2.1 でした。イーサリアム エコシステムで主流の言語である Solidity は、Vyper よりもはるかに古くから存在しているため、多くのコミュニティ メンバーが Solidity のみで実行されるツールを作成しています。 DeFiLlamaのデータによると、DeFiプロトコルの総ロック価値(TVL)約700億米ドルのうち、Vyperスマートコントラクトが21億7000万米ドルを占め、Solidityが674億9000万米ドルにも上る大部分を占めた。 言語ソース別の合計ロック値: DeFiLlama2023年5月10日の時点で、Vyperの支配力は2020年8月の最高値30%から6.27%に低下した。 Vyper の TVL 支配力は Solidity よりも大幅に低かったにもかかわらず、このイベントは依然として 6,200 万ドルのヒットをもたらしました。 TVL におけるさまざまなプログラミング言語の優位性 出典: DeFiLlama**コンパイラのバージョン**コンパイラのバージョンは、人間が読めるソース コードを機械が読めるコードに変換するプログラミング言語コンパイラの特定のバージョンを指します。コンパイラーのバージョンは、機能の導入、バグの修正、セキュリティの強化のために定期的に更新されます。 Vyper Language は現在、ハッカー バグ報奨金プログラムを提供していません。**バージョン 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 化されたプールに対する攻撃者のトランザクションは、実行前のトランザクションにより失敗しました。北京時間7月30日午後10時に、JPEGはpETH-ETH Curveプールが悪用されたことを確認した。その後、Vyper はバージョン 0.2.15、0.2.16、0.3.0 に壊れた再入ロックが含まれていることを発表しました。 Vyper氏のツイート後、メトロノームとアルケミックスも影響を受けた。メトロノームDAOのお知らせ:北京時間2日目の早朝、カーブ・ファイナンスはDiscord上で、残りの資金プールはVyper Bugの影響を受けず、安全であると発表した。Curve Finance は Twitter で、Arbitrum 上のプールが侵害された可能性があるが、悪意のある攻撃者が実行できる収益性の高いエクスプロイトは存在せず、プールが侵害される可能性は低いと発表しました。 CertiK は、Vyper の脆弱性を悪用した他の攻撃も検出していません。## **攻撃プロセス**JPEG をターゲットにした取引の例を次に示します。攻撃者: 0x6ec21d1868743a44318c3c259a6d4953f9978538攻撃コントラクト: 0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04#code1 攻撃者はまずバランサー: Vault から 80,000 WETH (約 1 億 4,937 万 1,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() 関数で、攻撃者はさらに 40,000 ETH の流動性を pETH-ETH-f プールに追加し、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() 関数のテストでは、再入攻撃を防止できないことが証明されました。Curve.fi ファクトリー プールの Vyper\_contract データ ソース: EtherscanVyper バージョン v0.2.15、v0.2.16、v0.3.0 には、JPEG、Metronome、Alchemix の悪用による再入保護失敗の脆弱性があります。### **解決**脆弱なバージョンの Vyper を使用しているプロジェクトは、緩和策について Vyper に問い合わせる必要があります。プロジェクトは、この脆弱性を含まない最新バージョンの Vyper へのアップグレードも試みる必要があります。## 要約するVyper に対する攻撃は、2023 年に CertiK によって検出された最大の再入可能脆弱性です。経済的損失に関しては、この攻撃がそのようなインシデントの 78.6% を占めました。今年最大の 2 つのリエントラント脆弱性はどちらも Vyper で書かれたコントラクトを悪用していましたが、脆弱性は同一ではありませんでした。現在、2023 年のすべてのチェーンにわたるリエントラント攻撃による損失は 6,600 万ドルを超えています。これは2020年全体の損失よりも約400万ドル多く、2021年の損失よりはわずか100万ドル少ないだけです。注目すべきことに、2023 年の合計は、2022 年のリターゲティング攻撃による損失の 259.45% 増加も表しています。
CertiK: Vyper の 5,200 万ドルの損失の詳細な説明
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 は、インシデントに関与した 6 つのアドレスを特定しました。最初の 1 つ (0x172) は、ブロック 17806056 の脆弱性の悪用に失敗しました。元のエクスプロイト者は Tornado Cash から 0.1 ETH を引き出し、攻撃コントラクトの作成を進めました。しかし、主要なウォレット (0x6Ec21) は、より多くのガス料金を支払い、最初にトランザクションを実行し、約 6,100 WETH (1,140 万ドル) を獲得しました。
MEV ロボットによるトランザクション前障害の脆弱性 出典: Etherscan Etherscan
この侵害によりさらなる損失が発生し、EOA 0xDCe5d は約 2,100 万ドル相当の資産を取得しました。対象となるウォレットの詳細は以下の通りです。
合計 6 つのプロジェクトが影響を受け、約 6,930 万ドルが盗まれ、そのうち 1,670 万ドルが返還され、損失総額は約 5,200 万ドルになりました。
Vyper とは
Vyper は、イーサリアム仮想マシン (EVM) 用のコントラクト指向の Python プログラミング言語です。 Vyper は 2017 年からベータ版になっていますが、最初の非ベータ版リリースは 2020 年 7 月のバージョン 0.2.1 でした。
イーサリアム エコシステムで主流の言語である Solidity は、Vyper よりもはるかに古くから存在しているため、多くのコミュニティ メンバーが Solidity のみで実行されるツールを作成しています。 DeFiLlamaのデータによると、DeFiプロトコルの総ロック価値(TVL)約700億米ドルのうち、Vyperスマートコントラクトが21億7000万米ドルを占め、Solidityが674億9000万米ドルにも上る大部分を占めた。
2023年5月10日の時点で、Vyperの支配力は2020年8月の最高値30%から6.27%に低下した。 Vyper の TVL 支配力は Solidity よりも大幅に低かったにもかかわらず、このイベントは依然として 6,200 万ドルのヒットをもたらしました。
コンパイラのバージョン
コンパイラのバージョンは、人間が読めるソース コードを機械が読めるコードに変換するプログラミング言語コンパイラの特定のバージョンを指します。
コンパイラーのバージョンは、機能の導入、バグの修正、セキュリティの強化のために定期的に更新されます。 Vyper Language は現在、ハッカー バグ報奨金プログラムを提供していません。
バージョン 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 化されたプールに対する攻撃者のトランザクションは、実行前のトランザクションにより失敗しました。
北京時間7月30日午後10時に、JPEGはpETH-ETH Curveプールが悪用されたことを確認した。
その後、Vyper はバージョン 0.2.15、0.2.16、0.3.0 に壊れた再入ロックが含まれていることを発表しました。 Vyper氏のツイート後、メトロノームとアルケミックスも影響を受けた。
メトロノームDAOのお知らせ:
北京時間2日目の早朝、カーブ・ファイナンスはDiscord上で、残りの資金プールはVyper Bugの影響を受けず、安全であると発表した。
Curve Finance は Twitter で、Arbitrum 上のプールが侵害された可能性があるが、悪意のある攻撃者が実行できる収益性の高いエクスプロイトは存在せず、プールが侵害される可能性は低いと発表しました。 CertiK は、Vyper の脆弱性を悪用した他の攻撃も検出していません。
攻撃プロセス
JPEG をターゲットにした取引の例を次に示します。
攻撃者: 0x6ec21d1868743a44318c3c259a6d4953f9978538
攻撃コントラクト: 0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04#code
1 攻撃者はまずバランサー: Vault から 80,000 WETH (約 1 億 4,937 万 1,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() 関数で、攻撃者はさらに 40,000 ETH の流動性を pETH-ETH-f プールに追加し、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() 関数のテストでは、再入攻撃を防止できないことが証明されました。
Curve.fi ファクトリー プールの Vyper_contract データ ソース: Etherscan
Vyper バージョン v0.2.15、v0.2.16、v0.3.0 には、JPEG、Metronome、Alchemix の悪用による再入保護失敗の脆弱性があります。
### 解決
脆弱なバージョンの Vyper を使用しているプロジェクトは、緩和策について Vyper に問い合わせる必要があります。プロジェクトは、この脆弱性を含まない最新バージョンの Vyper へのアップグレードも試みる必要があります。
要約する
Vyper に対する攻撃は、2023 年に CertiK によって検出された最大の再入可能脆弱性です。経済的損失に関しては、この攻撃がそのようなインシデントの 78.6% を占めました。
今年最大の 2 つのリエントラント脆弱性はどちらも Vyper で書かれたコントラクトを悪用していましたが、脆弱性は同一ではありませんでした。
現在、2023 年のすべてのチェーンにわたるリエントラント攻撃による損失は 6,600 万ドルを超えています。これは2020年全体の損失よりも約400万ドル多く、2021年の損失よりはわずか100万ドル少ないだけです。注目すべきことに、2023 年の合計は、2022 年のリターゲティング攻撃による損失の 259.45% 増加も表しています。