# Move言語の参照安全モジュールで新しい整数オーバーフローの脆弱性が発見されました最近、Move言語の詳細な研究を行う中で、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照セキュリティ検証モジュールに存在し、発生プロセスは非常に興味深いものです。本稿では、この脆弱性について詳しく分析し、関連するMove言語の背景知識を紹介します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-bde089e8295c5d7b9420c93ad5d47b35)Move言語はバイトコードを実行する前にコードユニットを検証し、検証プロセスは4つのステップに分かれています。今回発見された脆弱性はreference_safetyステップに存在しています。引用安全検証モジュールは、空の参照が存在するかどうか、可変参照のアクセスが安全であるか、グローバルストレージの参照アクセスが安全であるかなどを確認する主な役割を担っています。検証プロセスはanalyze_function関数から始まり、各基本ブロックの検証が行われます。Move言語において、基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。システムはバイトコードを走査し、すべての分岐命令とループ命令のシーケンスを探して基本ブロックを特定します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-eb6397a8a98b556071724d98a4837b59)Move言語は2種類の参照タイプをサポートしています:不変参照(&)と可変参照(&mut)。参照安全モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。検証プロセスはAbstractState構造体を使用し、borrow graphとlocalsの2つのコンポーネントを含み、関数内の参照の安全性を保証します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-6952376046c901dfae2b19d5144746b5)検証プロセスでは、システムは基本ブロックコードを生成してポストステートを作成し、プレステートとポストステートをマージしてブロックステートを更新します。状態が変化し、ループが存在する場合は、ポストステートがプレステートと等しくなるか、エラーが発生するまで基本ブロックを繰り返し実行します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-92892f2a9dffea9f805f3a1952e82703)バグはjoin_関数に発生します。パラメータの長さとローカル変数の長さを合計したものが256を超えると、u8型でlocalsを反復処理するため、整数オーバーフローが発生します。Move言語にはlocalsの数を検証するプロセスがありますが、ローカル変数の数しかチェックしておらず、パラメータの長さは含まれていません。! [Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-1347ef8b31983109babdf8ef29270c67)この整数オーバーフローは、サービス拒否攻撃を引き起こす可能性があります。攻撃者はループコードブロックを構築し、オーバーフローを利用してブロックの状態を変更することができます。execute_block関数が再度実行されると、指令がアクセスする必要のあるインデックスが新しいAbstractStateのローカルマップに存在しない場合、システムがクラッシュします。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ac937ab4f426d30a476feb32520a95b4)この脆弱性を示すために、無条件分岐命令を含む基本ブロックを構築できます。適切なパラメータとローカル変数の数を設定することで、locals mapの長さが8にオーバーフローします。2回目の実行時に存在しないoffsetにアクセスしようとするとpanicが発生します。! [Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-a18dcf64108d1a75b728ffe8391100f1)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-7c8fe4e4cf376ad49d729a6f80df6f08)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-c598d61833550ec5494f9a5a4ee2a760)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-12c60c225a5629f6d927982a7585fc5b)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-94b0c97bb9e287ed715cddb5165f129d)! [Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-095e2b585c45a86b0a689214ca673619)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-5ebaa03263f7a87edd78d146c5beadd2)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-fe905356cbee596e8aba08ec14f5d508)この脆弱性は、慎重に設計された言語でさえも安全上のリスクが存在する可能性があることを私たちに警告しています。Move言語に関しては、予期しない事態を防ぐために、実行時にもっと多くのチェックコードを追加することをお勧めします。現在、Moveは主にverify段階で安全チェックを行っていますが、一旦検証が回避されると、より深刻な問題を引き起こす可能性があります。Move言語の安全性研究の先駆者として、私たちは関連する安全問題を深く掘り下げ、Moveエコシステムの健全な発展に貢献し続けます。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ae25cc7d31726e2e1477e6d112b7aa75)
Move言語の参照セキュリティモジュールが新しい整数オーバーフローの脆弱性を発見しました
Move言語の参照安全モジュールで新しい整数オーバーフローの脆弱性が発見されました
最近、Move言語の詳細な研究を行う中で、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照セキュリティ検証モジュールに存在し、発生プロセスは非常に興味深いものです。本稿では、この脆弱性について詳しく分析し、関連するMove言語の背景知識を紹介します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
Move言語はバイトコードを実行する前にコードユニットを検証し、検証プロセスは4つのステップに分かれています。今回発見された脆弱性はreference_safetyステップに存在しています。
引用安全検証モジュールは、空の参照が存在するかどうか、可変参照のアクセスが安全であるか、グローバルストレージの参照アクセスが安全であるかなどを確認する主な役割を担っています。検証プロセスはanalyze_function関数から始まり、各基本ブロックの検証が行われます。
Move言語において、基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。システムはバイトコードを走査し、すべての分岐命令とループ命令のシーケンスを探して基本ブロックを特定します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
Move言語は2種類の参照タイプをサポートしています:不変参照(&)と可変参照(&mut)。参照安全モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。検証プロセスはAbstractState構造体を使用し、borrow graphとlocalsの2つのコンポーネントを含み、関数内の参照の安全性を保証します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
検証プロセスでは、システムは基本ブロックコードを生成してポストステートを作成し、プレステートとポストステートをマージしてブロックステートを更新します。状態が変化し、ループが存在する場合は、ポストステートがプレステートと等しくなるか、エラーが発生するまで基本ブロックを繰り返し実行します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
バグはjoin_関数に発生します。パラメータの長さとローカル変数の長さを合計したものが256を超えると、u8型でlocalsを反復処理するため、整数オーバーフローが発生します。Move言語にはlocalsの数を検証するプロセスがありますが、ローカル変数の数しかチェックしておらず、パラメータの長さは含まれていません。
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
この整数オーバーフローは、サービス拒否攻撃を引き起こす可能性があります。攻撃者はループコードブロックを構築し、オーバーフローを利用してブロックの状態を変更することができます。execute_block関数が再度実行されると、指令がアクセスする必要のあるインデックスが新しいAbstractStateのローカルマップに存在しない場合、システムがクラッシュします。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
この脆弱性を示すために、無条件分岐命令を含む基本ブロックを構築できます。適切なパラメータとローカル変数の数を設定することで、locals mapの長さが8にオーバーフローします。2回目の実行時に存在しないoffsetにアクセスしようとするとpanicが発生します。
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
この脆弱性は、慎重に設計された言語でさえも安全上のリスクが存在する可能性があることを私たちに警告しています。Move言語に関しては、予期しない事態を防ぐために、実行時にもっと多くのチェックコードを追加することをお勧めします。現在、Moveは主にverify段階で安全チェックを行っていますが、一旦検証が回避されると、より深刻な問題を引き起こす可能性があります。
Move言語の安全性研究の先駆者として、私たちは関連する安全問題を深く掘り下げ、Moveエコシステムの健全な発展に貢献し続けます。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました