Gains Network フォークのバグにより、トレーダーはすべての取引で 900% の利益を得ることができます: レポート

Zellic と呼ばれるチームによって、Gains Network プロトコルのさまざまなフォークで 2 つのセキュリティ脆弱性が発見されたようです。最初の脆弱性により、攻撃者は非常に高い価格で取引を開始することを妨げるチェックを回避することができ、攻撃者に多大な利益をもたらす可能性がありました。この脆弱性は特定のフォークで見つかりましたが、Gains Network の現在のバージョンでは見つかりませんでした。


ブロックチェーンセキュリティ会社ゼリックが4月19日に発表したレポートでは、ゲインズネットワーク取引プロトコルの特定のブランチに2つの異なる脆弱性があるため、トレーダーはトークンの価格に関係なく、各取引で最大900%の天文学的な利益を確保できた可能性があることが明らかになった。 。これらのバグの 1 つは、Gains の以前のイテレーションで特定され、その後修正されました。ただし、2 番目の脆弱性は、プロトコルの特定のフォークに固有のものでした。

Zellic の発表に基づいて、Gambit Trade、Holdstation Exchange、および Krav Trade の開発者は、Zellic のチームによって、それぞれの Gains フォークに脆弱性があることを知らされました。それ以来、これらのチームはこの問題に対処し、プロトコルにこれらの特定の欠陥がないことを確認するための措置を講じてきました。ただし、Zellic 氏は、Gains フォークの他のバージョンも依然として危険にさらされている可能性があると警告しました。

Gains Network は、独自の Web サイトに基づいて、Polygon と Arbitrum でさまざまな製品を提供する分散型金融 (DeFi) システムを代表しています。レバレッジ取引アプリケーションの名前は「gTrade」です。ブロックチェーン分析プラットフォームであるDefiLlamaの報告によると、2023年5月の立ち上げ以来、デリバティブ取引高は250億ドル以上を記録している。

Gains Network フォークのバグにより、トレーダーはすべての取引で 900% の利益を得ることができます: レポート

ゼリック氏は、広く使用されている多数の分散型金融(DeFi)取引アプリケーションはゲインズネットワークの基本的なコードベースに基づいて構築されていると主張した。これらには、Gambit Trade と Holdstation に加えて、その他のさまざまなプロトコルが含まれます。特定のフォークを調査する際にエクスプロイトを特定しましたが、それがどのフォークに含まれていたかは明らかにしませんでした。

レポートの調査結果に基づいて、Gains Network ユーザーは、マーケット、リバーサル、モメンタムという 3 つの異なるタイプの取引資産の注文を行うオプションを持っています。成行注文は、価格変動を無視して、現在の市場価格で即座に執行されます。

暗号通貨投資家として、スマートコントラクトを通じてモメンタム取引またはリバーサル取引を行うと、希望する取引価格の詳細を含む「注文」が記録されます。市場でその価格が設定されると、どのユーザーもexecuteLimitOrder関数をトリガーして注文をアクティブ化できます。実行を開始するユーザーは、必ずしも最初に注文を出したユーザーである必要はないことに注意することが重要です。取引を実行する役割と引き換えに、ユーザーは少額の「約定手数料」の支払いを受け取ります。

ユーザーは、従来の取引所と同じように指値注文と逆指値注文を設定できますが、注文執行に集中仲介業者に依存する必要はありません。

暗号通貨投資家として、取引を終了するための特定の価格を自動的に決定できる機能を利用できます。テイクプロフィット価格を設定することで、取引がそのレベルに達したときに利益を確保することを目的とし、ストップロス価格は、市場が私に不利に動いた場合に潜在的な損失を制限することを目的としています。これらの注文の目的は、事前定義された条件に基づいて自動化された出口戦略を提供することです。

ゲインズフォークのバグにより買い注文で 900% の利益が得られる

ゲインズフォーク取引システムを研究している研究者として、私はストップロス注文の処理に関する興味深い発見に遭遇しました。注文を開始すると、損益計算に使用される「currentPrice」変数にストップロス価格が保存されます。したがって、トレーダーがストップロス価格を始値よりも高く設定できれば、その後の値動きから自動的に利益を確保することになります。

金融アナリストとして、私はこれを次のように言い換えます。ビットコイン (BTC) の価格が 63,000 ドルで、オープンポジションを 62,000 ドルに設定し、ストップロスを 64,000 ドルに設定した場合、価格が 62,000 ドルまで下がった場合、注文は約定されます。 。ただし、現在価格は指定したストップロスのすぐ下にあるため、自動決済が開始されます。

さらに、ユーザーが指定したストップロス価格が現在の市場価格として記録されます。その結果、実際の利益は約 0 ドルであるはずですが、ユーザーは 2,000 ドルの利益を得ることができます。この脆弱性により、攻撃者があらゆる取引で利益を上げ、最終的にはプロトコルの資金を空にする可能性があります。

取引プロトコルの潜在的な脆弱性を調査している研究者として、ユーザーが買い注文の最初の購入価格を超えるストップロス価格を設定できないようにするための安全策を導入することをお勧めします。これを実現するには、プロトコルに、不整合をチェックし、ユーザーがそのような試みをしたときに「wrong_sl」というラベルの付いたエラー メッセージをスローする検証メカニズムを含める必要があります。

