FlawOpen

flawopen.com/Incidents/bluemoon-chrome-v8-windows-alpc-september-2026

● BlueMoon · CVE-2026-85046 · September 2026 · Alta
Pesquisa · FlawOpen

BlueMoon: três falhas atravessaram as barreiras de isolamento do Chrome e do Windows

A Proofpoint relatou campanhas direcionadas do BlueMoon que encadearam CVE-2026-85046 (confusão de tipos no V8), CVE-2026-87491 (escape do sandbox do V8) e CVE-2026-85880 (LPE no kernel do Windows). Google e Microsoft confirmaram exploração antes de suas correções; atualize os navegadores Chromium e o Windows separadamente.[1], [2], [3], [4]

💡 Explicação em Linguagem Simples (ELI5)

Imagine um classificador que confirma que todas as caixas contêm livros, mas deixa um visitante trocar o conteúdo antes de separá-las pelas etiquetas antigas. Essa falha abre a área trancada de triagem; outra abre sua grade e uma terceira adultera os crachás do prédio. Cada fechadura precisa de reparo próprio.[1]

Conceitos Centrais e Termos

V8 / type confusion
O V8 executa JavaScript. CVE-2026-85046 envolveu hipóteses de otimização de Array.prototype.sort invalidadas quando fill() alterou o tipo dos elementos.[1], [2]
V8 sandbox / WebAssembly
A sandbox do V8 isola a memória gerenciada pelo motor no renderizador. CVE-2026-87491 usou corrupção de metadados WebAssembly para atravessá-la; não é a sandbox do processo renderizador.[1], [3]
ALPC / WNF / privilege
ALPC e WNF são mecanismos do kernel do Windows envolvidos em CVE-2026-85880. A cadeia relatada habilitou SeDebugPrivilege, privilégio de depuração de processos.[1], [4]

Mapeamentos de frameworks

Etapas da cadeia BlueMoon e decisões de correção

Etapa / CVE / limiteO que as fontes confirmamAção defensiva
Confusão de tipos no JIT do V8 — CVE-2026-85046A Proofpoint descreve mutação do comparador de Array.prototype.sort por fill(), invalidando uma suposição sobre o tipo dos elementos. O Google informou exploração em campo.Instale Chrome/Chromium 152.0.7977.82/.83 (Windows/Mac) ou .82 (Linux), ou versão posterior; reinicie o navegador. A versão de 3 de setembro do Google contém a correção.
Escape do sandbox do V8 — CVE-2026-87491A Proofpoint relata corrupção de metadados WebAssembly que cruza o sandbox de memória do V8, distinto do sandbox do processo de renderização. O Google informou exploração em campo.Instale Chrome/Chromium 153.0.8010.36/.37 (Windows/Mac) ou .36 (Linux), ou versão posterior; reinicie o navegador. A versão de 8 de setembro do Google contém a correção.
LPE no kernel do Windows — CVE-2026-85880A Proofpoint descreve um caminho ALPC/WNF até SeDebugPrivilege e lista as versões antigas do Windows visadas pelo kit. A Microsoft confirma exploração antes das atualizações de 8 de setembro. Essa lista não representa todas as versões afetadas.Instale as atualizações de segurança atuais e suportadas do Windows, incluindo a de 8 de setembro de 2026 ou posterior; consulte o MSRC para o pacote específico do sistema e conclua a reinicialização necessária. Corrija o Windows separadamente do Chrome.

Linha do Tempo do Incidente

2026-08-28

A Proofpoint observou atividade BlueMoon pela primeira vez.[1]

2026-09-03

O Chrome Stable corrigiu CVE-2026-85046 em 152.0.7977.82/.83 no Windows e Mac e .82 no Linux.[2]

2026-09-08

O Chrome Stable corrigiu CVE-2026-87491 em 153.0.8010.36/.37 no Windows e Mac e .36 no Linux; a Microsoft corrigiu CVE-2026-85880 nas atualizações de setembro. A Microsoft confirmou que a CVE-2026-85880 foi explorada antes das atualizações do Windows de 8 de setembro.[3], [4], [5]

Fluxo de Ataque Passo a Paso

Passo 1

Entrega observada

A Proofpoint observou campanhas direcionadas de spearphishing que distribuíam um link para o kit de exploração. As etapas no navegador exigiam que a pessoa abrisse o link em um navegador Chromium vulnerável.[1]

Passo 2

Confusão de tipos no V8 — CVE-2026-85046

A Proofpoint descreve um caminho otimizado de Array.prototype.sort cuja suposição de tipo podia ser invalidada quando o comparador alterava o array com fill(). A confusão de tipos resultante foi a vulnerabilidade inicial no renderizador; o Google informou que havia exploração em campo.[1], [2]

Passo 3

Escape do sandbox do V8 — CVE-2026-87491

A Proofpoint relata corrupção de metadados do módulo WebAssembly para cruzar o sandbox de memória do V8. Isso é diferente do sandbox do processo de renderização do Chrome; o Google também informou exploração em campo.[1], [3]

Passo 4

LPE no kernel do Windows — CVE-2026-85880

A Proofpoint relata um caminho no kernel via ALPC/WNF usado para habilitar SeDebugPrivilege no renderizador em versões antigas selecionadas do Windows. Separadamente, a Microsoft confirmou exploração antes das atualizações de segurança de 8 de setembro de 2026.[1], [4]

Passo 5

Saída do processo de renderização

Com as etapas do navegador e um alvo Windows compatível, a cadeia relatada podia sair do renderizador pelo LPE do Windows e alcançar o processo pai do navegador. O exemplo Python abaixo modela apenas a lição sobre suposições obsoletas; não é a cadeia de exploração.[1], [4]

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

Exemplo seguro em Python de hipótese invalidada, não é código V8, exploit nem correção do fabricante. Um callback benigno pode trocar inteiros por texto após a verificação inicial. A correção valida uma cópia limitada depois do callback e não chama outros callbacks ao consumi-la. No caso vulnerável, Python gera exceção com texto; isso não simula corrupção de memória nativa. Use somente callbacks confiáveis e limitados nesta execução síncrona.

IMPLEMENTAÇÃO VULNERÁVEL
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)
    # O callback pode ter invalidado a suposição sobre o tipo.
    return sum(values)
PATCH SEGURO E ROBUSTO
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")
    # Consuma o snapshot validado sem outro callback.
    return sum(snapshot)

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

Fontes