# Move言語における参照セキュリティ検証の整数オーバーフロー脆弱性分析最近、研究者たちはAptos Moveevmを深く分析する中で、新たな整数オーバーフローの脆弱性を発見しました。この脆弱性はMove言語の参照安全性検証プロセスに存在し、具体的にはreference_safetyステップに関連しています。本記事では、この脆弱性について詳しく探討し、その発生プロセスと潜在的影響について説明します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-bde089e8295c5d7b9420c93ad5d47b35)## Move言語の検証プロセスMove言語はバイトコードを実行する前にコードユニットの検証を行います。このプロセスは4つのステップに分かれています。今回発見された脆弱性はreference_safetyステップに存在します。このステップは主に参照の安全性を検証するために使用され、ダングリング参照の存在、可変参照アクセスの安全性、グローバルストレージ参照アクセスの安全性などをチェックします。検証プロセスはまず基本ブロックを識別します。Move言語では、基本ブロックはバイトコードを走査し、すべての分岐命令とループ命令のシーケンスを探すことによって決定されます。各基本ブロックは、入口と出口を除いて分岐命令がないコードのシーケンスです。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-eb6397a8a98b556071724d98a4837b59)## 引用セキュリティ検証メカニズムMove言語は、不変参照(&)と可変参照(&mut)の2種類をサポートしています。参照の安全性検証モジュールは、関数単位で、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。検証プロセスは、状態を表すためにAbstractState構造体を使用し、borrow graphとlocalsの2つの重要なコンポーネントを含みます。検証中には、基本ブロックの前後の状態変化を比較し、その結果を後続のブロックに伝播させます。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-6952376046c901dfae2b19d5144746b5)## 脆弱性の詳細バグはjoin_関数に存在します。この関数は基本ブロックの前後の状態を結合するために使用されます。問題はiter_locals()メソッドにあり、これはu8型のイテレータを返します。関数の引数の長さとローカル変数の長さの合計が256を超えると、整数オーバーフローが発生します。Move言語にはlocalsの数を検証するプロセスがありますが、ローカル変数の数だけがチェックされ、パラメータの長さは含まれていません。これは開発者の見落としかもしれません。! [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)! [Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-095e2b585c45a86b0a689214ca673619)## エクスプロイトと影響この整数オーバーフローの脆弱性を利用して、攻撃者は特別なループコードブロックを構築し、ブロックの状態を変更することができます。基本ブロックを再度実行すると、命令がアクセスするインデックスが新しいローカルマップに存在しない場合、サービス拒否(DoS)を引き起こします。具体的には、reference safetyモジュールにおいて、MoveLoc/CopyLoc/FreeRefなどのオペコードは、存在しないLocalIndexにアクセスすることによってpanicを引き起こし、それによってノード全体がクラッシュする可能性があります。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-5ebaa03263f7a87edd78d146c5beadd2)! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-fe905356cbee596e8aba08ec14f5d508)## まとめと提案この脆弱性は、慎重に設計された言語であっても、セキュリティ上のリスクが存在する可能性があることを再び証明しました。Move言語に関しては、私たちは次のことをお勧めします:1. コード監査を強化し、同様の不注意を避ける。2. Moveランタイムにより多くのチェックコードを追加し、検証フェーズのセキュリティチェックにのみ依存しない。3. 実行段階でセキュリティ強化策を追加し、検証が回避された後により深刻な問題が発生するのを防ぎます。Move言語のセキュリティ研究の先駆者として、私たちは関連するセキュリティ問題を引き続き深く探求し、Moveエコシステムの健全な発展に貢献します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ae25cc7d31726e2e1477e6d112b7aa75)
Move言語の参照セキュリティ検証における整数オーバーフローの脆弱性分析
Move言語における参照セキュリティ検証の整数オーバーフロー脆弱性分析
最近、研究者たちはAptos Moveevmを深く分析する中で、新たな整数オーバーフローの脆弱性を発見しました。この脆弱性はMove言語の参照安全性検証プロセスに存在し、具体的にはreference_safetyステップに関連しています。本記事では、この脆弱性について詳しく探討し、その発生プロセスと潜在的影響について説明します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
Move言語の検証プロセス
Move言語はバイトコードを実行する前にコードユニットの検証を行います。このプロセスは4つのステップに分かれています。今回発見された脆弱性はreference_safetyステップに存在します。このステップは主に参照の安全性を検証するために使用され、ダングリング参照の存在、可変参照アクセスの安全性、グローバルストレージ参照アクセスの安全性などをチェックします。
検証プロセスはまず基本ブロックを識別します。Move言語では、基本ブロックはバイトコードを走査し、すべての分岐命令とループ命令のシーケンスを探すことによって決定されます。各基本ブロックは、入口と出口を除いて分岐命令がないコードのシーケンスです。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
引用セキュリティ検証メカニズム
Move言語は、不変参照(&)と可変参照(&mut)の2種類をサポートしています。参照の安全性検証モジュールは、関数単位で、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。
検証プロセスは、状態を表すためにAbstractState構造体を使用し、borrow graphとlocalsの2つの重要なコンポーネントを含みます。検証中には、基本ブロックの前後の状態変化を比較し、その結果を後続のブロックに伝播させます。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
脆弱性の詳細
バグはjoin_関数に存在します。この関数は基本ブロックの前後の状態を結合するために使用されます。問題はiter_locals()メソッドにあり、これはu8型のイテレータを返します。関数の引数の長さとローカル変数の長さの合計が256を超えると、整数オーバーフローが発生します。
Move言語にはlocalsの数を検証するプロセスがありますが、ローカル変数の数だけがチェックされ、パラメータの長さは含まれていません。これは開発者の見落としかもしれません。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
エクスプロイトと影響
この整数オーバーフローの脆弱性を利用して、攻撃者は特別なループコードブロックを構築し、ブロックの状態を変更することができます。基本ブロックを再度実行すると、命令がアクセスするインデックスが新しいローカルマップに存在しない場合、サービス拒否(DoS)を引き起こします。
具体的には、reference safetyモジュールにおいて、MoveLoc/CopyLoc/FreeRefなどのオペコードは、存在しないLocalIndexにアクセスすることによってpanicを引き起こし、それによってノード全体がクラッシュする可能性があります。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
まとめと提案
この脆弱性は、慎重に設計された言語であっても、セキュリティ上のリスクが存在する可能性があることを再び証明しました。Move言語に関しては、私たちは次のことをお勧めします:
Move言語のセキュリティ研究の先駆者として、私たちは関連するセキュリティ問題を引き続き深く探求し、Moveエコシステムの健全な発展に貢献します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました