作業プロジェクトのリポジトリです。調査・分析・作業・報告書を1つのリポジトリで扱います(D088/D091)。
このファイルはリポジトリ・ボードの入口ドキュメントです。フォルダ・成果物の規約全文は
docs/conventions.mdを参照してください。 本文(現状・結論・リンク)は**レポート(report)**項目が昇格したときに更新します。 調査・分析・作業エージェントはルートREADMEを修正しません。
一行まとめ: Google ChromeのWebGPU実装DawnがYCbCrサンプラー生成時にVulkan仕様が 要求するパラメータ制約を検査しなかったため、すでにレンダラープロセスを掌握した攻撃者が仕様違反の値を GPUプロセスまで流し込むことができた問題です(CWE-20)。修正は検証の追加とバックエンドでの強制を 2つの層で行い、Chrome 150.0.7871.47で反映されました。
詳細な学習ドキュメントは docs/cve-2026-13934/ にあります — 原因・修正・実証・教訓を
再現なしで追えるように書かれています。
対象: CVE-2026-13934 — Google Chrome / Dawn(WebGPU実装)、脆弱性タイプ CWE-20
(Improper Input Validation)。CVE発行 2026-06-30、修正バージョン 150.0.7871.47。
根拠: research/20260804-cve-2026-13934-6bacf7/sources.md §1・§2。
進捗段階 — 調査(公開情報)・調査(パッチ・diff)・分析(再現・実証)・報告(学習整理)の4ラインで 進め、4ラインすべて完了しました。
| ライン | ステータス | 得られたもの |
|---|---|---|
公開情報・影響範囲調査 (research/…-6bacf7/) | 完了 (4文書) | CVE・NVD・ベンダー通知のメタデータ、CWE・CVSS、影響バージョンの境界、判断基準の判定 |
パッチ・diff比較 (research/…-diff-92f928/) | 完了 (4文書) | 修正コミットの特定、比較基準の3層、変更ファイル・ロジック差分、迂回・残存リスクの判定 |
再現・実証 (cases/…-4d10a8/) | 完了 (6文書) — 静的対照を実施、実行レベルでは未観察 | 原因構造、実行可能性・制約、2リビジョンの静的対照による観測値 |
学習レポート (reports/…-8400bc/) | 完了 (4文書) | 目次・引用マップ、ルートREADMEドラフト、docs/ ドキュメント一覧 |
確認できたこと
150.0.7871.47 と修正コミット(Dawn 43055cbe…)、変更されたファイル3つと変更理由。cases/20260804-cve-2026-13934-4d10a8/report.md §3)。まだ確認できていないこと(推測で埋めていません)
VkSampler パラメータ、Vulkan検証レイヤーのVUIDレポートはコード
根拠に基づく予想値です(cases/…-4d10a8/report.md §4)。150.0.7871.46・.47・.63 がすべて同じDawnリビジョンを
固定しているのに、CVEは"prior to .47"と記載しています。この表記の根拠を確認できませんでした。src 側の
付随する変更があるかは全数調査していません。513006636 はアクセス制限中です。深刻度 — ソースによって異なります。ベンダー(Chromium)自身の評価はMedium、CISA-ADPのCVSS v3.1は
9.6 CRITICAL(CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H)で、NVD自身の評価はありません。
どちらが正しいと判定せず併記します — 解釈は
docs/cve-2026-13934/overview.mdにあります。
このリポジトリにはデプロイされたサービス(API・バックエンド・データベースなど)はありません。すべての成果物はドキュメントです。
Vulkan仕様は、YCbCr変換が付いたサンプラーに対してすべての軸のアドレスモードが CLAMP_TO_EDGE であり
異方性フィルタリング(anisotropy)が無効であることを要求します
(VUID-VkSamplerCreateInfo-addressModeU-01646)。パッチ前のDawnはこの制約を検査しておらず、
そのため仕様に違反するパラメータが検証を通過して VkSampler 生成まで到達できました。
決定的なのは脅威モデルです。公開説明は攻撃者がレンダラープロセスをすでに掌握した状態を 前提にしています("a remote attacker who had compromised the renderer process")。その位置では通常のWeb API経路ではなくプロセス間コマンドを直接操作できるため、レンダラー側の検証は信頼境界の 外です。そしてDawnのVulkanバックエンドはレンダラーより権限が高いGPUプロセスで動作します — そのためこの欠陥がサンドボックス脱出の表面になります。
根拠: cases/20260804-cve-2026-13934-4d10a8/root_cause.md §2 ・
詳細: docs/cve-2026-13934/root-cause-and-fix.md
修正コミットはDawn 43055cbeadddca41a9c973a809f859d641077b2f
("Add YCbCr sampler validation"、2026-05-27、Bug: 513006636)で、3つのファイルを変更します。
| 変更 | ファイル | 性質 |
|---|---|---|
YCbCrディスクリプタにアドレスモード・maxAnisotropyの検査4件を追加 | src/dawn/native/Sampler.cpp | フロントエンド検証 — 違反リクエストを拒否 |
| YCbCr変換が付く経路でアドレスモード・anisotropyを仕様準拠の値で上書き | src/dawn/native/vulkan/SamplerVk.cpp | バックエンド強制 — 入力が何であれ違反状態を作らない |
回帰テスト YCbCrSamplerRequiredParams を追加 | src/dawn/tests/unittests/validation/YCbCrValidationTests.cpp | 再発防止 |
この構造がこのCVEの核心です。 レンダラーがすでに侵害されている前提なので検証だけでは不十分で、 権限が高い側で値を強制する2つ目の層が実質的な阻止線です。「入力検証が欠けていたので 検証を追加した」と要約すると防御設計の要点を逃します。
変更規模は追加53行、削除0行 — 既存ロジックを直さず、欠けていた検査を埋めたパッチです。
根拠: research/20260804-cve-2026-13934-diff-92f928/report.md §3・§4 ・
cases/20260804-cve-2026-13934-4d10a8/patch_diff.md §4
Chromeが実際に固定した2つのDawnスナップショットのソースを対照しました。
| 観察対象 | 脆弱側 54b4153c… | 修正側 01249a97… | 確認レベル |
|---|---|---|---|
YCbCr検証ブロックの DAWN_INVALID_IF 数 | 2件(機能ゲート+フォーマット未定義) | 6件 | 実測 |
| Vulkanバックエンドの仕様準拠値の強制 | なし(pNext 接続まで) | あり | 実測 |
回帰テスト YCbCrSamplerRequiredParams | なし(TEST_F 23個) | あり(24個) | 実測 |
| 違反リクエスト時のdevice error | 発生しない | 発生 | 予想(コード根拠) |
ここで明らかになったこと: 脆弱側にもYCbCr分岐と検査2件がすでにありました。欠陥は経路の 欠落ではなく分岐内の条件付き制約検査の欠落でした。
ビルド・実行はしていないため、以下の2項目はコード根拠に基づく予想であり実測ではありません。
セキュリティ設計の観点
調査方法の観点
DEPS のコンポーネントリビジョン → コンポーネントのコミットログでのバグ番号検索、という手順で修正コミットを
見つけました。手順: research/20260804-cve-2026-13934-diff-92f928/sources.md §6。docs/)| ドキュメント | 内容 |
|---|---|
docs/cve-2026-13934/overview.md | 概要・背景・結論の要約、深刻度の解釈 |
docs/cve-2026-13934/root-cause-and-fix.md | 原因の3層構造とパッチの2つの層 |
docs/cve-2026-13934/evidence.md | 静的対照の観測値、観察経路と限界 |
docs/cve-2026-13934/lessons.md | セキュリティ設計・調査方法の教訓 |
docs/cve-2026-13934/limits-and-sources.md | 限界・未確認項目と出典一覧 |
docs/conventions.md | フォルダ・成果物の規約(全文) |
research/20260804-cve-2026-13934-6bacf7/)| ドキュメント | 内容 |
|---|---|
brief.md | 依頼原文、判断基準C1〜C6、公式ソースの定義 |
sources.md | CVE・NVD・ベンダー通知のメタデータ、CWE・CVSS、ソース間の矛盾 |
report.md | 影響・CVSS・脆弱性条件の判定、C1〜C6の判定、深刻度の解釈 |
followups.json | 後続提案 |
research/20260804-cve-2026-13934-diff-92f928/)| ドキュメント | 内容 |
|---|---|
brief.md | 目標、判断基準D1〜D6、基準パッチツリー |
sources.md | 修正コミット・比較基準のペア、DEPS・Gerrit、追跡手順 |
report.md | 変更ファイル・ロジック差分・迂回/残存リスクの判定、D1〜D6 |
followups.json | 後続提案 |
cases/20260804-cve-2026-13934-4d10a8/)| ドキュメント | 内容 |
|---|---|
intake.md | 受付メタ、対象・バージョン範囲、着手条件、隔離要件、判断基準J1〜J4 |
patch_diff.md | 変更点・変更理由、パッチ前後の観察指標 |
root_cause.md | 核心原因の3層構造、前提P1〜P7、信頼境界 |
exploitability.md | 実証可能/不可の区別、観察経路、制約、拡散防止の境界 |
report.md | 再現検証の総合 — 静的対照の観測値、前後差分、J1〜J4の判定 |
followups.json | 後続提案 |
reports/20260804-cve-2026-13934-8400bc/)| ドキュメント | 内容 |
|---|---|
outline.md | 読者・目次・出典引用マップ(S1〜S15) |
README.md | このルートREADMEの昇格元ドラフト |
docs-index.md | docs/ ドキュメント一覧・要約、昇格時の注意事項 |
followups.json | 後続提案 |
https://www.cve.org/CVERecord?id=CVE-2026-13934https://nvd.nist.gov/vuln/detail/CVE-2026-13934https://dawn.googlesource.com/dawn/+/43055cbeadddca41a9c973a809f859d641077b2f完全な一覧と発行日・識別子は2つの調査ラインの sources.md にあります。
| タイプ | ルート |
|---|---|
| 調査 | research/ |
| 分析 | cases/ |
| 作業 | work/ |
| レポート | reports/ |
定期収集: research/topics/<topic>/
research/ ・ cases/ ・ work/ ・ reports/ ・ docs/ ・ .laurelin/ ・ .github/docs/conventions.md