El equipo de Trail of Bits ha reportado recientemente una vulnerabilidad clasificada como de alta gravedad que afecta a la base de datos SQLite. Al parecer, la vulnerabilidad se introdujo junto con una actualización del código en octubre de 2000. Registrada como CVE-2022-35737, los atacantes podrían explotarla para bloquear o controlar programas.
Esta vulnerabilidad ha pasado desapercibida desde octubre de 2000, momento en el que se actualizó el software afectado. Su puntuación CVSS es de 7,5, suponiendo un nivel de riesgo elevado. No obstante, en la página oficial de la base de datos nacional de vulnerabilidades del NIST, en la fecha de redacción de este artículo, se mostraba un mensaje de aviso de que la vulnerabilidad se hallaba bajo reanálisis.
Las versiones afectadas por la vulnerabilidad CVE-2022-35737 son de la SQLite 1.0.12 a la 3.39.1, siendo parcheada en la versión 3.39.2 lanzada el 21 de julio de 2022. Además, los sistemas explotables son aquellos de 64 bits y depende de la forma en la que se compile el software, según informa el equipo de investigadores de Trail of Bits.
Al parecer, la explotabilidad de la vulnerabilidad depende fuertemente de la presencia de las «stack canaries», o cookies de seguridad. Estas cookies son valores que se agregan a los binarios durante su compilación para proteger valores críticos de pila, como el puntero de retorno, previniendo ataques de desbordamiento de búfer. De momento se ha confirmado la posibilidad de ejecutar código arbitrario solo cuando se omiten. Sin embargo, el equipo de investigadores verificó la posibilidad de realizar ataques DoS tanto si estaban presentes como si no.
Explotación de la vulnerabilidad SQLite
Según describe el equipo investigador, la presente vulnerabilidad está relacionada con un error de desbordamiento de enteros. Este error se produce cuando las entradas de cadenas extremadamente largas se pasan como parámetros a las implementaciones de SQLite de la familia de funciones printf. Por su parte, estas funciones hacen uso de otra función para manejar el formato de cadenas: «sqlite3_str_vappendf».
Para poder explotar la vulnerabilidad es necesario como requisito previo que la cadena contenga los tipos de sustitución de formato «%Q», «%q» o «%w», para que se pueda provocar un bloqueo del programa cuando los datos controlados por el usuario se escriban más allá de los límites del búfer asignado. Y para conseguir la ejecución de código arbitrario, el cadena de formato debe contener el carácter especial «!».
Un poco de historia
Recordamos que SQLite, que está programado en C, es el motor de base de datos más utilizado. Además, está incluido de forma predeterminada en Android, iOS, Windows y macOS, así como en navegadores web populares como Google Chrome, Mozilla Firefox y Apple Safari.
Hay que tener en cuenta que la explotación requiere de un escenario que resultaba impensable hace bastantes años, ya que requiere de cadenas de entrada de cerca del gigabyte, pero que se tornó factible con la llegada de los sistemas de 64 bits. Por lo tanto, lo más seguro es que en el momento de redactar el código (hace más de 20 años), con arquitecturas principalmente de 32 bits, no se concibiera que fuese explotable esta situación.
Fuente: https://unaaldia.hispasec.com/2022/10/reportada-vulnerabilidad-grave-que-afecta-a-sqlite.html