脆弱性・CVE速報深刻度: 緊急

Wasmtime(aarch64)で、巨大な br_table からサンドボックス外の任意コードへ飛ばせる不具合(CVE-2026-115893): 36.0.19・48.0.7・49.0.4 で修正

目次(5)

CVE-2026-115893

WebAssembly 実行環境 Wasmtime の Cranelift コンパイラ(aarch64 向け)に、巨大な br_table 命令から、サンドボックスの外にある任意のコードへ飛ばせる不具合(CVE-2026-115893、GHSA-mghf-wjfp-p5xm)が公開されました。GitHub の深刻度は Critical、GitHub 提供の CVSS v3.1 は 9.9 です。修正版は 36.0.19、48.0.7、49.0.4 です。ただし、影響を受けるのは、aarch64(Arm 64 ビット)上で、既定の Cranelift バックエンドを使い、外部から受け取った Wasm モジュールを動かしている場合です(下の「影響を受ける条件」を参照)。

何が起きるか

  • br_table は、Wasm の「番号に応じて分岐先を選ぶ」命令です。
  • 勧告によると、1 つの br_table の分岐先が約 25 万 6 千を超える Wasm モジュールを aarch64 でコンパイルすると、条件分岐の飛び先が誤って計算されます。
  • 修正コミットの説明では、既定の分岐(番号が表の大きさを超えた場合)の命令が aarch64 では前後約 1MiB までしか届かず、その命令の後ろに全分岐先のオフセット表が置かれているため、表が大きいと飛び先がはみ出し、値が巻き戻って誤った場所へ飛ぶ、とされています。
  • 勧告は、この誤った飛び先が、利用者が決められるずれ幅で任意のコードに届き、サンドボックスの脱出(エスケープ)につながる、としています。
  • 勧告は、aarch64 で既定設定の Wasmtime が対象で、aarch64 対応を入れた 2020 年(v1.0 より前)以降のすべての版が影響を受ける、としています。
  • CISA の整理(SSVC)は、悪用 none(確認なし)、自動化 no、技術的影響 total です(NVD 経由で確認)。CISA の KEV には載っていません(11/1 時点)。

影響を受ける条件

項目内容
対象Rust の wasmtime クレート。36.0.19 より前、37.0.0 以上 48.0.7 未満、49.0.0 以上 49.0.4 未満(GitHub の構造化データ)
実行環境aarch64 で、既定の Cranelift バックエンドを使う Wasmtime
前提利用者が用意した(信頼できない)Wasm モジュールをコンパイル・実行すること。評価は権限 低(PR:L)・影響範囲 変化(S:C)
修正版36.0.19、48.0.7、49.0.4(いずれも 2026-10-19 UTC に公開)。2026-11-01 時点の最新は v50.0.1(10/29 UTC)
弱点CWE-691(制御フローの管理の不備)
評価GitHub 提供の CVSS v3.1 は 9.9(ネットワーク・低複雑度・権限 低・ユーザー操作不要・範囲 変化・機密性/完全性/可用性が高)
NVDDeferred(NVD 自身の評価はなし。表示されている 9.9 は GitHub 提供)
EPSS0.99%(10/31 時点、パーセンタイル 62.5%)
KEV掲載なし

修正の中身

飛び先の誤りを直した修正コミットは、main 向けが e61df1b(PR #14826、2026-10-19 UTC)です。JTSequence という命令列の既定分岐を、条件分岐ではなく「範囲外の番号を表の最後の項目(既定の分岐先)に丸める」条件つき選択に置き換え、既定の分岐にも同じオフセット表を使うようにしました。各リリース用の修正コミットは次のとおりです。

版修正コミット取り込み
36.0.19f517bd6(PR #14818)2026-10-19 UTC
48.0.7222ff3a(PR #14819)2026-10-19 UTC
49.0.49945498(PR #14820)2026-10-19 UTC

それぞれのコミットが、対応するリリースのタグに含まれることは、タグとの比較で確認しました(各コミットはタグより前で、タグ側が 1 コミット先)。リリースの修正コミットには、この件以外の修正(WASI HTTP 周りなど)も同時に入っています。この記事では CVE-2026-115893 に関する部分だけを扱います。50.0.0(2026-10-20 UTC)には、この件の試験ファイル(tests/all/br_table.rs)が含まれていますが、修正が入っていることの直接の確認はしていません。

対応

  1. Wasmtime を修正版以上に更新します(36 系は 36.0.19 以上、48 系は 48.0.7 以上、49 系は 49.0.4 以上。37〜47 系は修正版が示されていないため、48 系以上への移行が必要になる場合があります)。
  2. 利用する版の系統によっては、勧告の後にも修正リリースが出ています(36.0.20、48.0.8、49.0.5、50.0.1。いずれも 10/29 UTC)。更新先は最新の版を確認して選びます。
  3. すぐ更新できない場合は、信頼できない Wasm モジュールを aarch64 の Cranelift で動かす構成かどうかを確認します(本記事の推定)。分岐先が極端に多い br_table を含むモジュールを、受け付ける前に拒否する方法も考えられますが、勧告が示す回避策ではなく、本記事の推定です。

未確認の点

  • 悪用の報告は確認できていません。KEV にも載っていません。
  • NVD は自身の評価をしていません。CVSS は GitHub 提供の値です。
  • 分岐先が約 25 万 6 千を超える br_table が実際にどの程度のモジュールで作れるか、また実際の環境でサンドボックスを抜けられるかは、確認していません。勧告の記載に基づきます。
  • 修正コミットには Winch(別のコンパイラ)の aarch64 のコードや試験も含まれています。Winch が影響を受けるかは、勧告に書かれておらず確認していません。
  • 50.0.0 以降は勧告の対象版に入っていませんが、修正の取り込みは直接確認していません。
  • 37 系から 47 系は、勧告の対象範囲に入っていますが、修正版が示されていません。これらの系統の扱いは確認していません。
  • 修正リリース(10/19)、NVD への公開(10/23)、GitHub の勧告(10/28)の順になった経緯は確認できていません。10/29 の追加リリースの内容は確認していません。
  • 日付は、タグ・リリースは Git と GitHub の記録、公開日は GitHub と NVD の記載に基づきます。

この記事について

出典

この記事を共有