7月30日、Vyperの一部バージョンの脆弱性により、CurveやJPEG'dなどのプロジェクトが相次いで攻撃され、総額5,200万ドル以上の損失が発生した。
SharkTeamは、このインシデントの技術分析を初めて実施し、セキュリティ上の注意事項をまとめ、後続のプロジェクトがこのインシデントから学び、ブロックチェーン業界のセキュリティ防御線を共同で構築できることを期待しました。
1. イベント分析
JPEG が攻撃された場合を例に挙げます。
攻撃者のアドレス: 0x6ec21d1868743a44318c3c259a6d4953f9978538
攻撃者の契約: 0x9420F8821aB4609Ad9FA514f8D2F5344C3c0A6Ab
攻撃トランザクション: 0xa84aa065ce61dbb1eb50ab6ae67fc31a9da50dd2c74eefd561661bfce2f1620c
(1) 攻撃者 (0x6ec21d18) は 0x466B85B4 のコントラクトを作成し、[Balancer: Vault] からフラッシュ ローンを通じて 80,000 WETH を借りました。
(2) 攻撃者 (0x6ec21d18) は、pETH-ETH-f (0x9848482d) 流動性プールに 40,000 WETH を追加し、32,431 pETH を取得しました。
(3) その後、攻撃者 (0x6ec21d18) は、pETH-ETH-f (0x9848482d) 流動性プールから流動性を繰り返し削除しました。
(4) 最終的に、攻撃者 (0x6ec21d18) は 86,106 WETH を取得し、フラッシュ ローンを返済した後、6,106 WETH の利益を残して立ち去りました。
2. 脆弱性分析
(1) この攻撃は典型的なリエントランシー攻撃です。攻撃を受けているプロジェクト コントラクトのバイトコードを逆コンパイルすると、次の図からわかります。add_liquidity と Remove_liquidity の 2 つの関数がストレージ スロットの値を検証する場合、検証対象のストレージ スロットが異なっています。別のストレージ スロットを使用すると、再入ロックが無効になる可能性があります。現時点では、Vyper の根底にある設計の抜け穴であると疑われています。
(2)Curveの公式ツイートと組み合わせる。結局のところ、その場所は Vyper バージョンの脆弱性です。この脆弱性はバージョン 0.2.15、0.2.16、および 0.3.0 に存在し、リエントラント ロックの設計に欠陥があります。 0.2.15 より前の 0.2.14 と 0.3.0 より後の 0.3.1 バージョンを比較したところ、コードのこの部分は常に更新されており、古い 0.2.14 および 0.3.1 バージョンにはこの問題がないことがわかりました。 。
(3) Vyper対応のリエントラントロック関連設定ファイルdata_positions.pyにおいて、storage_slotの値が上書きされます。 retでは、最初に取得したロックのスロットは0であり、その後、再度関数を呼び出すと、ロックのスロットが1増加し、このときのリエントラントロックは無効となります。
脆弱性の概要: この攻撃の根本原因は、Vyper バージョン 0.2.15、0.2.16、および 0.3.0 の再入ロックの設計が不合理であり、包括的な機能テストが不十分であることです。その結果、これらのバージョンを使用していたプロジェクトの再エントリ ロックは後に無効になり、最終的にはハッキングされました。
3. セキュリティに関する推奨事項
この攻撃に対して、開発者は日常の開発において次のセキュリティ対策を講じる必要があります。
(1) プロジェクト当事者は、機能設計が合理的であることを確認し、特定の機能テストの漏れを防ぐためにコードの包括的なテストを実施する必要があります。
(2) プロジェクトが公開される前に、第三者の専門監査チームから技術支援を求める必要があります。
私たちに関しては
SharkTeam のビジョンは、Web3 世界のセキュリティを包括的に保護することです。このチームは世界中から集まった経験豊富なセキュリティ専門家と上級研究者で構成されており、ブロックチェーンとスマートコントラクトの基礎理論に精通しており、スマートコントラクトの監査、オンチェーン分析、緊急対応などのサービスを提供しています。 Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE など、ブロックチェーン エコシステムのさまざまな分野の主要企業と長期的な協力関係を確立しています。
公式ウェブサイト:https://www.sharkteam.org
Twitter: https://twitter.com/sharkteamorg
ディスコード: https://discord.gg/jGH9xXCjDZ
全てのコメント