# Move言語の参照安全モジュールで新しい整数オーバーフローの脆弱性が発見されました最近、Move言語の詳細な研究を行っている際に、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照の安全性検証プロセスに存在し、その発生過程は非常に興味深いものです。本稿では、この脆弱性を詳しく分析し、Move言語に関するいくつかの背景知識を探ります。Move言語はバイトコードを実行する前にコードユニットの検証を行い、4つのステップに分かれています。この脆弱性はreference_safetyステップで発生します。このステップは参照の安全性を確認する責任があり、特に空の参照の存在、可変参照へのアクセスの安全性、グローバルストレージへの参照アクセスの安全性などをチェックします。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-bde089e8295c5d7b9420c93ad5d47b35)セキュリティ検証のためのエントリ関数は、analyze_functionを呼び出し、各基本ブロックを検証します。基本ブロックとは、エントリおよびエグジットを除いて分岐命令がないコードシーケンスを指します。Move言語は、バイトコードを走査し、すべての分岐命令およびループ命令シーケンスを探すことによって基本ブロックを識別します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-eb6397a8a98b556071724d98a4837b59)Move言語は二種類の参照型をサポートしています:不変参照(&)と可変参照(&mut)。参照安全モジュールは、関数内の基本ブロックのバイトコード命令をスキャンすることによって、すべての参照操作の合法性を検証します。検証プロセスはAbstractState構造体を使用し、borrow graphとlocalsを含むことで、関数内の参照の安全性を保証します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-6952376046c901dfae2b19d5144746b5)バグはjoin_関数内に発生します。パラメータの長さとローカル変数の長さを合わせたものが256を超えると、iter_locals()関数がu8タイプのイテレータを返すため、整数オーバーフローが発生します。Moveにはlocalsの数を検証するプロセスがありますが、check boundsモジュールではlocalsのみが検証され、パラメータの長さは含まれていません。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-92892f2a9dffea9f805f3a1952e82703)この整数オーバーフローは、サービス拒否(DoS)攻撃を引き起こす可能性があります。ループコードブロックが存在し、オーバーフローを利用してブロックの状態を変更する場合、新しいローカルマップは以前のものとは異なります。execute_block関数を再実行する際、命令がアクセスする必要のあるインデックスが新しいAbstractStateローカルマップに存在しない場合、DoSが発生します。! [Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-1347ef8b31983109babdf8ef29270c67)私たちは、gitで再現可能なPoCを提供しました。このPoCのコードブロックには無条件分岐命令が含まれており、最後の命令を実行するたびに最初の命令にジャンプし、execute_blockおよびjoin関数を複数回呼び出します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ac937ab4f426d30a476feb32520a95b4)この脆弱性は、Moveのような安全性を重視する言語でも安全上のリスクが存在する可能性があることを示しています。コード監査の重要性は言うまでもなく、プログラマーはどうしても見落としがちです。Move言語の安全研究のリーダーとして、私たちはMoveの安全性の問題を引き続き深く研究していきます。私たちは、Move言語の設計者が実行時により多くのチェックコードを追加して、予期しない事態を防ぐことを提案します。現在、Moveは主に検証段階でセキュリティチェックを行っていますが、それでは不十分な可能性があります。検証が回避されると、実行段階で十分なセキュリティ強化が欠如しているため、より深刻な問題を引き起こす可能性があります。! [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)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ae25cc7d31726e2e1477e6d112b7aa75)
Move言語の参照セキュリティモジュールが整数オーバーフローの脆弱性を発見、DoS攻撃を引き起こす可能性がある
Move言語の参照安全モジュールで新しい整数オーバーフローの脆弱性が発見されました
最近、Move言語の詳細な研究を行っている際に、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照の安全性検証プロセスに存在し、その発生過程は非常に興味深いものです。本稿では、この脆弱性を詳しく分析し、Move言語に関するいくつかの背景知識を探ります。
Move言語はバイトコードを実行する前にコードユニットの検証を行い、4つのステップに分かれています。この脆弱性はreference_safetyステップで発生します。このステップは参照の安全性を確認する責任があり、特に空の参照の存在、可変参照へのアクセスの安全性、グローバルストレージへの参照アクセスの安全性などをチェックします。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
セキュリティ検証のためのエントリ関数は、analyze_functionを呼び出し、各基本ブロックを検証します。基本ブロックとは、エントリおよびエグジットを除いて分岐命令がないコードシーケンスを指します。Move言語は、バイトコードを走査し、すべての分岐命令およびループ命令シーケンスを探すことによって基本ブロックを識別します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
Move言語は二種類の参照型をサポートしています:不変参照(&)と可変参照(&mut)。参照安全モジュールは、関数内の基本ブロックのバイトコード命令をスキャンすることによって、すべての参照操作の合法性を検証します。検証プロセスはAbstractState構造体を使用し、borrow graphとlocalsを含むことで、関数内の参照の安全性を保証します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
バグはjoin_関数内に発生します。パラメータの長さとローカル変数の長さを合わせたものが256を超えると、iter_locals()関数がu8タイプのイテレータを返すため、整数オーバーフローが発生します。Moveにはlocalsの数を検証するプロセスがありますが、check boundsモジュールではlocalsのみが検証され、パラメータの長さは含まれていません。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
この整数オーバーフローは、サービス拒否(DoS)攻撃を引き起こす可能性があります。ループコードブロックが存在し、オーバーフローを利用してブロックの状態を変更する場合、新しいローカルマップは以前のものとは異なります。execute_block関数を再実行する際、命令がアクセスする必要のあるインデックスが新しいAbstractStateローカルマップに存在しない場合、DoSが発生します。
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
私たちは、gitで再現可能なPoCを提供しました。このPoCのコードブロックには無条件分岐命令が含まれており、最後の命令を実行するたびに最初の命令にジャンプし、execute_blockおよびjoin関数を複数回呼び出します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
この脆弱性は、Moveのような安全性を重視する言語でも安全上のリスクが存在する可能性があることを示しています。コード監査の重要性は言うまでもなく、プログラマーはどうしても見落としがちです。Move言語の安全研究のリーダーとして、私たちはMoveの安全性の問題を引き続き深く研究していきます。
私たちは、Move言語の設計者が実行時により多くのチェックコードを追加して、予期しない事態を防ぐことを提案します。現在、Moveは主に検証段階でセキュリティチェックを行っていますが、それでは不十分な可能性があります。検証が回避されると、実行段階で十分なセキュリティ強化が欠如しているため、より深刻な問題を引き起こす可能性があります。
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました