Fue descubierta una nueva técnica para explotar vulnerabilidades en SQLite
Los investigadores de Check Point revelaron recientemente en la conferencia DEF CON los detalles de una nueva técnica que fue descubierta, esta es utilizada para atacar aplicaciones que usan versiones vulnerables de SQLite.
El método Check Point considera los archivos de base de datos como una oportunidad para integrar escenarios de explotación de vulnerabilidades en varios subsistemas SQLite internos que no son accesibles para la explotación de la frente. Los investigadores también prepararon una técnica para explotar vulnerabilidades con codificación de exploits en forma de una cadena de consultas SELECT en una base de datos SQLite, que permite evitar ASLR.
Sobre la vulnerabilidad
Los investigadores de Check Point detallan que para un ataque exitoso, un atacante debe poder modificar los archivos de la base de datos de las aplicaciones atacadas, lo que limita el método para atacar aplicaciones que usan bases de datos SQLite como formato para el tránsito y los datos de entrada.
Aun que también dan a conocer que el método también se puede utilizar para expandir el acceso local ya obtenido, por ejemplo, para integrar puertas traseras ocultas en las aplicaciones utilizadas, así como para evitar a los investigadores de seguridad al analizar malware.
La operación después de la suplantación de archivos se realiza en el momento en que la aplicación ejecuta la primera solicitud SELECT a la tabla en la base de datos modificada.
Como ejemplo, se demostró la capacidad de ejecutar código en iOS al abrir la libreta de direcciones, el archivo con la base de datos “AddressBook.sqlitedb” que se modificó utilizando el método propuesto.
Para el ataque, se utilizó una vulnerabilidad en la función fts3_tokenizer (CVE-2019-8602, la capacidad de desreferenciar un puntero), corregida en la actualización SQLite 2.28 de abril, junto con otra vulnerabilidad en la implementación de funciones de ventana.
Además, demuestra el uso del método para la incautación a control remoto de un servidor backend de atacantes escrito en PHP, que acumula contraseñas interceptadas durante la operación de código malicioso (las contraseñas interceptadas se transfirieron en forma de una base de datos SQLite).
El método de ataque se basa en el uso de dos técnicas, Query Hijacking y Query Oriented Programming, que permiten explotar problemas arbitrarios que conducen a la corrupción de la memoria en el motor SQLite.
La esencia del “Secuestro de consultas” está en reemplazar el contenido del campo “sql” en la tabla de servicio sqlite_master que define la estructura de la base de datos. El campo especificado contiene el bloque DDL (Lenguaje de definición de datos) utilizado para describir la estructura de los objetos en la base de datos.
La descripción se establece utilizando la sintaxis SQL normal, es decir. se utiliza la construcción “CREATE TABLE”, que se realiza durante la inicialización de la base de datos (durante la primera ejecución de la función sqlite3LocateTable) para crear estructuras internas asociadas con la tabla en la memoria.
La idea es que, como resultado de reemplazar “CREATE TABLE” y “CREATE VIEW, sea posible controlar cualquier acceso a la base de datos a través de la definición de su vista.
Por su parte usando el comando “CREATE VIEW”, se adjunta una operación “SELECT” a la tabla, que se llamará en lugar de “CREATE TABLE” y le permite al atacante poder acceder a varias partes del intérprete de SQLite.
Además de esto, la forma más fácil de atacar sería llamar a la función “load_extension”, que le permite al atacante poder cargar una biblioteca arbitraria con la extensión, pero esta función está deshabilitada de manera predeterminada.
Para realizar un ataque bajo las condiciones de la posibilidad de realizar la operación SELECCIONAR, se propuso la técnica de programación orientada a la consulta, que permite explotar problemas en SQLite que conducen a la corrupción de la memoria.
La técnica recuerda a la Programación Orientada al Retorno ( ROP ), pero utiliza fragmentos de código de máquina no existentes, pero se inserta en un conjunto de subconsultas dentro de SELECT para construir una cadena de llamadas (“gadgets”).
Fuente: https://threatpost.com/