Move言語の参照安全性検証で新しい整数オーバーフローの脆弱性が発見されました

robot
概要作成中

Move言語の参照安全メカニズムに新しい整数オーバーフローの脆弱性が発見されました

最近、Move言語の詳細な研究を行っている際に、新しい整数オーバーフローの脆弱性を発見しました。この脆弱性は、参照の安全性検証プロセスで発生し、Move言語のいくつかのコアメカニズムに関係しています。この脆弱性を分析することで、Move言語の設計と実装をより深く理解することができます。

Move言語の検証プロセス

Move言語は、バイトコードを実行する前にコードユニットを検証します。このプロセスは4つのステップに分かれています。今回発見された脆弱性は、reference_safetyというステップに存在します。

reference_safetyモジュールは、参照の安全性を検証するためのコア関数を定義しています。主に、浮遊参照の存在、可変参照のアクセスが安全か、グローバルストレージの参照アクセスが安全かなどの問題をチェックします。

検証プロセスの入口関数は、各関数を分析するためにanalyze_functionを呼び出します。analyze_functionは、関数内の各基本ブロックを検証します。基本ブロックとは、入口と出口を除いて分岐命令がないコードのシーケンスを指します。

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

Move言語での参照は安全です

Move言語は二種類の参照タイプをサポートしています: 不変参照(&)と可変参照(&mut)。不変参照はデータを読み取るために使用され、可変参照はデータを変更するために使用されます。この設計はコードの安全性と可読性を向上させるのに役立ちます。

引用セキュリティ検証モジュールは、関数内の各基本ブロックのバイトコード命令をスキャンし、すべての参照操作が合法であるかどうかを判断します。検証プロセスは主に次の内容を含みます:

  1. 基本ブロックコードを実行する
  2. マージ実行前と実行後の状態
  3. ブロックの状態を更新する
  4. 後置条件を後続のブロックに伝播する

このプロセスは、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)を構築しました:

  1. 無条件分岐命令を含む基本ブロックを作成し、それを複数回実行します。
  2. パラメータとローカル変数の合計数を264に設定したため、新しいローカル変数のマッピング長が8でオーバーフローしました。
  3. 基本ブロックを再実行する際に、存在しないローカル変数インデックスにアクセスしようとすると、panicが発生します。

! Numen Cyberは、移動言語に別のリスクの高い脆弱性を独占的に発見しました

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

! Numen Cyberは、移動言語に別の高リスクの脆弱性を独占的に発見しました

まとめ

この脆弱性は再び絶対的に安全なコードは存在しないことを証明しました。Move言語は実行前に静的検証を行いますが、整数オーバーフローの脆弱性によって回避される可能性があります。

Move言語の今後の発展について、私たちは次のように提案します:

  1. 実行時に追加のチェックコードを増やして、予期しない状況を防ぎます。
  2. 検証段階のセキュリティチェックにのみ依存せず、運用段階でもセキュリティ強化を行うべきです。

Move言語のセキュリティ研究の先駆者として、私たちはMoveのセキュリティ問題をさらに深く研究し、その発展に貢献していきます。

原文表示
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • 報酬
  • 3
  • 共有
コメント
0/400
SnapshotLaborervip
· 17時間前
5分間学んだらバグを提起しに行くのか。
原文表示返信0
RadioShackKnightvip
· 18時間前
泥を動かしても壁には立てない
原文表示返信0
LayerZeroHerovip
· 18時間前
言うべきことは言うが、moveもこの程度だ。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)