Foi divulgado publicamente pela equipe Project Zero do Google,uma vulnerabilidade no Microsoft Edge ainda não foi corrigida pela Microsoft. Esta vulnerabilidade torna possível para um atacante burlar o recurso de segurança do navegador do Windows 10 conhecido como Arbitrary Code Guard (ACG).
O ACG foi criado para impedir o carregamento de códigos maliciosos na memória a partir do navegador. Combinado com o recurso Code Integrity Guard, ele se certifica de que apenas código assinado digitalmente por uma fonte confiável seja carregado na memória.
Como isso causava problemas com alguns compiladores JavaScript Just-In-Time (JIT) que convertem JavaScript para código nativo, a Microsoft o moveu para um processo separado que roda em um ambiente próprio isolado. O problema é que um pesquisador de segurança do Google descobriu como burlar o ACG e assim carregar conteúdo não assinado na memória.
O Problema
Se um processamento de conteúdo estiver comprometido e este processo puder prever em qual endereço que o JIT vai chamar VirtualAllocEx() seguinte (nota: é bastante previsível), o processo de conteúdo pode:
- Desmarcar a memória compartilhada mapeada acima usando UnmapViewOfFile()
- Alocar uma região de memória como disponível para gravação no mesmo endereço o servidor JIT vai escrever uma carga útil.
- Quando o processo JIT chama VirtualAllocEx(), mesmo que a memória já esteja alocada, a chamada terá sucesso e a proteção de memória será definida como PAGE_EXECUTE_READ.
Nota # 1: O conteúdo escrito na etapa 2 vai sobreviver à mudança de proteção de memória.
Nota # 2: o servidor JIT vai escrever a carga útil do JIT em seu próprio “lado” da memória compartilhada, de modo que o conteúdo do Processo de Conteúdo não será imediatamente substituído.
Status da Correção
A vulnerabilidade foi classificada pelo Googel como sendo de “médio risco”, mas a Microsoft respondeu que uma solução para o problema seria muito complexa. A empresa também afirmou que não seria possível resolver o problema antes do prazo inicial da Google expirar. Vulnerabilidades encontradas pelo Google têm um prazo de 90 dias após o qual são divulgadas. Este período pode ser prolongado com duas semanas. A Microsoft não pôde resolver o problema tanto no período inicial como no período prolongado e, portanto, o Google tornou a vulnerabilidade pública hoje.