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