FlawOpen

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

● Google / Apple · CVE-2025-14174 · December 2025 · CVSS 8.8 · Alta
Pesquisa · FlawOpen

CVE-2025-14174: falha ANGLE no Chrome e referência Apple

O Google confirmou exploração do ANGLE no Chrome. A Apple usa este CVE para outra falha de inicialização de memória no WebKit.

💡 Explicação em Linguagem Simples (ELI5)

Ilustração: um funcionário escreve além do campo destinado e invade o próximo registro, como uma operação fora dos limites. O registro de casos também pode reutilizar um número para entradas diferentes; o identificador igual não prova que as falhas sejam iguais.

Conceitos Centrais e Termos

ANGLE
Almost Native Graphics Layer Engine: a biblioteca de código aberto do Google que traduz chamadas OpenGL ES e WebGL para APIs nativas como Metal, Direct3D e Vulkan.
Backend Metal
A parte do ANGLE voltada à API Metal. O Google identifica uma falha do ANGLE no Chrome para Mac, mas não informa a função afetada nem o mecanismo da correção.
Acesso fora dos limites (CWE-787)
Acesso fora dos limites (CWE-787): operação que acessa memória fora dos limites previstos de um buffer. CWE-787 classifica especificamente gravação fora dos limites; o Google não divulgou a operação exata nem a causa.
Aritmética verificada
Operações com inteiros que acusam estouro em vez de dar a volta silenciosamente, como base::CheckedNumeric no Chromium e no ANGLE.
Zero-day
Zero-day: falha explorada antes da correção. O Google confirmou exploração do problema ANGLE no Chrome. A Apple descreveu separadamente exploração direcionada de problemas WebKit no aviso do iOS 26.2.

Mapeamentos de frameworks

Linha do Tempo do Incidente

2025-12-10

O Google lança o Chrome 143.0.7499.110 para macOS e informa que existe um exploit em uso para a falha do ANGLE (issue 466192044 do Chromium).

2025-12-12

O aviso da Apple lista CVE-2025-14174 para inicialização de memória no WebKit e, separadamente, CVE-2025-43529 para corrupção de memória no WebKit. A Apple relaciona este último relato a possível exploração direcionada; isso não prova causa comum com o ANGLE do Chrome. A CISA adicionou CVE-2025-14174 ao KEV.

Fluxo de Ataque Passo a Paso

Passo 1

Uma página forjada chega à camada gráfica

O registro CVE descreve uma página HTML criada para acionar a falha do ANGLE no Chrome para Mac. O vetor CVSS exige interação do usuário, portanto a vítima precisa abrir conteúdo web controlado pelo atacante.

Passo 2

O ANGLE traduz para Metal

O Google aponta o ANGLE como componente afetado no Chrome. O aviso público não identifica a função responsável nem diz que o WebKit usa o mesmo código vulnerável.

Passo 3

Memória fora de um buffer é acessada

O Google descreve acesso à memória fora dos limites, mas não informa se houve leitura ou gravação, qual buffer foi afetado ou qual cálculo causou a falha. O código abaixo é um exemplo genérico, não é código ANGLE nem reconstrução deste CVE.

Passo 4

Usada em ataques direcionados

O Google confirma exploração do CVE-2025-14174. A Apple relata separadamente exploração direcionada de falhas WebKit e também usa esse CVE para uma entrada de inicialização de memória no WebKit. Os avisos não estabelecem uma cadeia comum entre Chrome e WebKit.

Código-Fonte: Vulnerável vs. Seguro

O Google não publicou a causa no nível da função nem os detalhes do patch. Este exemplo genérico em C++20 valida o deslocamento e compara, por subtração, o tamanho solicitado com a capacidade restante para evitar overflow. Não reproduz o CVE nem a correção real do ANGLE.

IMPLEMENTAÇÃO VULNERÁVEL
// Apenas um exemplo genérico; não é código-fonte do ANGLE nem a implementação da 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;
}
PATCH SEGURO E ROBUSTO
// Apenas um exemplo genérico; não é código-fonte do ANGLE nem o patch da 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;
}

Lista de Verificação de Segurança para Engenharia

Fontes