FlawOpen

flawopen.com/Incidents/angle-cross-platform-zero-day-december-2025

● Google / Apple · CVE-2025-14174 · December 2025 · CVSS 8.8 · 高
セキュリティ研究 · FlawOpen

CVE-2025-14174:Chrome の ANGLE 脆弱性と Apple の CVE 記載

Google は Chrome の ANGLE の悪用を確認しました。Apple は別の WebKit メモリ初期化問題にもこの CVE を使用しています。

💡 わかりやすい解説 (ELI5)

書類を転記する人が指定欄を越えて次の記録に書き込む様子は、範囲外アクセスの説明になります。台帳で同じ番号が別の記録に再利用されても、欠陥が同じとは限らず、同じコードが共有されている証拠にもなりません。

主要な概念と専門用語

ANGLE
Almost Native Graphics Layer Engine。OpenGL ES や WebGL の呼び出しを Metal、Direct3D、Vulkan などのネイティブ API に変換する Google のオープンソースライブラリ。
Metal バックエンド
Metal API を対象とする ANGLE の部分です。Google は Mac 版 Chrome の ANGLE の問題と説明していますが、該当関数や修正の仕組みは公開していません。
範囲外アクセス(CWE-787)
範囲外アクセス(CWE-119 / CWE-787):バッファーの想定範囲外のメモリーにアクセスする操作です。CWE-787 は範囲外書き込みを示します。Google は正確な操作や原因を公開していません。
チェック付き算術
オーバーフローを黙って折り返すのではなく報告する整数演算。Chromium や ANGLE の base::CheckedNumeric など。
ゼロデイ
ゼロデイは修正が公開される前に悪用された脆弱性です。Google は Chrome の ANGLE の問題が悪用されていると確認しました。Apple は iOS 26.2 の告知で WebKit の問題に関する標的型攻撃を別途説明しています。

フレームワーク対応

インシデントのタイムライン

2025-12-10

Google が macOS 版 Chrome 143.0.7499.110 を公開し、ANGLE の問題に対するエクスプロイトが実際に存在すると明らかにする(Chromium issue 466192044)。

2025-12-12

Apple の告知では CVE-2025-14174 は WebKit のメモリー初期化の問題、CVE-2025-43529 は別の WebKit メモリー破損の問題として記載されています。Apple は後者が標的型悪用に関係する可能性を示していますが、Chrome の ANGLE と共通の原因を示すものではありません。CISA は CVE-2025-14174 を KEV に追加しました。

ステップ・バイ・ステップの攻撃フロー

ステップ 1

細工したページがグラフィックス層に届く

CVE の記録では、細工された HTML ページが Mac 版 Chrome の ANGLE の問題を引き起こします。CVSS ベクトルはユーザー操作を必要とするため、被害者が攻撃者の管理する Web コンテンツを開く経路です。

ステップ 2

ANGLE が Metal に変換する

Google は ANGLE を Chrome の影響コンポーネントとして挙げています。公開告知は原因関数を示さず、WebKit が同じ脆弱なコードを使うとも述べていません。

ステップ 3

バッファ外のメモリにアクセスする

Google は範囲外メモリアクセスと説明していますが、読み書きの別、対象バッファー、原因は公開していません。以下は一般例であり、ANGLE のソースでも CVE の再現でもありません。

ステップ 4

標的型攻撃に使われる

Google は CVE-2025-14174 の悪用を確認しました。Apple は WebKit の標的型悪用を別途報告し、WebKit のメモリー初期化項目にもこの CVE を使っています。公開告知は Chrome と WebKit の共通チェーンを示していません。

ソースコード比較:脆弱 vs 堅牢化

Google は関数レベルの原因やパッチの詳細を公開していません。この一般的な C++20 の例はオフセットを検証し、減算で要求サイズと残り容量を比較してオーバーフローを避けます。この CVE の再現でも ANGLE の実際の修正でもありません。

脆弱な実装
// 一般化した例であり、ANGLE のソースコードや CVE-2025-14174 の実装ではない。
bool copyRange(std::span<std::byte> destination,
               std::size_t offset,
               std::span<const std::byte> source)
{
    std::copy(source.begin(), source.end(), destination.begin() + offset);
    return true;
}
堅牢化されたセキュアパッチ
// 一般化した例であり、ANGLE のソースコードや CVE-2025-14174 の修正パッチではない。
bool copyRange(std::span<std::byte> destination,
               std::size_t offset,
               std::span<const std::byte> source)
{
    if (offset > destination.size() ||
        source.size() > destination.size() - offset) {
        return false;
    }

    std::copy(source.begin(), source.end(), destination.begin() + offset);
    return true;
}

エンジニアリング&システム堅牢化チェックリスト

参考資料