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: ошибка ANGLE в Chrome и ссылка Apple на CVE

Google подтвердил эксплуатацию ANGLE в Chrome. Apple использует CVE для отдельной ошибки инициализации памяти WebKit.

💡 Простыми словами (ELI5)

Представьте, что при переписывании формы человек выходит за границы поля и пишет в следующую запись: это иллюстрирует доступ за пределами буфера. В реестре один номер также может повторно использоваться для разных записей; одинаковая метка не доказывает одинаковые дефекты.

Ключевые понятия и термины

ANGLE
Almost Native Graphics Layer Engine — открытая библиотека Google, переводящая вызовы OpenGL ES и WebGL в нативные API, такие как Metal, Direct3D и Vulkan.
Metal-бэкенд
Часть ANGLE для API Metal. Google связывает ошибку с ANGLE в Chrome для Mac, но не называет функцию или механизм исправления.
Выход за границы (CWE-787)
Выход за границы (CWE-787): операция обращается к памяти за пределами буфера. CWE-787 точнее обозначает запись за границы; Google не раскрыл точную операцию или причину.
Проверяемая арифметика
Целочисленные операции, сообщающие о переполнении вместо тихого заворачивания, например base::CheckedNumeric в Chromium и ANGLE.
Zero-day
Уязвимость нулевого дня эксплуатируется до выпуска исправления. Google подтвердил эксплуатацию проблемы ANGLE в Chrome. Apple отдельно описала целевые атаки с проблемами WebKit в бюллетене iOS 26.2.

Связи со стандартами

Хронология инцидента

2025-12-10

Google выпускает Chrome 143.0.7499.110 для macOS и сообщает, что для ошибки в ANGLE существует эксплойт в дикой природе (задача Chromium 466192044).

2025-12-12

В бюллетене Apple CVE-2025-14174 относится к инициализации памяти WebKit, а CVE-2025-43529 отдельно относится к повреждению памяти WebKit. Apple связывает второй отчёт с возможной целевой эксплуатацией; это не доказывает общую причину с ANGLE в Chrome. CISA добавила CVE-2025-14174 в KEV.

Пошаговый сценарий атаки

Шаг 1

Подготовленная страница достигает графического слоя

Запись CVE описывает специально подготовленную HTML-страницу, вызывающую проблему ANGLE в Chrome для Mac. Вектор CVSS требует действия пользователя, то есть жертва должна открыть веб-контент под контролем атакующего.

Шаг 2

ANGLE переводит вызовы в Metal

Google указывает ANGLE как уязвимый компонент Chrome. Публичный бюллетень не называет функцию и не утверждает, что WebKit использует тот же уязвимый код.

Шаг 3

Идёт доступ к памяти вне буфера

Google сообщает о выходе за границы памяти, но не уточняет чтение это или запись, затронутый буфер или причину. Код ниже — общий пример, а не исходный код ANGLE и не реконструкция CVE.

Шаг 4

Использование в целевых атаках

Google подтвердил эксплуатацию CVE-2025-14174. Apple отдельно сообщила о целевой эксплуатации проблем WebKit и также использует этот CVE для записи об инициализации памяти WebKit. Бюллетени не устанавливают общую цепочку между 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;
}

Чек-лист по защите системы для инженеров

Источники