Investigadores de Check Point
Para un ataque exitoso, é necesario poder modificar os ficheiros da base de datos das aplicacións atacadas, o que limita o método aos ataques a aplicacións que utilizan a base de datos SQLite como formato de tránsito e datos de entrada. O método tamén se pode usar para ampliar o acceso local existente, por exemplo, para integrar portas traseiras ocultas nas aplicacións usadas, así como para evitar os mecanismos de seguridade ao analizar software malicioso por parte dos investigadores de seguridade. A operación despois da substitución de ficheiros realízase no momento en que a aplicación executa a primeira consulta SELECT contra unha táboa da base de datos modificada.
Como exemplo, demostramos a capacidade de executar código en iOS ao abrir unha axenda de enderezos, o ficheiro coa base de datos "AddressBook.sqlitedb" foi modificado mediante o método proposto. O ataque utilizou unha vulnerabilidade na función fts3_tokenizer (CVE-2019-8602, capacidade de desreferencia do punteiro), corrixida na actualización SQLite 2.28 de abril, xunto con outra
O método de ataque baséase no uso de dúas técnicas "Secuestro de consultas" e "Programación orientada a consultas", que permiten explotar problemas arbitrarios que conducen á corrupción da memoria no motor SQLite. A esencia do "Secuestro de consultas" é substituír o contido do campo "sql" na táboa de servizos sqlite_master, que determina a estrutura da base de datos. O campo especificado contén un bloque DDL (Data Definition Language) usado para describir a estrutura dos obxectos da base de datos. A descrición especifícase mediante a sintaxe SQL estándar, é dicir. utilízase a construción "CREATE TABLE",
que se executa durante o proceso de inicialización da base de datos (durante o primeiro lanzamento
sqlite3LocateTable funcións para crear estruturas internas relacionadas coa táboa na memoria.
A idea é que, como resultado de substituír “CREATE TABLE” por “CREATE VIEW”, sexa posible controlar calquera acceso á base de datos definindo a súa propia vista. Usando "CREATE VIEW" unha operación "SELECT" está ligada á táboa, que se chamará en lugar de "CREATE TABLE" e permítelle acceder a diferentes partes do intérprete SQLite. A continuación, o método máis sinxelo de ataque sería chamar á función "load_extension", que permite cargar unha biblioteca arbitraria cunha extensión, pero esta función está desactivada por defecto.
Para realizar un ataque cando é posible realizar a operación “SELECT”, proponse a técnica de “Programación Orientada a Consultas”, que permite explotar problemas en SQLite que dan lugar á corrupción da memoria. A técnica lembra a programación orientada ao retorno (
Fonte: opennet.ru