Exploração dos riscos de segurança causados pelo vazamento de Sentinel Value no motor Chrome V8
Introdução
O valor sentinel é um valor especial em algoritmos, normalmente utilizado como condição de término em algoritmos de loop ou recursivos. Esse valor especial é amplamente utilizado no código-fonte do Chrome. Recentemente, pesquisadores conseguiram realizar a execução de código arbitrário dentro do sandbox por meio da exploração do objeto TheHole, resultando nas vulnerabilidades CVE-2021-38003 e CVE-2022-1364. A equipe do Google rapidamente corrigiu essas duas vulnerabilidades.
No entanto, além do objeto TheHole, existem outros objetos nativos no V8 que não devem ser expostos ao JavaScript. Este artigo irá focar no objeto Uninitialized Oddball e apresentar como explorar isso para contornar o mecanismo HardenProtect do V8. Vale ressaltar que esse método de contorno ainda é aplicável na versão mais recente do V8 e ainda não foi corrigido.
Valor Sentinel no V8
A maioria dos objetos nativos do V8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos em sequência na memória. Uma vez que esses objetos nativos, que não deveriam ser expostos ao JavaScript, sejam vazados, pode levar à execução de código arbitrário dentro do sandbox.
Para verificar isso, podemos modificar a função nativa do V8 para vazar o Oddball Não Inicializado para o JavaScript. O método específico é modificar o deslocamento relativo do isolate na função %TheHole() para que retorne o Oddball Não Inicializado.
Contornar a proteção HardenType
A utilização de objetos Uninitialized Oddball pode permitir leituras e gravações relativamente arbitrárias. No código JavaScript otimizado, a função read não verifica o valor associado à chave obj.prop, mas calcula diretamente o deslocamento de acordo com a semântica do JavaScript para obter o valor do array. Isso leva a uma confusão de tipos durante o cálculo, permitindo assim leituras arbitrárias.
Para qualquer operação de escrita, pode-se referir ao método de construção na Issue1352549 para análise. A solução de correção sugerida é adicionar uma verificação do array map ao retornar elementos do array na função otimizada, evitando o cálculo direto do deslocamento para retornar valores do array.
Aviso PatchGap
Após a análise do Issue1352549, descobrimos que alguns softwares podem ter problemas de PatchGap. Vale a pena notar que, até o momento, o Skype ainda não corrigiu essa vulnerabilidade. No ambiente x86, a implementação de leitura e escrita arbitrária pode ser diferente, pois não há compressão de endereço, podendo operar diretamente em relação a todo o processo.
Este problema do PatchGap não envolve apenas o Issue1352549, a divulgação de um novo método de contorno também reduziu significativamente a dificuldade de explorar vulnerabilidades como o Issue1314616 e o Issue1216437. Os hackers quase não precisam de nenhum custo de pesquisa para realizar a exploração completa de qualquer vazamento do tipo uninitialized_oddball.
Resumo
Este artigo discute brevemente o método para realizar leitura arbitrária através da divulgação de uninitialized_Oddball no valor Sentinel. Existem muitos outros valores Sentinel no V8 que também podem causar problemas de segurança semelhantes. Isso nos dá a seguinte lição:
Outras vazamentos uninitialized_Oddball podem também permitir a execução remota de código V8.
A questão de saber se este tipo de problemas deve ser considerado um problema de segurança formal ainda é controversa.
Considere adicionar valores Sentinel como %TheHole/uninitialized_Oddball como variáveis no fuzzer para explorar outras utilizações de primitivos.
Independentemente de estes problemas serem ou não considerados formalmente como questões de segurança, eles encurtam significativamente o ciclo de tempo que os hackers precisam para explorar completamente.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
25 Curtidas
Recompensa
25
6
Compartilhar
Comentário
0/400
FUD_Vaccinated
· 07-26 03:20
Outra vez o Google, este buraco está muito frequente.
Ver originalResponder0
MetaverseLandlord
· 07-24 11:22
Caramba, as falhas dos navegadores dos outros são tão avançadas.
Ver originalResponder0
SerNgmi
· 07-23 05:34
A verdade é que o v8 está a dar-me dores de cabeça...
Análise de risco de segurança e exploração de vazamento de Valor Sentinel do motor Chrome V8
Exploração dos riscos de segurança causados pelo vazamento de Sentinel Value no motor Chrome V8
Introdução
O valor sentinel é um valor especial em algoritmos, normalmente utilizado como condição de término em algoritmos de loop ou recursivos. Esse valor especial é amplamente utilizado no código-fonte do Chrome. Recentemente, pesquisadores conseguiram realizar a execução de código arbitrário dentro do sandbox por meio da exploração do objeto TheHole, resultando nas vulnerabilidades CVE-2021-38003 e CVE-2022-1364. A equipe do Google rapidamente corrigiu essas duas vulnerabilidades.
No entanto, além do objeto TheHole, existem outros objetos nativos no V8 que não devem ser expostos ao JavaScript. Este artigo irá focar no objeto Uninitialized Oddball e apresentar como explorar isso para contornar o mecanismo HardenProtect do V8. Vale ressaltar que esse método de contorno ainda é aplicável na versão mais recente do V8 e ainda não foi corrigido.
Valor Sentinel no V8
A maioria dos objetos nativos do V8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos em sequência na memória. Uma vez que esses objetos nativos, que não deveriam ser expostos ao JavaScript, sejam vazados, pode levar à execução de código arbitrário dentro do sandbox.
Para verificar isso, podemos modificar a função nativa do V8 para vazar o Oddball Não Inicializado para o JavaScript. O método específico é modificar o deslocamento relativo do isolate na função %TheHole() para que retorne o Oddball Não Inicializado.
Contornar a proteção HardenType
A utilização de objetos Uninitialized Oddball pode permitir leituras e gravações relativamente arbitrárias. No código JavaScript otimizado, a função read não verifica o valor associado à chave obj.prop, mas calcula diretamente o deslocamento de acordo com a semântica do JavaScript para obter o valor do array. Isso leva a uma confusão de tipos durante o cálculo, permitindo assim leituras arbitrárias.
Para qualquer operação de escrita, pode-se referir ao método de construção na Issue1352549 para análise. A solução de correção sugerida é adicionar uma verificação do array map ao retornar elementos do array na função otimizada, evitando o cálculo direto do deslocamento para retornar valores do array.
Aviso PatchGap
Após a análise do Issue1352549, descobrimos que alguns softwares podem ter problemas de PatchGap. Vale a pena notar que, até o momento, o Skype ainda não corrigiu essa vulnerabilidade. No ambiente x86, a implementação de leitura e escrita arbitrária pode ser diferente, pois não há compressão de endereço, podendo operar diretamente em relação a todo o processo.
Este problema do PatchGap não envolve apenas o Issue1352549, a divulgação de um novo método de contorno também reduziu significativamente a dificuldade de explorar vulnerabilidades como o Issue1314616 e o Issue1216437. Os hackers quase não precisam de nenhum custo de pesquisa para realizar a exploração completa de qualquer vazamento do tipo uninitialized_oddball.
Resumo
Este artigo discute brevemente o método para realizar leitura arbitrária através da divulgação de uninitialized_Oddball no valor Sentinel. Existem muitos outros valores Sentinel no V8 que também podem causar problemas de segurança semelhantes. Isso nos dá a seguinte lição:
Outras vazamentos uninitialized_Oddball podem também permitir a execução remota de código V8.
A questão de saber se este tipo de problemas deve ser considerado um problema de segurança formal ainda é controversa.
Considere adicionar valores Sentinel como %TheHole/uninitialized_Oddball como variáveis no fuzzer para explorar outras utilizações de primitivos.
Independentemente de estes problemas serem ou não considerados formalmente como questões de segurança, eles encurtam significativamente o ciclo de tempo que os hackers precisam para explorar completamente.