Los expertos de Trail of Bits han detectado una vulnerabilidad que afecta a la base de datos SQLite y que lleva activa desde octubre del año 2000. Clasificada como grave, los ciberdelincuentes podrían explotarla para bloquear o controlar programas.
Registrada como CVE-2022-35737, esta vulnerabilidad de alta gravedad se localiza en la biblioteca de la base de datos SQLite. Se trata del motor de base de datos más utilizado ya que se incluye de forma predeterminada en Android, iOS, Windows y macOS, así como en navegadores web como Google Chrome, Mozilla Firefox y Apple Safari.
Según los expertos, esta vulnerabilidad se introdujo como parte de un cambio de código hace ya 20 años y afecta a las versiones de SQLite que van de la 1.0.12 a la 3.39.1, lanzada el pasado mes de julio.
Aunque ha conseguido pasar desapercibida durante todos estos años, ha sido finalmente en la versión 3.39.2, lanzada el 21 de julio, cuando se parcheó esta vulnerabilidad. Con capacidad para bloquear y tomar el control de programas, los sistemas en los que podía explotarse son los de 64 bits, en función de cómo se compile el software.
El equipo de investigadores señala que las posibilidades de que pudiera explotarse esta vulnerabilidad depende de las cookies de seguridad, ya que son valores que se añaden a los binarios cuando se compilan para proteger valores críticos de pila.
No obstante, se ha confirmado la posibilidad de ejecutar código arbitrario cuando se omiten estas cookies, si bien los expertos señalan la posibilidad de llevar a cabo ataques de denegación de servicio (DoS) tanto si están presentes como si no.
Así funcionaba la vulnerabilidad en SQLite
La vulnerabilidad descubierta por Trail of Bits se refiere a un error de desbordamiento de enteros. Esta situación se produce cuando las entradas de cadenas extremadamente largas se pasan como parámetros a las implementaciones de SQLite de las funciones printf, que a su vez, utilizan otra función para manejar el formato de cadenas («sqlite3_str_vappendf»).
Para poder explotar la vulnerabilidad es necesario 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, la cadena de formato debe contener el carácter especial «!», aunque también puede hacer que el programa se quede colgado y se repita indefinidamente.
No obstante, los expertos destacan que, debido a la antigüedad de esta vulnerabilidad, es posible que, en aquel momento, fuera impensable que pudiera darse esta situación y de ahí que haya persistido. Hace 20 años, cuando reinaban las arquitecturas de 32 bits, no se pensaba que hubiera cadenas de entrada de 1 GB, algo que, con la llegada de los sistemas de 64 bits, se hizo realidad.
Pese a este error, ahora detectado, los usuarios pueden actualizar sus sistemas para disponer de la última versión en la que está solventada esta vulnerabilidad.