CVE-2013-3660
Corrige ahora. Ella está bajo explotación confirmada por CISA, tiene exploit funcional público y 1 grupo(s) de amenaza la utilizan.
Grupos conocidos por explotar esta vulnerabilidad (atribución MITRE ATT&CK).
Apply updates per vendor instructions.
Resumen
Falha de elevação de privilégio local no win32k.sys, o driver de modo kernel que trata operações gráficas do Windows (GDI). A função EPATHOBJ::pprFlattenRec não inicializa corretamente um ponteiro 'next' numa lista de PATHRECORD, e um atacante local que já tem execução de código no sistema pode corromper essa lista para obter escrita em memória arbitrária no kernel e virar SYSTEM. Não é remotamente explorável e não compromete um sistema do zero — serve para escalar privilégio a partir de um processo/usuário já comprometido, o que é exatamente por que ficou popular em cadeias de exploit por quase uma década.
Detalle técnico
O bug está em EPATHOBJ::pprFlattenRec, rotina do win32k.sys chamada durante o achatamento de paths (curvas Bézier) via NtGdiFlattenPath/FlattenPath. Ao processar a lista encadeada de PATHRECORD, o código toma um caminho de saída antecipada quando a alocação de um novo nó (via EPATHOBJ::newpathrec, que por sua vez chama HeavyAllocPool) falha — e nesse caminho de erro o ponteiro 'próximo' do nó não é reinicializado antes de a lista ser manipulada. O tipo de falha é uso de ponteiro/variável não inicializada (CWE-119/CWE-457, dependendo da classificação; a CISA cataloga como CWE-119) combinado com uma condição de corrida entre kernel e espaço de usuário.
Cómo se explota
O atacante precisa primeiro esgotar a memória paginada do sistema (heap spray de longa duração) para forçar HeavyAllocPool a falhar de forma previsível durante chamadas repetidas a FlattenPath. Isso deixa a thread do kernel presa num loop dentro de EPATHOBJ::bFlatten(), esperando indefinidamente. Enquanto isso, uma segunda thread em espaço de usuário limpa os objetos GDI intermediários e, usando InterlockedExchangePointer, corrige atomicamente o ponteiro 'next' da lista PATHRECORD para apontar a uma estrutura controlada pelo atacante — nesse ponto o kernel, ao retomar a execução, escreve através de um ponteiro que o atacante escolheu, dando primitiva de escrita arbitrária em memória kernel. Tavis Ormandy demonstrou publicamente (mailing list Full Disclosure e Twitter, maio de 2013) um exploit funcional que concedia SYSTEM em todas as versões suportadas do Windows na época, e o código-fonte da técnica foi publicado (inclusive no Exploit-DB). O pré-requisito real é execução de código local já estabelecida — não há vetor remoto nem elevação a partir de rede; o CVSS alto (7.8) reflete o impacto (controle total do sistema), não a facilidade de acesso inicial.
Versiones
Cómo protegerse
A correção definitiva veio pelo boletim MS13-053 (KB2850851), publicado em 09/07/2013, que corrige a inicialização do ponteiro na cadeia PATHRECORD. Sistemas Windows XP/Server 2003/Vista/Server 2008/7/8/Server 2012 sem esse patch (ou builds equivalentes já fora do ciclo de suporte) permanecem vulneráveis; como essas plataformas majoritariamente atingiram fim de vida, não há atualização disponível para quem ainda roda XP ou Server 2003 sem contrato de suporte estendido. Não existe mitigação de configuração conhecida que neutralize a falha em win32k.sys sem o patch — reduzir superfície de ataque (restringir quem pode executar código local, isolar sessões, usar contas sem privilégio de logon interativo) diminui a chance de exploração mas não elimina a vulnerabilidade em si. Atualizar para uma versão de Windows atualmente suportada e com patches aplicados é a única mitigação real.
Cómo detectar
Não há assinatura de rede — a exploração é inteiramente local, dentro do kernel. Um sinal indireto é a instabilidade: tentativas malsucedidas de explorar a corrida tendem a gerar BSOD com bugcheck 0x50 (PAGE_FAULT_IN_NONPAGED_AREA) com a pilha de falha apontando para win32k!EPATHOBJ::pprFlattenRec ou win32k!EPATHOBJ::bFlatten — dumps de memória do kernel com esse padrão são indício forte de tentativa de exploração dessa CVE (ou de uma das variantes relacionadas divulgadas junto, CVE-2013-3661 e CVE-2013-3130). Exploração bem-sucedida, por outro lado, não deixa rastro característico: o processo simplesmente passa a rodar com token SYSTEM, o que só é detectável por monitoramento de EDR de mudança de privilégio/token em processos que normalmente não deveriam elevar.