Na semana passada fomos surpreendidos com uma atualização de emergência do navegador Google Chrome, visando a correção de uma vulnerabilidade de software [1] que atinge computadores com Windows, Mac OS e Linux, e que tem potencial para permitir a invasão de dispositivos que estejam rodando a versão afetada. A versão corrigida é a versão Chrome 99.0.4844.84 e posteriores. O Google não deu mais informações sobre a vulnerabilidade, e declarou que os detalhes ficariam restritos até que a maioria dos usuários atualizassem seus softwares. Acompanhando a referência [1] será possível obter atualizações sobre este caso.
O problema atinge o mecanismo Chromium Open Source Software, [2] que é usado pelo Chrome, mas também pelo navegador Edge da Microsoft. Por conta disso, um dia depois do Google, a Microsoft emitiu seu próprio alerta e informou que a versão 99.0.1150.55 do Edge corrigiu a falha.
Por enquanto, sabemos que uma falha chamada “Type Confusion” ou “Confusão de Tipo” no V8, o mecanismo JavaScript do Chrome, causa o problema. Usamos o mecanismo V8 também no lado servidor no Node.js, mas não há informações de que essa parte do software seja afetada.
Mas, do que se trata uma falha de “Type Confusion”? De forma bem objetiva e direta: é uma falha lógica causada pelo programador. Um erro no processo de programação resulta nisso. Um erro humano que pode ficar dormente por muito tempo, até que alguém o descubra.
O que é Type Confusion?
A vulnerabilidade Type Confusion ou “Confusão de Tipo” é um problema conhecido e que acontece em algumas linguagens de programação. Como o próprio nome indica, Type Confusion é uma falha resultante de uma confusão entre os tipos de dados ou objetos utilizados, cometida ao desenvolver o software.
Quando o programador desenvolve um software ele precisa reservar recursos do computador para colocar informações na memória RAM. No entanto, podemos pensar na memória RAM como uma quantidade enorme de caixas com endereços que armazenam os dados. Ao reservar os recursos para o programa funcionar, o programador precisa “avisar” o que cada uma destas caixas de memória vai conter. Ou seja, ele deve programar qual tipo de objeto a memória vai conter. Por exemplo, ele precisa avisar se determinada posição de memória vai conter um número inteiro (por exemplo, um CPF), ou um bloco de caracteres (por exemplo, um parágrafo de texto). Isso permite que as pessoas encontrem, utilizem e assim, entendam corretamente as informações ou objetos. Além disso, permite que dados sejam trocados entre as diversas partes do software, ou entre outros programas.
Como acontece a falha de Type Confusion?
Se o programador inicializar um recurso, tal como um objeto ou variável, usando um tipo de dado (por exemplo um número Inteiro), mas posteriormente acessar esse recurso usando um tipo de dado incompatível com o tipo original (por exemplo, um bloco de texto), pode acontecer uma falha de Type Confusion. Isso pode fazer com que o programa tome um rumo inesperado, e faça operações que não deveria fazer, como, por exemplo, executar um programa de ataque ou um vírus. Ou seja, o programa fica “doido” ou confuso.
Type Confusion é um tipo de vulnerabilidade que, genericamente, faz parte da classe de falhas de “Buffer Overflow” ou “Extravasamento de Buffer” [4]. Uma consulta rápida à base de dados CVE – Common Vulnerabilities and Exposures nos permite ver que existem mais de 400 vulnerabilidades ocasionadas por Type Confusion [5], sendo a primeira delas relatada em 2010.
Como a Google não encontrou?
Mas, a pergunta que não quer calar é: se o Type Confusion é um problema de falha de programação, como uma empresa como o Google não a encontrou antes? O que ocorre é que os softwares atuais, principalmente os navegadores, são muito, muito, complexos, e executam muitas funções. Mesmo com rotinas de testes adequados, pode demorar muito para descobrirmos uma falha, ou podemos nunca encontrá-la ou ativá-la. Além disso, técnicas de ataque que não existiam antes podem ser desenvolvidas ou descobertas depois que o software foi produzido. Por este motivo, todo e qualquer software, principalmente aqueles expostos na Internet, devem passar por rotinas constantes de testes de vulnerabilidades, seguindo as recomendações internacionais e as melhores práticas vigentes. O preço da liberdade é a eterna vigilância! [5]
Perguntas e Respostas:
1.) Podemos explorar essa vulnerabilidade remotamente?
R: Sim. Um invasor remoto pode explorar a type confusion pela Internet, sem necessidade de autenticação.
2.) Como o invasor pode explorar essa vulnerabilidade?
R: O invasor tem que enganar a vítima para visitar um site especialmente criado para ataca-la. Esse tipo de ataque geralmente associa-se a campanhas de SPAM ou Phishing, bem como, Fake News, e-mail marketing falso, posts em redes sociais, promoções falsas, entre outros.
3.) Existe ferramenta conhecida, que explora type confusion?
R: Há relatos que sim.
Por Adriano Mauro Cansian, Prof. Dr.
Referências:
[1] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0609
[2] https://www.chromium.org/Home/
[3] https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-1096
[4] Para entender mais tecnicamente sobre Buffer Overlow, recomendamos uma leitura da referência https://inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing.pdf
[5] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=Type+Confusion
[6] John Philpot Curran. SHAPIRO, Fred R. The Yale Book of Quotations, 2006.