Gains Network フォークのバグにより、トレーダーはすべての取引で 900% の利益を得ることができます: レポート

ただし、調査者は、特定の状況ではこのチェックが回避される可能性があることを発見しました。

ユーザーが初めて注文を開始するとき、希望のエントリ価格を指定します。これは「openPrice」変数に保存されます。この段階でチェックが行われます。それにもかかわらず、注文の処理を担当する関数は、「openPrice」変数を「a.Price」に、開始される新しい取引による価格の影響を加えたものと等しくなるように変更します。より簡単に言うと、ユーザーが注文を開始するとき、最初にエントリ価格を設定し、それが記録されます。その後、チェックが行われます。ただし、注文が実行されると、この最初のエントリー価格は、現在の市場価格に注文サイズによる追加コストを加えたもの (価格への影響) に置き換えられます。

ユーザーが異常に高い始値を入力した場合、システムは執行者が価格チェックをトリガーせずに注文を処理できるようにし、その結果、より低い始値で注文を約定することになります。

たとえば、ゼリック氏は、1,000 兆ドル ($100000e10) の価格のトークンを購入しようとする敵が関与し、ほぼ同じ価値、具体的には 999.999999999998 兆ドルにストップロスを設定するという仮想シナリオについて熟考しました。この注文の発行に続いて、攻撃者は独自のトランザクションを実行し、その結果、取引の価格調整後の新しい価格を反映するために openPrice が変更されます。

取引が完了してアクティブになると、その後の始値が最初に設定されたストップロスレベルを下回った場合、ストップロス注文をトリガーすることでそのポジションを終了できます。敵対者がストップロス取引を実行すると、最終価格とストップロスが設定された価格との差から利益が得られます。

この取引は攻撃者に900%の利益をもたらすだろうとゼリック氏は主張した。

Gains Network フォークのバグにより、トレーダーはすべての取引で 900% の利益を得ることができます: レポート

私たちが発見した最初の欠陥は、Zellic チームがそれを特定したとき、元の Gains Network の一部ではありませんでした。代わりに、それは私たちが調べていた分岐したバリエーションで現れました。しかし、この問題の調査中に、Gains 自体の以前のバージョンに存在していた 2 つ目の問題に遭遇しました。

2 番目のバグにより売り注文で 900% の利益が得られる

2 番目のバグにより、トレーダーは価格変動に関係なく売り注文で 900% の利益を得ることができました。

ゲインズフォークでは、取引が完了すると、プラットフォームはユーザーが指定したストップロスまたはテイクプロフィットレベルを「int」という名前の変数に変換します。次に、この変数を使用して利益をパーセンテージとして決定します。ただし、ユーザーがストップロスまたはテイクプロフィットの値を 2^256-1 に設定した場合、その後の計算では「int」が負の値になります。

イーサリアムでは、正の数の最大値は 2^256-1 で表されます。 Solidity プログラミング言語でこの制限を超える値を合計に追加しようとすると、計算で「オーバーフロー」が発生し、代わりにゼロから再スタートします。この値は「type(uint256).max」とも呼ばれます。

Zellic 氏の調査結果によれば、攻撃者が元の投資の 9 倍を超えるレバレッジを利用した場合、900% を超える利益を得る可能性があります。

「currentPrice を type(uint256).max とした売り注文を考えてみましょう。 diff の結果の値は openPrice + 1 (int(type(uint256).max) = -1 ) となるため、利益率は 100 * レバレッジにほぼ等しくなります。したがって、レバレッジが 9 より大きい場合、関数は利益を 900% として返します。」

金融取引における契約条項を研究している研究者として、私は利益確定レベルとして 2^256-1 のエントリーを防ぐことを目的とした条項に遭遇しました。このチェックは、最初の注文時に実行されるように設計されています。しかし、私は抜け穴を発見しました。注文がオープンされた後にユーザーが利益確定設定を変更した場合、この制限を回避して、希望する利益レベルとして 2^256-1 を入力できる可能性があります。この見落としにより、ユーザーは取引するたびに約 900% の自動的な利益を得る可能性がありました。

Gains の以前のイテレーションでは、2 番目のエラーに関する問題があり、アップデートによって解決されました。今回の改訂版では、テイクプロフィットとストップロスの調整時だけでなく、初期設定時にも検証プロセスを実行するため、この問題が回避されています。

Zellic は、特定された 2 つのセキュリティ脆弱性に関する情報を前述のフォークすべてと共有し、影響を受ける可能性のある他のプロトコルを調査するために Crypto Security Alliance に連絡を取ったとされています。しかし、一部のゲインズフォークバージョンには依然としてこれらのバグが潜んでいる可能性があり、ユーザーの資金を流出リスクにさらす可能性があるため、注意喚起が発行されました。

仮想通貨投資家として、私は CryptoMoon に連絡して、Gains Network、Gambit Trade、Holdstation Exchange、および Krav Trade にコメントを求める試みについて問い合わせました。ただし、この記事の公開時点では、これらの取引所からの返答はまだ受け取っていません。

ゲインズ・ネットワークによると、彼らは永久契約から導き出された正確性が低いと考えられる数値ではなく、上場資産の本物の市場価格を提供しているという。さらに、彼らは競合他社よりも優れた外国為替取引能力を持っていると自慢しています。

2024-05-09 23:40