{"id":28057,"date":"2022-11-08T12:38:57","date_gmt":"2022-11-08T10:38:57","guid":{"rendered":"https:\/\/www.kaspersky.es\/blog\/?p=28057"},"modified":"2022-11-08T12:38:57","modified_gmt":"2022-11-08T10:38:57","slug":"sqlite-vulnerability-22yo","status":"publish","type":"post","link":"https:\/\/www.kaspersky.es\/blog\/sqlite-vulnerability-22yo\/28057\/","title":{"rendered":"Las consecuencias de una vulnerabilidad de 22 a\u00f1os en SQLite"},"content":{"rendered":"<p>El pasado octubre, los investigadores de Trail of Bits <a href=\"https:\/\/blog.trailofbits.com\/2022\/10\/25\/sqlite-vulnerability-july-2022-library-api\/\" target=\"_blank\" rel=\"noopener nofollow\">publicaron<\/a> un an\u00e1lisis detallado sobre una vulnerabilidad en SQLite DBMS. Este art\u00edculo mencionaba los posibles ataques que podr\u00edan haberse producido mediante la <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-35737\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2022-35737<\/a>, cuyas consecuencias abarcaban desde la simple ca\u00edda de una aplicaci\u00f3n hasta la ejecuci\u00f3n de c\u00f3digo arbitrario. Este fallo bastante trivial en el c\u00f3digo SQLite resulta interesante y potencialmente peligroso por dos razones. En primer lugar, lleva en SQLite desde octubre del 2000, es decir, pr\u00e1cticamente desde el principio del desarrollo de este software de c\u00f3digo abierto y, en segundo lugar, las funciones de SQLite permiten el ataque a una gran variedad de programas que trabajan con este sistema.<\/p>\n<h2>Las funciones de SQLite<\/h2>\n<p>SQLite es un <a href=\"https:\/\/es.wikipedia.org\/wiki\/Base_de_datos\" target=\"_blank\" rel=\"noopener nofollow\">sistema de gesti\u00f3n de bases de datos<\/a> (DBMS) compacto, de c\u00f3digo abierto y embebido que se lanz\u00f3 hace 22 a\u00f1os (en agosto del 2000). De esta definici\u00f3n, el concepto \u201cembebido\u201d es la clave. Es decir, SQLite no se instala como un software independiente, sino que se usa como una biblioteca para los desarrolladores de software que tienen que trabajar con bases de datos. Por ejemplo, SQLite est\u00e1 integrado de forma predeterminada en los navegadores Google Chrome, Firefox y Safari, Android, las aplicaciones de red y muchos paquetes de lanzamiento de sistemas operativos basados en el <em>kernel<\/em> de Linux. SQLite adquiri\u00f3 su popularidad dada su licencia abierta, su confianza y su\u2026 seguridad: aunque ya se han encontrado unos cuantos fallos graves en el c\u00f3digo de este DBMS.<\/p>\n<h2>La CVE-2022-35737 en detalle<\/h2>\n<p>Unos expertos han detectado un fallo en el c\u00f3digo de la funci\u00f3n <em>sqlite3_snprintf<\/em>, que se usa para interactuar con la base de datos en programas escritos en C\/C++. Si pasas una entrada con una cadena de caracteres muy grande (m\u00e1s de 2 GB) a esa funci\u00f3n, el programa se bloquear\u00e1, permitiendo un ataque de denegaci\u00f3n de servicio (DoS). En el c\u00f3digo <em>sqlite3_snprintf<\/em>, se ha usado una variable completa para calcular el tama\u00f1o de la cadena. Si la cadena de caracteres es demasiado grande, la variable puede tomar un valor negativo, esto hace que se asigne un b\u00fafer de memoria demasiado peque\u00f1o para escribir la cadena recibida, generando un fallo de desbordamiento de b\u00fafer com\u00fan.<\/p>\n<p>Lo m\u00e1s probable es que el fallo se introdujera en el c\u00f3digo hace 22 a\u00f1os, cuando no era com\u00fan pasar gigabytes de par\u00e1metros de funci\u00f3n debido a las limitaciones de recursos de la \u00e9poca. Pero ya no es el caso. Otro punto de inter\u00e9s en el informe de Trail of Bits es una suposici\u00f3n acerca de por qu\u00e9 se pas\u00f3 por alto dicho fallo durante la prueba de c\u00f3digo est\u00e1ndar. El procedimiento de prueba tiene como objetivo principal comprobar el c\u00f3digo reci\u00e9n a\u00f1adido o modificado, pero aqu\u00ed el c\u00f3digo no se ha cambiado en m\u00e1s de dos d\u00e9cadas. Es bastante dif\u00edcil detectar tales vulnerabilidades con la t\u00e9cnica <em>fuzzing<\/em>, que alimenta par\u00e1metros aleatorios como entradas de funciones, ya que los m\u00e9todos comunes de <em>fuzzing<\/em> no implican la generaci\u00f3n de cadenas tan pesadas. Los autores de la investigaci\u00f3n concluyen que esta t\u00e9cnica no puede reemplazar por completo el an\u00e1lisis de c\u00f3digo est\u00e1tico, incluido el manual.<\/p>\n<h2>Unas conclusiones algo difusas<\/h2>\n<p>Trail of Bits pudo \u201cmodernizar\u201d el ataque DoS original para ejecutar c\u00f3digo arbitrario manipulando minuciosamente el contenido y el tama\u00f1o del par\u00e1metro pasado. Aunque los autores del art\u00edculo han <a href=\"https:\/\/github.com\/trailofbits\/publications\/tree\/master\/disclosures\/CVE-2022-35737\" target=\"_blank\" rel=\"noopener nofollow\">mostrado<\/a> una prueba de concepto funcional con ejemplos de ataques, se trata de un ejercicio puramente te\u00f3rico contra el propio SQLite. Sin embargo, como ya hemos mencionado anteriormente, SQLite es un DBMS embebido, por lo que, para causar da\u00f1os reales, alguien deber\u00eda atacar una aplicaci\u00f3n con c\u00f3digo SQLite embebido.<\/p>\n<p>Lo cierto es que hay bastantes suposiciones en la investigaci\u00f3n y a\u00fan no se ha probado la posibilidad de explotar la vulnerabilidad. Adem\u00e1s, hay otras limitaciones. Seg\u00fan los datos de los desarrolladores de SQLite, el fallo solo es relevante para la interfaz de las aplicaciones C, y solo si el c\u00f3digo se compila con ciertos par\u00e1metros. Los propios investigadores de Trail of Bits se\u00f1alan la imposibilidad de un ataque si SQLite se ha compilado utilizando una <em>cookie<\/em> de seguridad (<em>stack canaries <\/em>en ingl\u00e9s<em>)<\/em>, un m\u00e9todo adicional de protecci\u00f3n contra ataques de desbordamiento de b\u00fafer que evita la ejecuci\u00f3n de c\u00f3digo arbitrario incluso cuando el desbordamiento es posible.<\/p>\n<p>La vulnerabilidad se cerr\u00f3 con SQLite 3.39.2, <a href=\"https:\/\/www.sqlite.org\/releaselog\/3_39_2.html\" target=\"_blank\" rel=\"noopener nofollow\">lanzado<\/a> en julio del 2022. Sin embargo, el parche ha tenido poco efecto. Los desarrolladores de software que utilizan SQLite como parte de su propio c\u00f3digo probablemente tengan que actualizar y distribuir una nueva versi\u00f3n del software. Hasta entonces, la vulnerabilidad seguir\u00e1 ah\u00ed. Por no hablar de los muchos programas con SQLite que han dejado de actualizarse.<\/p>\n<p>Todav\u00eda no queda claro el nivel de peligrosidad de esta vulnerabilidad o si se puede explotar en la pr\u00e1ctica. A juzgar por la definici\u00f3n de los desarrolladores de SQLite, la posibilidad de un ataque real es remota, pero no nula. Mientras tanto, este fallo se a\u00f1ade a la <a href=\"https:\/\/www.kaspersky.es\/blog\/tarfile-15-year-old-vulnerability\/27821\/\" target=\"_blank\" rel=\"noopener\">colecci\u00f3n<\/a> de defectos de larga duraci\u00f3n que perturba la tranquilidad de los desarrolladores de software.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"kesb-top3\">\n","protected":false},"excerpt":{"rendered":"<p>Un fallo interesante en uno de los DBMS embebidos m\u00e1s populares.<\/p>\n","protected":false},"author":665,"featured_media":28058,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2202,2754],"tags":[1474,27,784],"class_list":{"0":"post-28057","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"tag-desarrollo","10":"tag-sql","11":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/sqlite-vulnerability-22yo\/28057\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/sqlite-vulnerability-22yo\/24829\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/sqlite-vulnerability-22yo\/20329\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/sqlite-vulnerability-22yo\/27364\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/sqlite-vulnerability-22yo\/25166\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/sqlite-vulnerability-22yo\/25501\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/sqlite-vulnerability-22yo\/34205\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/sqlite-vulnerability-22yo\/46029\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/sqlite-vulnerability-22yo\/19702\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/sqlite-vulnerability-22yo\/20389\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/sqlite-vulnerability-22yo\/29474\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/sqlite-vulnerability-22yo\/25570\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/sqlite-vulnerability-22yo\/31214\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/sqlite-vulnerability-22yo\/30921\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.es\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/28057","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/comments?post=28057"}],"version-history":[{"count":2,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/28057\/revisions"}],"predecessor-version":[{"id":28060,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/28057\/revisions\/28060"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/media\/28058"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/media?parent=28057"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/categories?post=28057"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/tags?post=28057"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}