← 脆弱性の記事一覧へ

セキュリティノート

WasmtimeCranelift の欠陥でWasmのサンドボックスを抜けられる

分類:攻撃手法権限昇格インシデント種別注意喚起

要点

影響バージョン

  • CVE-2026-115889(全アーキテクチャ):43.0.0 より前。サポート中の系列では 36.0.18 以前の36.x が対象(43以降は影響なし)。
  • CVE-2026-115893(ARM64のみ):36.0.18 以前、37.0.0〜48.0.6、49.0.0〜49.0.3。
  • サポートが終わった系列(24.x LTSを含む)には修正が出ない。

今すぐやること

  • 使っている系列の修正版(36.0.19/48.0.7/49.0.4、または 50.0.0)へ上げる。Wasmtimeをライブラリとして組み込んだプログラムは、それぞれ作り直す必要がある。
  • 他人が書いたWasmモジュールを受け取って動かすサービスを最優先にする。

何が起きているか

事実(Wasmtimeのセキュリティ勧告、GitHubのリリース、RustSec)

  • Bytecode Allianceは2026年10月19日(UTC、日本時間20日)、Wasmtimeのセキュリティ勧告を2件公開した。どちらもWasmtimeが既定で使うコンパイラ「Cranelift」の欠陥で、深刻度はCritical、CVSS 3.1で9.9(AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H)。
CVE勧告内容対象アーキテクチャ
CVE-2026-115889GHSA-897f-g5gm-fmxmCraneliftがSSA値の番号をビット詰めで保持しており、リリースビルドでは桁あふれが黙って起きる。値の参照を取り違えて誤ったコードを生成し、非常に大きな関数や、値を大量に使うよう細工した関数で型の取り違えなどを起こしてサンドボックスを抜けられるすべて
CVE-2026-115893GHSA-mghf-wjfp-p5xmbr_table 命令の飛び先が約25万6千個を超えると、範囲外の番号を既定の飛び先へ送る条件分岐が誤った場所を指す。攻撃者が決めたずれの位置へ飛べ、任意のサンドボックス回避につながるARM64(aarch64)のみ
  • どちらの勧告も「既定の設定のWasmtimeで」起きるとしている。CVE-2026-115893について勧告は、2020年にARM64に対応して以来(Wasmtime 1.0より前から)のすべての版が影響を受けると書いている。
  • CVE-2026-115889の原因は、Wasmtime 43.0.0で番号の保持を32ビットに広げた時点で解消していた。勧告は43以降の系列を対象外としている。サポート中のLTSである36.x系にだけ、10月19日に同じ修正が入った。
  • RustSec(Rustの脆弱性データベース)にも RUSTSEC-2026-0380(CVE-2026-115889)と RUSTSEC-2026-0379(CVE-2026-115893)として登録されている。
  • 回避策は勧告に書かれていない。悪用の報告はなく、CISA KEVにも載っていない(2026年10月27日時点で確認)。

影響を受ける製品・バージョン

  • Wasmtime(Rustのクレート wasmtime、CLI、各言語向けの組み込み)で、Craneliftを使う既定の構成。
    • CVE-2026-115889:36.0.19 より前、および 37.0.0〜42.x。
    • CVE-2026-115893:36.0.19 より前、37.0.0〜48.0.6、49.0.0〜49.0.3(ARM64のみ)。
  • 4月にARM64の別のサンドボックス回避(CVE-2026-34971、GHSA-jhxm-h53p-jm7w)を直すため 36.0.7・42.0.2・43.0.1 に上げたARM64の環境も、CVE-2026-115893 の対象に入る。
  • Wasmtimeのリリース方針では、12の倍数の版がLTSで24か月、それ以外は2か月サポートされ、セキュリティ修正はサポート中の版にだけ確実に入る。今回修正が出たのは36・48・49・50の各系列。
  • どちらの欠陥も、攻撃者が用意したモジュールをWasmtimeにコンパイルさせることが前提になる。

修正版・回避策

  • 修正版:36.0.19、48.0.7、49.0.4(いずれも10月19日)。10月20日公開の 50.0.0 も両方を含む。
  • 修正版は、飛び先が65,520個を超える br_table のコンパイルを拒否するようになった(修正のPR)。
  • 公式の回避策はない。サポートが終わった系列を使っている場合は、修正のある系列へ移るしかない。
  • 組み込み例:サーバーレスWasmアプリの実行基盤Spinは、4.2.4でWasmtime 50.0.0に上げている(Spin 4.2.4のCargo.lock)。

今すぐやること

  1. cargo tree -i wasmtime や Cargo.lock で、使っている wasmtime の版を確かめる。cargo audit はRustSecを参照するので、両方のCVEを検出できる。
  2. 使っている系列の修正版(36.0.19/48.0.7/49.0.4)か 50.0.0 に上げ、Wasmtimeを組み込んだバイナリやコンテナを作り直す。CLIの更新だけでは、組み込み側は直らない。
  3. ARM64(AWS Graviton、Apple Silicon上のLinux、ARMのエッジ機器など)で動かしている環境は、4月に一度上げていても改めて確認する。
  4. Wasmtimeを内蔵した製品やクラウドサービスを使っている場合は、提供元が更新したかを確認する。
  5. GitHubのDependabotは「レビュー済み」の勧告でしか通知しない。10月27日時点で、GitHub Advisory DatabaseにはCVE-2026-115889のレビュー済み登録はあるが、CVE-2026-115893(ARM64)のものは見当たらない。通知を待たずに版を確認する。

考察

  • 「信頼できないコードを安全に動かす」ための部品の欠陥: WebAssemblyのランタイムは、利用者や第三者が書いたコードを隔離して動かすために使われる。サンドボックスを抜けられる欠陥は、その前提を崩す。プラグインやサーバーレス関数、エッジでの実行など、他人のモジュールを受け付ける使い方ほど影響が大きい。自社で書いたモジュールだけを動かす環境なら、緊急度は下がる。
  • CVSSの「PR:L」の意味: 勧告は「低い権限が必要」と評価しているが、これは「モジュールを提出できる立場」と読むのが自然だろう。マルチテナントのサービスでは、利用者として登録するだけでその条件を満たせる場合がある。
  • 黙って直っていた欠陥: CVE-2026-115889 の原因は2月の変更で既に消えていたが、その変更は大きな関数をコンパイルするための改善として入り、セキュリティの説明はなかった。最新系列を追っていた利用者は知らずに守られ、LTSを使っていた利用者は10月まで残っていたことになる。LTSは「安定」だが、修正の移植が遅れる危険もあることを示している。
  • ARM64で続くCraneliftの不具合: 半年あまりでARM64固有のサンドボックス回避が2件出た。x86で検証されたコード生成が、別の命令セットでは前提(分岐の届く距離など)を満たさないことがある。ARMのサーバーが増えるなか、同じ種類の問題は今後も出てくるとみられる。

出典

原文をGitHubで読む ↗

あわせて読む

ワイズマン「MeLL+」 ― クラウド環境に不正アクセス、サービス停止