flawopen.com/Incidents/bluemoon-chrome-v8-windows-alpc-september-2026
BlueMoon:三つの欠陥が Chrome と Windows の隔離境界を越えた
Proofpointは、CVE-2026-85046(V8の型混同)、CVE-2026-87491(V8サンドボックス脱出)、CVE-2026-85880(Windowsカーネルのローカル権限昇格)を連鎖させる標的型BlueMoon攻撃を報告しました。GoogleとMicrosoftは、それぞれの修正前に悪用があったと確認しています。ChromiumブラウザーとWindowsは別々に更新してください。[1], [2], [3], [4]
仕分け係が箱の中身はすべて本だと確認した後、古いラベルで仕分ける前に来客が中身を入れ替えられると想像してください。最初の失敗で施錠された仕分け場へ入り、次の失敗で柵を越え、さらに別の失敗で建物の入館証を改ざんします。それぞれの鍵を直す必要があります。[1]
主要な概念と専門用語
V8 / type confusion- V8 は JavaScript を実行します。
CVE-2026-85046ではfill()が要素の種類を変えたため、Array.prototype.sort の最適化時の前提が崩れました。[1], [2]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-122 CWE-787 CWE-843
- CISA KEV — 追加日 2026-09-04 — CVE-2026-85046
BlueMoonの攻撃段階とパッチ判断
| 段階 / CVE / 境界 | 情報源が裏付ける内容 | 防御側の対応 |
|---|---|---|
V8 JIT型混同 — CVE-2026-85046 | Proofpointは、Array.prototype.sortの比較関数がfill()で配列を変更し、要素種別の前提を無効にする問題を説明しています。Googleは実環境での悪用を確認しました。 | Chrome/Chromium 152.0.7977.82/.83(Windows/Mac)または .82(Linux)以降をインストールし、ブラウザーを再起動してください。Googleの9月3日リリースに修正が含まれます。 |
V8サンドボックス脱出 — CVE-2026-87491 | ProofpointはV8メモリーサンドボックスを越えるWebAssemblyメタデータ破損を報告しています。rendererプロセスサンドボックスとは別の境界です。Googleは実環境での悪用を確認しました。 | Chrome/Chromium 153.0.8010.36/.37(Windows/Mac)または .36(Linux)以降をインストールし、ブラウザーを再起動してください。Googleの9月8日リリースに修正が含まれます。 |
WindowsカーネルLPE — CVE-2026-85880 | ProofpointはSeDebugPrivilegeに至るALPC/WNF経路と、キットが標的にした古いWindowsビルドを列挙しています。Microsoftは9月8日の更新前の悪用を確認しました。この標的一覧は影響を受ける全バージョンの一覧ではありません。 | サポート対象の最新Windowsセキュリティ更新を適用してください。2026年9月8日以降の更新を含め、OS別パッケージをMSRCで確認して必要な再起動を完了します。WindowsとChromeは別々に修正します。 |
インシデントのタイムライン
Proofpoint が BlueMoon の活動を初めて観測しました。[1]
Chrome Stable は Windows と Mac の 152.0.7977.82/.83、Linux の .82 で CVE-2026-85046 を修正しました。[2]
ステップ・バイ・ステップの攻撃フロー
観測された配信
Proofpointは、エクスプロイトキットへのリンクを含む標的型スピアフィッシングを観測しました。ブラウザー段階では、脆弱なChromiumベースのブラウザーでリンクを開く必要がありました。[1]
ソースコード比較:脆弱 vs 堅牢化
これは前提の失効を示す安全な Python の例であり、V8 のコード、攻撃コード、製品の修正ではありません。無害なコールバックで最初の確認後に整数を文字列へ変えられます。改善例は呼び出し後に長さを制限した複製を検証し、使用中に再び呼び出しません。脆弱例で Python は例外を出すだけで、ネイティブのメモリ破損を再現しません。同期して動く信頼可能で上限のあるコールバックを前提とします。
def numeric_total(values, callback):
if type(values) is not list or len(values) > 1024:
raise ValueError("Invalid batch")
if any(type(x) is not int for x in values):
raise ValueError("Expected integers")
callback(values)
# コールバックによって型の前提が無効になった可能性があります。
return sum(values)
def numeric_total(values, callback):
if type(values) is not list or len(values) > 1024:
raise ValueError("Invalid batch")
callback(values)
if len(values) > 1024:
raise ValueError("Invalid batch")
snapshot = tuple(values)
if any(type(x) is not int or abs(x) > 1_000_000
for x in snapshot):
raise ValueError("Expected bounded integers")
# 検証済みのスナップショットを使い、コールバックを再度呼び出さないでください。
return sum(snapshot)
エンジニアリング&システム堅牢化チェックリスト
- ✓ブラウザーと Windows の版を別々に調べ、適用可能な公式更新を入れてブラウザーと OS の再起動を確認します。[2], [3], [4], [5]
- ✓コールバックによる変化を回帰テストに加えます。型の変化と過大な配列を最適化処理の前に拒否し、正常な整数の合計も確認します。[1]
- ✓検証から使用までの間に制御可能なコードが動く最適化経路を調べます。条件を再確認するか、検証済みの変更不能な複製を使います。[1]
- ✓CVE ごとに更新を追跡します。Chrome は
CVE-2026-85046を高、CVE-2026-87491を中、Microsoft はCVE-2026-85880を高(CVSS 7.8、CWE-122)と評価しました。環境の緩和策は更新の代わりになりません。[2], [3], [4], [5]