Task Scheduler Elevation of Privilege Vulnerability
Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.
Apply updates per vendor instructions.
Resumen
Falha de escalonamento de privilégios local no Windows Task Scheduler que permite a um usuário autenticado sem privilégios assumir controle total (incluindo posse) de qualquer arquivo do sistema, inclusive binários protegidos por TrustedInstaller — abrindo caminho para execução como SYSTEM. Foi divulgada publicamente por SandboxEscaper com exploit funcional antes de existir patch, e resolvida pela Microsoft em junho de 2019. Importa porque o vetor exige apenas execução de código local não privilegiado, um pré-requisito comum em pós-exploração e em ambientes multiusuário.
Detalle técnico
A causa é uma combinação de link following (CWE-59) com um problema de impersonation na função tsched::SetJobFileSecurityByName(), dentro de schedsvc.dll (o serviço Task Scheduler, que roda como NT AUTHORITY\SYSTEM). Quando um usuário pede para alterar a configuração 'run-as' de uma tarefa agendada (via schtasks.exe /change /RU /RP), a RPC _SchRpcSetSecurity() ajusta a DACL e o owner do arquivo .job correspondente em %Windir%\system32\tasks para dar ao usuário chamador acesso total — operação legítima quando o arquivo é de fato a tarefa do próprio usuário.
O problema aparece ao usar o schtasks.exe legado (da era Windows XP), que fala com uma interface RPC antiga. Analistas da 0patch depuraram a chamada e confirmaram, via !token, que no momento em que SetSecurityInfo() é invocado o token de impersonation não corresponde ao usuário atacante, mas sim a Local System — ou seja, a validação de que 'o chamador tem permissão de escrita sobre este arquivo' não está sendo feita corretamente sob o contexto certo antes da operação privilegiada de SetSecurityInfo.
O atacante controla o caminho de destino explorando comportamento de migração legado: tarefas criadas via schtasks.exe antigo em %Windir%\tasks são migradas para %Windir%\system32\tasks. Depois de disparar essa migração uma vez (criando o arquivo de tarefa legítimo), o atacante apaga o arquivo resultante e cria em seu lugar um hard link apontando para um arquivo protegido arbitrário do sistema (por exemplo, um driver em system32\drivers). Ao repetir o comando de alteração da tarefa, o serviço Task Scheduler, agindo como SYSTEM, aplica a mudança de DACL/owner sobre o que ele acredita ser o arquivo de tarefa do usuário — mas que na verdade, via hard link, é o arquivo de sistema.
O resultado documentado pela CERT/CC: o arquivo alvo deixa de ser propriedade de TrustedInstaller e passa a ter permissão Full Control para o usuário atacante, que passa a poder sobrescrevê-lo livremente.
Cómo se explota
Pré-requisito real: execução de código como usuário autenticado sem privilégios elevados na máquina — não há vetor remoto nem exige interação de outro usuário (UI:N). O exploit público (chamado 'polarbear', de SandboxEscaper) automatiza a sequência: copia um job para %Windir%\tasks, executa schtasks.exe legado com /change /RU /RP para forçar a migração e criação do arquivo em system32\tasks, apaga esse arquivo, cria um hard link para o arquivo-alvo protegido, e repete o /change para que o Task Scheduler aplique a alteração de permissão/owner sobre o alvo real via o link.
A CERT/CC confirmou funcionamento confiável em Windows 10 (32 e 64 bits) totalmente atualizado, além de Windows Server 2016 e Server 2019, à época do teste (antes do patch). Em Windows 8 a técnica pública só afeta arquivos onde o usuário já teria acesso de escrita, tornando o impacto prático desprezível ali; em Windows 7 os pesquisadores não conseguiram reproduzir. O ganho final é controle irrestrito sobre um arquivo de sistema escolhido — na prática usado para sobrescrever um binário ou driver executado com privilégios de SYSTEM e obter execução de código nesse nível, completando a escalada de privilégio total.
A vulnerabilidade está no catálogo KEV da CISA (adicionada em 2022, com prazo de correção 2022-04-05), confirmando exploração ativa observada, embora a CISA não a associe a campanhas de ransomware conhecidas. Como o PoC ficou público antes do patch oficial, houve uma janela real de exploração 0-day.
Versiones
Cómo protegerse
A correção oficial da Microsoft veio nas atualizações cumulativas de junho de 2019 ('Patch Tuesday'), que ajustam a validação de operações de arquivo no Task Scheduler Service. Aplicar essas atualizações (e cumulativas posteriores) nas versões afetadas é a mitigação definitiva; não há números de KB confirmados nas fontes consultadas para citar aqui — confirme a atualização de junho/2019 correspondente à build específica no Update Catalog da Microsoft antes de considerar corrigido.
Como paliativo temporário antes do patch, a 0patch disponibilizou um micropatch de terceiros lançado cerca de 12 dias antes da correção oficial — trata-se de um patch binário aplicado em runtime, não endossado pela Microsoft, com o custo de introduzir uma dependência externa de terceiros no processo core do serviço; avalie esse tipo de solução apenas como mitigação de curtíssimo prazo em ambientes de alto risco.
Controles compensatórios genéricos: restringir contas de usuário padrão em endpoints (reduzir superfície de contas autenticadas com esse nível de acesso), monitorar e restringir a presença/execução de versões legadas de schtasks.exe, e usar EDR/whitelisting de aplicação para bloquear execução de binários não assinados/antigos que reproduzam esse padrão de RPC legado. Não existe mitigação de rede (firewall/WAF) aplicável, pois o vetor é inteiramente local.
Cómo detectar
Sinal mais confiável: uso do schtasks.exe legado (versão antiga, estilo Windows XP, que fala com a interface RPC legada) em uma máquina moderna, algo atípico e raro em operação normal — presença desse binário ou chamadas a essa interface RPC específica é forte indicador. Em nível de sistema de arquivos/ETW, procurar por criação de arquivos em %Windir%\tasks (caminho legado, não usado normalmente em versões modernas) seguida rapidamente por exclusão e recriação como hard link para arquivos fora do diretório de tarefas — especialmente hard links apontando para binários do sistema (drivers, DLLs, executáveis protegidos por TrustedInstaller).
Process Monitor ou ETW podem capturar operações SetSecurityFile originadas de schedsvc.dll (via _SchRpcSetSecurity/SetJobFileSecurityByName) com alterações de DACL/owner em arquivos fora do escopo esperado do usuário chamador. Não há assinatura de rede, pois o ataque é inteiramente local; ambientes sem logging de criação de arquivo/hard link e sem auditoria de chamadas RPC ao Task Scheduler dificilmente terão evidência retroativa confiável.