# Move言語の参照安全メカニズムに新しい整数オーバーフローの脆弱性が発見されました最近、Move言語の詳細な研究を行っている際に、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照の安全性検証プロセスで発生し、Move言語のいくつかのコアメカニズムに関係しています。この脆弱性を分析することで、Move言語の設計と実装をより深く理解することができます。## Move言語の検証プロセスMove言語は、バイトコードを実行する前にコードユニットを検証します。このプロセスは4つのステップに分かれています。今回発見された脆弱性は、reference_safetyというステップに存在します。reference_safetyモジュールは、参照の安全性を検証するためのコア関数を定義しています。主に、浮遊参照の存在、可変参照のアクセスが安全か、グローバルストレージの参照アクセスが安全かなどの問題をチェックします。検証プロセスの入口関数は、各関数を分析するためにanalyze_functionを呼び出します。analyze_functionは、関数内の各基本ブロックを検証します。基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-bde089e8295c5d7b9420c93ad5d47b35)## Move言語での参照は安全ですMove言語は二種類の参照タイプをサポートしています: 不変参照(&)と可変参照(&mut)。不変参照はデータを読み取るために使用され、可変参照はデータを変更するために使用されます。この設計はコードの安全性と可読性を向上させるのに役立ちます。引用セキュリティ検証モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。検証プロセスは主に次の内容を含みます:1. 基本ブロックコードを実行する2. マージ実行前と実行後の状態3. ブロックの状態を更新する4. 後置条件を後続のブロックに伝播するこのプロセスは、V8ターボファンのSea of Nodesの考え方に似ています。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-eb6397a8a98b556071724d98a4837b59)## 脆弱性分析バグは、マージ実行の前後の状態のプロセスで発生します。関数の引数の長さとローカル変数の長さを合わせた合計が256を超えると、u8型を使用してローカル変数のインデックスを表現するため、整数オーバーフローが発生します。Move言語にはローカル変数の数を検証するプロセスがありますが、この検証にはパラメータの長さは含まれていません。開発者はパラメータとローカル変数の合計をチェックする必要があることに気づいたようですが、実際のコードではローカル変数の数のみがチェックされています。この整数オーバーフローは、サービス拒否攻撃(DoS)を引き起こす可能性があります。攻撃者は、オーバーフローを利用してブロックの状態を変更するループコードブロックを構築できます。基本ブロックを再実行する際に、命令がアクセスする必要のあるインデックスが新しい状態に存在しない場合、プログラムがクラッシュします。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-6952376046c901dfae2b19d5144746b5)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-92892f2a9dffea9f805f3a1952e82703)! [Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-1347ef8b31983109babdf8ef29270c67)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ac937ab4f426d30a476feb32520a95b4)! [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)## エクスプロイト私たちはこの脆弱性を示すために、概念実証(PoC)を構築しました:1. 無条件分岐命令を含む基本ブロックを作成し、それを複数回実行します。2. パラメータとローカル変数の合計数を264に設定したため、新しいローカル変数のマッピング長が8でオーバーフローしました。3. 基本ブロックを再実行する際に、存在しないローカル変数インデックスにアクセスしようとすると、panicが発生します。! [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)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ae25cc7d31726e2e1477e6d112b7aa75)## まとめこの脆弱性は再び絶対的に安全なコードは存在しないことを証明しました。Move言語は実行前に静的検証を行いますが、整数オーバーフローの脆弱性によって回避される可能性があります。Move言語の今後の発展について、私たちは次のように提案します:1. 実行時に追加のチェックコードを増やして、予期しない状況を防ぎます。2. 検証段階のセキュリティチェックにのみ依存せず、運用段階でもセキュリティ強化を行うべきです。Move言語のセキュリティ研究の先駆者として、私たちはMoveのセキュリティ問題をさらに深く研究し、その発展に貢献していきます。
Move言語の参照安全性検証で新しい整数オーバーフローの脆弱性が発見されました
Move言語の参照安全メカニズムに新しい整数オーバーフローの脆弱性が発見されました
最近、Move言語の詳細な研究を行っている際に、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照の安全性検証プロセスで発生し、Move言語のいくつかのコアメカニズムに関係しています。この脆弱性を分析することで、Move言語の設計と実装をより深く理解することができます。
Move言語の検証プロセス
Move言語は、バイトコードを実行する前にコードユニットを検証します。このプロセスは4つのステップに分かれています。今回発見された脆弱性は、reference_safetyというステップに存在します。
reference_safetyモジュールは、参照の安全性を検証するためのコア関数を定義しています。主に、浮遊参照の存在、可変参照のアクセスが安全か、グローバルストレージの参照アクセスが安全かなどの問題をチェックします。
検証プロセスの入口関数は、各関数を分析するためにanalyze_functionを呼び出します。analyze_functionは、関数内の各基本ブロックを検証します。基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
Move言語での参照は安全です
Move言語は二種類の参照タイプをサポートしています: 不変参照(&)と可変参照(&mut)。不変参照はデータを読み取るために使用され、可変参照はデータを変更するために使用されます。この設計はコードの安全性と可読性を向上させるのに役立ちます。
引用セキュリティ検証モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。検証プロセスは主に次の内容を含みます:
このプロセスは、V8ターボファンのSea of Nodesの考え方に似ています。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
脆弱性分析
バグは、マージ実行の前後の状態のプロセスで発生します。関数の引数の長さとローカル変数の長さを合わせた合計が256を超えると、u8型を使用してローカル変数のインデックスを表現するため、整数オーバーフローが発生します。
Move言語にはローカル変数の数を検証するプロセスがありますが、この検証にはパラメータの長さは含まれていません。開発者はパラメータとローカル変数の合計をチェックする必要があることに気づいたようですが、実際のコードではローカル変数の数のみがチェックされています。
この整数オーバーフローは、サービス拒否攻撃(DoS)を引き起こす可能性があります。攻撃者は、オーバーフローを利用してブロックの状態を変更するループコードブロックを構築できます。基本ブロックを再実行する際に、命令がアクセスする必要のあるインデックスが新しい状態に存在しない場合、プログラムがクラッシュします。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
エクスプロイト
私たちはこの脆弱性を示すために、概念実証(PoC)を構築しました:
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
まとめ
この脆弱性は再び絶対的に安全なコードは存在しないことを証明しました。Move言語は実行前に静的検証を行いますが、整数オーバーフローの脆弱性によって回避される可能性があります。
Move言語の今後の発展について、私たちは次のように提案します:
Move言語のセキュリティ研究の先駆者として、私たちはMoveのセキュリティ問題をさらに深く研究し、その発展に貢献していきます。