Erro de Magalhães: saturação de buffer ou expedição ao redor do mundo usando SQLite FTS

De alguma forma, contornei o recente erro de Magalhães em Habré e as vulnerabilidades associadas a ele, tentarei corrigir essa omissão.


Um pouco de história


  • Em 1 de novembro de 2018, um relatório de bug número 900910 chegou ao Chromium: "Vários problemas no SQLite via WebSQL". O erro é relatado por Wenxiang Qian da Equipe Tencent Blade.
  • Em 5 de novembro de 2018, o erro foi encerrado no núcleo da biblioteca SQLite (FTS3), onde ele vive praticamente desde o momento em que o módulo foi criado, ou seja, desde novembro de 2009.
  • 28 de novembro de 2018, ele se funde no Chromium
  • Um pouco mais tarde, a Equipe Blade Tencent publica uma mensagem de erro, dando o nome de Magalhães, especialmente sem revelar detalhes, e indicando que a publicação de explorações prontas e PoC ainda não está planejada.
  • Uma semana depois, a Internet está cheia de PoC, travando o Chrome, o Electron dev-framework, etc. As evidências e outras informações de que a vulnerabilidade foi usada para fins maliciosos ainda não são.
  • DRH , confirmou suspeitas no Hacker News de que a vulnerabilidade existe (pelo menos se a execução de uma consulta SQL "estrangeira" for permitida ou uma injeção de SQL de um cenário semelhante).

O que poderia ser vulnerável?


Potencialmente, todos os dispositivos e programas usando SQLite (com FTS ativado) ou usando ou com base em aplicativos baseados nele (como o Chromium). A extensão em que eles podem ser afetados e o efeito de uma possível "perda" depende se um vetor de ataque adequado é encontrado.


Um pouco mais sobre o Magellan SQLite BUG


O erro está associado ao estouro da soma de números inteiros, também conhecido como estouro de número inteiro , que pode ser causado no subsistema FTS3 / 4 alterando o índice FTS da tabela, que por sua vez pode levar à reescrita da memória ou à finalização com uma exceção.


A aplicação artificial direcionada desse estouro inteiro, através do "corte" competente de buffers de gravação, leva ao estouro de memória e pode ser usada no futuro por consultas SQL especialmente criadas.


Como resultado, em teoria, muitos aplicativos que usam SQLite (com tabelas FTS virtuais) e, em particular, navegadores populares que suportam SQLite com base em SQLite com FTS ativado (por exemplo, Google Chrome, Chromium, Opera, Slimjet Browser, SRWare Iron, Torch, podem ser vulneráveis). Dragão Comodo, CoolNovo, Navegador Yandex, Vivaldi, etc.).


Os bancos de dados SQLite geralmente são muito populares, fornecidos por mais de uma dúzia de linguagens de programação, cadeia de ferramentas, estruturas etc., são usados ​​por aplicativos para dispositivos móveis e computadores completos e geralmente são encontrados até em soluções de servidor. Por exemplo, navegadores da web populares como Google Chrome, Mozilla Firefox e Yandex Browser, muitos mensageiros instantâneos (por exemplo, WhatsApp, Viber, WeChat e outros) armazenam dados nesse formato etc. etc.


O mesmo Fossil SCM , por exemplo, usa o banco de dados SQLite para armazenar o histórico de revisões e permite usar a indexação de texto completo por meio do FTS (e fornece acesso a ele a partir do focinho da interface do usuário / web, onde, por exemplo, existe a possibilidade de criar suas próprias consultas SQL, por exemplo, relatórios de tickets personalizados etc.)


Atualização: DRH, co-autor e desenvolvedor do Fossil, aparentemente pensou a mesma coisa e já " fechou o buraco " atualizando o SQLite para 3.26.0


Esse excesso "previsível" não é algo muito agradável por si só, mas se você se lembra do que exatamente pode ser armazenado no próprio banco (do conteúdo das revistas às próprias tabelas) ...
Portanto, não seja camarada preguiçoso ... e seja atualizado, atualizado.


Onde conseguir a correção?


O patch [940f2adc8541a838] é fornecido como parte da atualização do SQLite 3.25.3 (para a qual Chromium e companhia. Também foram atualizados, por exemplo, Chrome na versão 71.0.3578.80).


O SQLite versão 3.26 também fornece recursos de segurança adicionais para contêineres FTS, por exemplo:

suporte para tabelas de sombra somente leitura quando a opção SQLITE_DBCONFIG_DEFENSIVE está ativada

Qual é o perigo dessa vulnerabilidade?


Crítico. Permite a execução remota de código. Um vazamento de memória e falha no programa também são prováveis.


Existem exemplos de explorações prontas para explorar a vulnerabilidade?


Sim


Em particular, a equipe Tencent Blade afirma que executou com sucesso um ataque ao Google Home usando esta vulnerabilidade (o acesso à descrição do problema no rastreador de bugs do Google está fechado) e, como mencionado acima, não há nenhum plano para divulgar o código de exploração no momento.


Termos de uso da vulnerabilidade?


A vulnerabilidade pode ser executada remotamente, por exemplo, quando uma determinada página da web é acessada em um navegador ou em um cenário semelhante, por exemplo, permitindo executar instruções SQL (se o FTS não estiver desativado, se um possível vetor de ataque for detectado e / ou a presença ou ocorrência de outros fatores que facilitam a exploração vulnerabilidades).


Este, aliás, não é o primeiro erro do tipo overflow e saturação de buffer no SQLite especificamente e no módulo FTS em particular (por exemplo [56be976859294027] ), mas é provavelmente o maior de seu tipo em significado, impacto teórico e "escala" relativa nas formas de aplicação e avaliação possíveis das consequências disso.

Source: https://habr.com/ru/post/pt433596/


All Articles