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

Wasmtime の Cranelift で、巨大な関数を持つ Wasm モジュールが誤コンパイルされ、サンドボックスを抜けられる不具合(CVE-2026-115889): 36.0.19・43.0.0 で修正

目次(5)

CVE-2026-115889

WebAssembly 実行環境 Wasmtime の Cranelift コンパイラ(既定のバックエンド)に、内部の値の番号を詰めて持つ方式のため、非常に大きな、または細工された Wasm 関数を処理すると番号が黙ってあふれ、誤ったコードが生成される不具合(CVE-2026-115889、GHSA-897f-g5gm-fmxm)が公開されました。GitHub の深刻度は Critical、GitHub 提供の CVSS v3.1 は 9.9 です。修正版は 36.0.19 と 43.0.0 です。影響を受けるのは、既定の Cranelift を使い、外部から受け取った Wasm モジュールをコンパイル・実行している Wasmtime で、CPU の種類は問いません(下の「影響を受ける条件」を参照)。

何が起きるか

  • Cranelift は、Wasm をネイティブコードに変換する途中で、内部表現(IR)の値を番号で管理します。
  • 勧告によると、Wasmtime 43 より前の Cranelift は、この番号を 64 ビットの領域に詰めて持つ際に各番号を 24 ビットしか確保しておらず、リリースビルドではあふれても検知されません。
  • 非常に大きい関数、または多くの値を使うよう細工された関数では、番号が別の値を指し、意図しない誤コンパイル(型の取り違えなど)が起きます。勧告は、これによりサンドボックスの脱出が可能だとしています。
  • 修正の説明では、64 ビットの領域に 24 ビット 2 つで詰めていた方式を、32 ビット 2 つ(番号の全範囲)に広げたとされています。
  • CISA の整理(SSVC)は、悪用 none(確認なし)、自動化 no、技術的影響 total です(NVD 経由で確認)。CISA の KEV には載っていません(10/30 版の一覧で確認)。

影響を受ける条件

項目内容
対象Rust の wasmtime クレート。36.0.19 より前、37.0.0 以上 43.0.0 未満(GitHub の構造化データ)
実行環境既定設定(Cranelift バックエンド)の Wasmtime。勧告は「どのアーキテクチャ・プラットフォームでも」としている
前提利用者が用意した(信頼できない)Wasm モジュールをコンパイル・実行すること。評価は権限 低(PR:L)・影響範囲 変化(S:C)
修正版36.0.19(2026-10-19 UTC)と 43.0.0(2026-03-20 UTC)。2026-11-01 時点の最新は v50.0.1(10/29 UTC)
弱点CWE-197(数値の切り捨て誤り)、CWE-843(型の取り違え)
評価GitHub 提供の CVSS v3.1 は 9.9(ネットワーク・低複雑度・権限 低・ユーザー操作不要・範囲 変化・機密性/完全性/可用性が高)
NVDDeferred(NVD 自身の評価はなし。表示されている 9.9 は GitHub 提供)
EPSS0.45%(10/31 時点、パーセンタイル 39.4%)
KEV掲載なし

修正の中身

修正コミットは main 向けが ba8f7d7(PR #12613「ValueDataPacked を値の全範囲に対応させる」、2026-02-18 UTC)です。内部の構造体を、番号 2 つを 32 ビットずつ持つ形に変え、あふれを防ぎました。この変更は 43.0.0 に含まれることを、タグとの比較で確認しました(コミットは 43.0.0 より前で、タグ側が 70 コミット先)。43.0.0 より前の 42.0.0 には含まれていません。

36 系には、36.0.19 の修正コミット f517bd6(PR #14818、2026-10-19 UTC)で同じ変更が取り込まれました。このコミットが 36.0.19 に含まれることも比較で確認しました(タグ側が 1 コミット先)。f517bd6 の変更には dfg.rs の同じ構造体の変更が含まれ、リリースノートにも本件の項目があります。このコミットには、別の不具合(aarch64 の br_table、CVE-2026-115893 とは別件)の修正や、WASI HTTP の修正も同時に入っています。この記事では CVE-2026-115889 に関する部分だけを扱います。

なお、43 以上の系統は 2026 年 3 月(43.0.0)に修正済みの内容で、勧告は 10/23 UTC に出ています。48.0.7・49.0.4・50 系は 43 より新しいため、この件の対象範囲に入りません。

対応

  1. Wasmtime を、36 系なら 36.0.19 以上、43 以降の系統ならその系統の最新(43.0.0 以上)に更新します。37〜42 系は修正版が示されていないため、43 以上への移行が必要です。
  2. 更新先は最新の版を確認して選びます(36.0.20、48.0.8、49.0.5、50.0.1 が 10/29 UTC に出ています)。
  3. すぐ更新できない場合は、信頼できない Wasm モジュールを Wasmtime で動かしている構成かどうかを確認します(本記事の推定)。関数の大きさや使う値の数に上限を設けて受け付ける方法も考えられますが、勧告が示す回避策ではなく、本記事の推定です。

未確認の点

  • 悪用の報告は確認できていません。KEV にも載っていません。
  • NVD は自身の評価をしていません。CVSS は GitHub 提供の値です。
  • あふれが起きる関数の大きさ(番号が約 1,600 万を超える規模)に実際に届くモジュールをどの程度作れるか、また実際の環境でサンドボックスを抜けられるかは、確認していません。勧告の記載に基づきます。
  • 43.0.0 より前に本当に誤コンパイルが再現するかは確認していません。
  • 43〜47 系は修正済み(43.0.0 以降)と勧告に示されていますが、各系統のリリースごとの取り込みは個別に確認していません。
  • 修正は 2026-02-18(main)、43.0.0 は 2026-03-20、36 系の修正リリースは 2026-10-19、勧告は 2026-10-23 の順です。2 月の時点でセキュリティ修正として扱われたかは確認できていません(コミットの説明は関数サイズの上限の解消としている)。
  • 日付は、タグ・リリースは Git と GitHub の記録、公開日は GitHub と NVD の記載に基づきます。

この記事について

出典

この記事を共有