Valor Sentinel e os riscos de segurança no Chrome V8
O valor Sentinel é um valor especial em algoritmos, frequentemente utilizado como condição de término em algoritmos de loop ou recursão. No código-fonte do Chrome, existem vários valores Sentinel, alguns dos quais, se vazarem para o ambiente JavaScript, podem causar problemas de segurança.
Estudos anteriores mostraram que a divulgação do objeto TheHole pode permitir a execução de código arbitrário dentro do sandbox. A equipe do Google corrigiu isso. No entanto, na verdade, existem outros objetos nativos no V8 que não devem ser divulgados para o JS, como o objeto Uninitialized Oddball.
O vazamento de objetos Oddball não inicializados pode levar à fuga do sandbox. Este problema apareceu pela primeira vez na Issue1352549 e ainda não foi corrigido. Este método tem uma certa universalidade e apareceu em várias vulnerabilidades.
Os objetos nativos no V8 estão definidos no arquivo v8/src/roots/roots.h e estão dispostos adjacentes na memória. Uma vez que esses objetos vazam para o ambiente JavaScript, pode ocorrer uma fuga do sandbox.
Para verificar este problema, é possível modificar a função nativa do V8, fazendo com que o Oddball Não Inicializado vaze para o JavaScript. Especificamente, pode-se modificar a implementação da função %TheHole().
A utilização de objetos Uninitialized Oddball pode contornar a proteção HardenType. Ao construir um código JavaScript específico, é possível realizar leituras e gravações de memória relativamente arbitrárias. Isso se deve ao fato de que o código otimizado não verifica adequadamente as propriedades dos objetos.
Para as sugestões de correção, deve-se adicionar uma verificação do map do array ao retornar elementos do array na função otimizada, evitando calcular diretamente o deslocamento para retornar valores.
Esta questão também nos lembra de prestar atenção ao PatchGap, ou seja, alguns softwares podem usar versões do V8 que não corrigiram essa vulnerabilidade. Por exemplo, o Skype ainda não corrigiu esse problema. Na arquitetura x86, devido à ausência de compressão de endereços, é possível realizar leituras e gravações arbitrárias dentro do processo.
De um modo geral, existem vários valores Sentinel no V8 que podem apresentar riscos de segurança semelhantes. Recomenda-se investigar mais os efeitos de outras vazamentos de Uninitialized Oddball, considerando incluir esses tipos de objetos no escopo de testes de fuzzing, a fim de descobrir mais formas potenciais de exploração. De qualquer forma, esses problemas podem encurtar significativamente o ciclo de exploração de vulnerabilidades para os atacantes.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
5 Curtidas
Recompensa
5
5
Compartilhar
Comentário
0/400
DuckFluff
· 13h atrás
Caramba, esta vulnerabilidade soa incrível!
Ver originalResponder0
ShitcoinConnoisseur
· 07-11 14:18
E ainda não se apressam a consertar isso? O que está a fazer o v8?
Chrome V8 Sentinel Value vulnerabilidade de segurança: a divulgação de objetos Oddball não inicializados pode levar à fuga da sandbox
Valor Sentinel e os riscos de segurança no Chrome V8
O valor Sentinel é um valor especial em algoritmos, frequentemente utilizado como condição de término em algoritmos de loop ou recursão. No código-fonte do Chrome, existem vários valores Sentinel, alguns dos quais, se vazarem para o ambiente JavaScript, podem causar problemas de segurança.
Estudos anteriores mostraram que a divulgação do objeto TheHole pode permitir a execução de código arbitrário dentro do sandbox. A equipe do Google corrigiu isso. No entanto, na verdade, existem outros objetos nativos no V8 que não devem ser divulgados para o JS, como o objeto Uninitialized Oddball.
O vazamento de objetos Oddball não inicializados pode levar à fuga do sandbox. Este problema apareceu pela primeira vez na Issue1352549 e ainda não foi corrigido. Este método tem uma certa universalidade e apareceu em várias vulnerabilidades.
Os objetos nativos no V8 estão definidos no arquivo v8/src/roots/roots.h e estão dispostos adjacentes na memória. Uma vez que esses objetos vazam para o ambiente JavaScript, pode ocorrer uma fuga do sandbox.
Para verificar este problema, é possível modificar a função nativa do V8, fazendo com que o Oddball Não Inicializado vaze para o JavaScript. Especificamente, pode-se modificar a implementação da função %TheHole().
A utilização de objetos Uninitialized Oddball pode contornar a proteção HardenType. Ao construir um código JavaScript específico, é possível realizar leituras e gravações de memória relativamente arbitrárias. Isso se deve ao fato de que o código otimizado não verifica adequadamente as propriedades dos objetos.
Para as sugestões de correção, deve-se adicionar uma verificação do map do array ao retornar elementos do array na função otimizada, evitando calcular diretamente o deslocamento para retornar valores.
Esta questão também nos lembra de prestar atenção ao PatchGap, ou seja, alguns softwares podem usar versões do V8 que não corrigiram essa vulnerabilidade. Por exemplo, o Skype ainda não corrigiu esse problema. Na arquitetura x86, devido à ausência de compressão de endereços, é possível realizar leituras e gravações arbitrárias dentro do processo.
De um modo geral, existem vários valores Sentinel no V8 que podem apresentar riscos de segurança semelhantes. Recomenda-se investigar mais os efeitos de outras vazamentos de Uninitialized Oddball, considerando incluir esses tipos de objetos no escopo de testes de fuzzing, a fim de descobrir mais formas potenciais de exploração. De qualquer forma, esses problemas podem encurtar significativamente o ciclo de exploração de vulnerabilidades para os atacantes.