# Move言語における整数オーバーフローの脆弱性の解析Move言語の詳細な研究を行った結果、新しい整数オーバーフローの脆弱性が発見されました。この脆弱性は、Move言語のバイトコード検証プロセスの参照安全性チェック段階に現れます。本記事では、この脆弱性のトリガー過程を詳細に分析し、Move言語のいくつかのコア概念について探討します。## Move言語バイトコード検証プロセスMove言語はバイトコードを実行する前にコード検証を行い、4つのステップに分かれています。今回の脆弱性はreference_safetyステップで発生しました。このステップは主に参照の安全性を検証する役割を担っており、空の参照が存在しないか、可変参照のアクセスが安全かどうかを確認します。検証プロセスは、まずコード内の基本ブロックを識別します。基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。Moveはバイトコードを走査し、すべての分岐命令とループ命令を検索して基本ブロックを特定します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-bde089e8295c5d7b9420c93ad5d47b35)## Moveにおける参照の安全性Moveは2種類の参照タイプをサポートしています: 不変参照(&)と可変参照(&mut)。参照安全モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であることを検証します。検証プロセスは、状態を表すためにAbstractState構造体を使用し、借用グラフとローカルを含みます。検証時には、実行前後の状態を比較し、ブロック状態をマージして更新します。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-eb6397a8a98b556071724d98a4837b59)## 脆弱性分析バグはjoin_関数に存在します。この関数は、実行前後の状態をマージし、localsマップとborrowグラフを更新するために使用されます。問題は、localsイテレーターがu8型を返し、パラメータの長さとローカル変数の長さの合計が256を超えるとオーバーフローが発生することです。Moveにはlocalsの数を検証するプロセスがありますが、ローカル変数の数のみを検証し、パラメータの長さは含まれていません。! [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)## エクスプロイトこのオーバーフローを利用すると、基本ブロックの状態を変更できます。ループコード内では、基本ブロックが実行されるたびに状態が変化します。再度実行する際に、命令がアクセスするインデックスが新しいローカルマップに存在しない場合、panicが発生し、DoS攻撃を実現します。! [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)## PoCデモ特定のパラメータとローカル変数の数を設定することで、整数オーバーフローを引き起こし、プログラムがクラッシュする再現可能なPoCコードを提供しました。! [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言語のセキュリティ問題について引き続き深く研究し、その発展に貢献していきます。! [Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました](https://img-cdn.gateio.im/social/moments-ae25cc7d31726e2e1477e6d112b7aa75)
Move言語の整数オーバーフロー脆弱性の解明:バイトコード検証における危険性
Move言語における整数オーバーフローの脆弱性の解析
Move言語の詳細な研究を行った結果、新しい整数オーバーフローの脆弱性が発見されました。この脆弱性は、Move言語のバイトコード検証プロセスの参照安全性チェック段階に現れます。本記事では、この脆弱性のトリガー過程を詳細に分析し、Move言語のいくつかのコア概念について探討します。
Move言語バイトコード検証プロセス
Move言語はバイトコードを実行する前にコード検証を行い、4つのステップに分かれています。今回の脆弱性はreference_safetyステップで発生しました。このステップは主に参照の安全性を検証する役割を担っており、空の参照が存在しないか、可変参照のアクセスが安全かどうかを確認します。
検証プロセスは、まずコード内の基本ブロックを識別します。基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。Moveはバイトコードを走査し、すべての分岐命令とループ命令を検索して基本ブロックを特定します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
Moveにおける参照の安全性
Moveは2種類の参照タイプをサポートしています: 不変参照(&)と可変参照(&mut)。参照安全モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であることを検証します。
検証プロセスは、状態を表すためにAbstractState構造体を使用し、借用グラフとローカルを含みます。検証時には、実行前後の状態を比較し、ブロック状態をマージして更新します。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
脆弱性分析
バグはjoin_関数に存在します。この関数は、実行前後の状態をマージし、localsマップとborrowグラフを更新するために使用されます。問題は、localsイテレーターがu8型を返し、パラメータの長さとローカル変数の長さの合計が256を超えるとオーバーフローが発生することです。
Moveにはlocalsの数を検証するプロセスがありますが、ローカル変数の数のみを検証し、パラメータの長さは含まれていません。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
エクスプロイト
このオーバーフローを利用すると、基本ブロックの状態を変更できます。ループコード内では、基本ブロックが実行されるたびに状態が変化します。再度実行する際に、命令がアクセスするインデックスが新しいローカルマップに存在しない場合、panicが発生し、DoS攻撃を実現します。
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
PoCデモ
特定のパラメータとローカル変数の数を設定することで、整数オーバーフローを引き起こし、プログラムがクラッシュする再現可能なPoCコードを提供しました。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました
まとめ
この脆弱性は再びコード監査の重要性を証明しました。Move言語に対しては、検証段階のチェックだけに依存せず、実行時により多くのセキュリティチェックを追加することをお勧めします。私たちはMove言語のセキュリティ問題について引き続き深く研究し、その発展に貢献していきます。
! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました