Contornar o HardenProtect do Chrome v8 através da exposição do Valor Sentinel
Introdução
O valor sentinel é um valor especial em algoritmos, geralmente utilizado como condição de término em algoritmos de loop ou recursivos. No código-fonte do Chrome, existem muitos valores sentinel. Anteriormente, houve pesquisas que apresentaram como executar código arbitrário dentro da sandbox ao vazar o objeto TheHole. A equipe do Google rapidamente atualizou os reparos relacionados.
Além do objeto TheHole, existem muitos outros objetos nativos no v8 que não devem vazar para o JS. Este artigo discutirá o objeto Uninitialized Oddball, cujo método ainda está disponível na versão mais recente do V8. Vale a pena notar que esse método possui certa universalidade e apareceu em várias vulnerabilidades.
Valor Sentinel no V8
A maior parte dos objetos nativos do v8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos sequencialmente na memória. Uma vez que um objeto nativo que não deve ser vazado seja exposto ao Javascript, é possível executar qualquer código dentro do sandbox.
Para validar este método, podemos modificar a função nativa do v8 para vazar Uninitialized Oddball para o JavaScript. Especificamente, podemos modificar o deslocamento relativo do isolate na função %TheHole().
Contornar HardenType
A utilização de Uninitialized Oddball pode permitir leituras e gravações relativamente arbitrárias. A chave está na função de leitura do JavaScript otimizada, que apenas verifica se a propriedade prop do obj está correta, mas não verifica o valor com obj.prop como chave; em vez disso, calcula diretamente o deslocamento de acordo com a semântica do JavaScript, obtendo o valor do array. Isso resulta em confusão de tipos durante o cálculo, permitindo leituras arbitrárias.
Devido ao Uninitialized Oddball estar classificado como mais anterior e primitivo na memória v8, é mais fácil de falsificar em comparação com o objeto TheHole, sendo o método preferido para contornar as correções do TheHole.
A sugestão de solução é adicionar uma verificação do array map ao retornar elementos do array a partir da função otimizada, evitando o cálculo direto do deslocamento para retornar valores.
Aviso de Risco PatchGap
Além de prestar atenção às vulnerabilidades históricas, é importante observar as falhas que os fabricantes silenciosamente corrigem nos componentes básicos. Atualmente, o Skype ainda não corrigiu essa vulnerabilidade. A forma de exploração é ligeiramente diferente em x86 e x64, mas ambas podem permitir leitura e escrita arbitrárias.
Desta vez, o PatchGap não apenas envolve a Issue 1352549, mas a divulgação do novo método também reduziu significativamente a dificuldade de exploração de vulnerabilidades semelhantes. Os hackers quase não precisam de pesquisa para completar a exploração completa de qualquer vazamento do Uninitialized Oddball que antes era necessário.
Resumo
No v8 existem muitos outros valores Sentinel, que podem apresentar problemas semelhantes. Isso nos dá algumas pistas:
Outras fugas de Uninitialized Oddball também são fáceis de realizar RCE no v8.
A questão se esses problemas devem ser formalmente considerados como questões de segurança ainda é controversa.
Durante os testes de fuzz, talvez deva considerar adicionar vários valores Sentinel como variáveis.
De qualquer forma, este tipo de problema encurtará significativamente o ciclo de exploração completo dos hackers. Devemos manter vigilância sobre isso.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
9 gostos
Recompensa
9
5
Partilhar
Comentar
0/400
gas_fee_therapist
· 08-05 17:35
v8 novamente estragou tudo, a segurança está cada vez mais a bombear.
Ver originalResponder0
GreenCandleCollector
· 08-05 17:34
Essa vulnerabilidade é bastante hardcore, não é?
Ver originalResponder0
LightningPacketLoss
· 08-05 17:32
Este bug foi resolvido novamente. Precisamos consertar rapidamente nosso datacenter.
Ver originalResponder0
ChainMelonWatcher
· 08-05 17:32
Ah, isso... o Irmão Fura-túneis lançou novo trabalho.
Ver originalResponder0
ImpermanentLossFan
· 08-05 17:31
Eu não acredito, a versão 8 ainda tem esse tipo de vulnerabilidade.
Novo método de exploração de vulnerabilidades do Chrome v8: fuga de sandbox através da divulgação da implementação de Oddball não inicializada.
Contornar o HardenProtect do Chrome v8 através da exposição do Valor Sentinel
Introdução
O valor sentinel é um valor especial em algoritmos, geralmente utilizado como condição de término em algoritmos de loop ou recursivos. No código-fonte do Chrome, existem muitos valores sentinel. Anteriormente, houve pesquisas que apresentaram como executar código arbitrário dentro da sandbox ao vazar o objeto TheHole. A equipe do Google rapidamente atualizou os reparos relacionados.
Além do objeto TheHole, existem muitos outros objetos nativos no v8 que não devem vazar para o JS. Este artigo discutirá o objeto Uninitialized Oddball, cujo método ainda está disponível na versão mais recente do V8. Vale a pena notar que esse método possui certa universalidade e apareceu em várias vulnerabilidades.
Valor Sentinel no V8
A maior parte dos objetos nativos do v8 está definida no arquivo v8/src/roots/roots.h, e esses objetos estão dispostos sequencialmente na memória. Uma vez que um objeto nativo que não deve ser vazado seja exposto ao Javascript, é possível executar qualquer código dentro do sandbox.
Para validar este método, podemos modificar a função nativa do v8 para vazar Uninitialized Oddball para o JavaScript. Especificamente, podemos modificar o deslocamento relativo do isolate na função %TheHole().
Contornar HardenType
A utilização de Uninitialized Oddball pode permitir leituras e gravações relativamente arbitrárias. A chave está na função de leitura do JavaScript otimizada, que apenas verifica se a propriedade prop do obj está correta, mas não verifica o valor com obj.prop como chave; em vez disso, calcula diretamente o deslocamento de acordo com a semântica do JavaScript, obtendo o valor do array. Isso resulta em confusão de tipos durante o cálculo, permitindo leituras arbitrárias.
Devido ao Uninitialized Oddball estar classificado como mais anterior e primitivo na memória v8, é mais fácil de falsificar em comparação com o objeto TheHole, sendo o método preferido para contornar as correções do TheHole.
A sugestão de solução é adicionar uma verificação do array map ao retornar elementos do array a partir da função otimizada, evitando o cálculo direto do deslocamento para retornar valores.
Aviso de Risco PatchGap
Além de prestar atenção às vulnerabilidades históricas, é importante observar as falhas que os fabricantes silenciosamente corrigem nos componentes básicos. Atualmente, o Skype ainda não corrigiu essa vulnerabilidade. A forma de exploração é ligeiramente diferente em x86 e x64, mas ambas podem permitir leitura e escrita arbitrárias.
Desta vez, o PatchGap não apenas envolve a Issue 1352549, mas a divulgação do novo método também reduziu significativamente a dificuldade de exploração de vulnerabilidades semelhantes. Os hackers quase não precisam de pesquisa para completar a exploração completa de qualquer vazamento do Uninitialized Oddball que antes era necessário.
Resumo
No v8 existem muitos outros valores Sentinel, que podem apresentar problemas semelhantes. Isso nos dá algumas pistas:
Outras fugas de Uninitialized Oddball também são fáceis de realizar RCE no v8.
A questão se esses problemas devem ser formalmente considerados como questões de segurança ainda é controversa.
Durante os testes de fuzz, talvez deva considerar adicionar vários valores Sentinel como variáveis.
De qualquer forma, este tipo de problema encurtará significativamente o ciclo de exploração completo dos hackers. Devemos manter vigilância sobre isso.