Pesquisadores da Check Point
Para um ataque bem-sucedido é necessário poder modificar os arquivos de banco de dados das aplicações atacadas, o que limita o método a ataques a aplicações que utilizam o banco de dados SQLite como formato para trânsito e entrada de dados. O método também pode ser usado para expandir o acesso local existente, por exemplo, para integrar backdoors ocultos em aplicativos usados, bem como para contornar mecanismos de segurança ao analisar malware por pesquisadores de segurança. A operação após a substituição do arquivo é realizada no momento em que a aplicação executa a primeira consulta SELECT em uma tabela do banco de dados modificado.
Como exemplo, demonstramos a capacidade de executar código no iOS ao abrir um catálogo de endereços, o arquivo com o banco de dados “AddressBook.sqlitedb” foi modificado utilizando o método proposto. O ataque usou uma vulnerabilidade na função fts3_tokenizer (CVE-2019-8602, capacidade de desreferência de ponteiro), corrigida na atualização SQLite 2.28 de abril, junto com outra
O método de ataque baseia-se na utilização de duas técnicas “Query Hijacking” e “Query Oriented Programming”, que permitem explorar problemas arbitrários que levam à corrupção de memória no motor SQLite. A essência do “Query Hijacking” é substituir o conteúdo do campo “sql” na tabela de serviço sqlite_master, que determina a estrutura do banco de dados. O campo especificado contém um bloco DDL (Data Definition Language) usado para descrever a estrutura dos objetos no banco de dados. A descrição é especificada usando a sintaxe SQL padrão, ou seja, a construção “CREATE TABLE” é usada,
que é executado durante o processo de inicialização do banco de dados (durante a primeira inicialização
funções sqlite3LocateTable para criar estruturas internas relacionadas à tabela na memória.
A ideia é que, ao substituir “CREATE TABLE” por “CREATE VIEW”, seja possível controlar qualquer acesso ao banco de dados definindo sua própria visão. Usando "CREATE VIEW" uma operação "SELECT" é vinculada à tabela, que será chamada em vez de "CREATE TABLE" e permite acessar diferentes partes do interpretador SQLite. A seguir, o método mais simples de ataque seria chamar a função “load_extension”, que permite carregar uma biblioteca arbitrária com uma extensão, mas esta função está desabilitada por padrão.
Para realizar um ataque quando é possível realizar a operação “SELECT”, é proposta a técnica “Query Oriented Programming”, que permite explorar problemas no SQLite que levam à corrupção de memória. A técnica lembra a programação orientada a retorno (
Fonte: opennet.ru