{"id":25501,"date":"2022-11-09T20:51:01","date_gmt":"2022-11-10T02:51:01","guid":{"rendered":"https:\/\/latam.kaspersky.com\/blog\/?p=25501"},"modified":"2022-11-09T20:51:01","modified_gmt":"2022-11-10T02:51:01","slug":"sqlite-vulnerability-22yo","status":"publish","type":"post","link":"https:\/\/latam.kaspersky.com\/blog\/sqlite-vulnerability-22yo\/25501\/","title":{"rendered":"Una vulnerabilidad y sus consecuencias tras 22 a\u00f1os en SQLite"},"content":{"rendered":"<p>En octubre pasado, 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 detallado an\u00e1lisis sobre una vulnerabilidad en SQLite DBMS. En este mencionaban 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 van desde la simple ca\u00edda de una aplicaci\u00f3n hasta la ejecuci\u00f3n de c\u00f3digo arbitrario. Este error, que es bastante trivial en el c\u00f3digo SQLite, resulta interesante y potencialmente peligroso por dos razones. La primera, lleva en SQLite desde octubre del 2000, es decir, pr\u00e1cticamente desde el principio del desarrollo de este software de c\u00f3digo abierto y, segunda, las funciones de SQLite posibilitan el ataque a una gran variedad de programas que trabajan con dicho sistema.<\/p>\n<h2>Las funcionalidades 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 fue lanzado hace 22 a\u00f1os (en agosto del 2000). De esta definici\u00f3n, el concepto \u201cembebido\u201d es la clave. O O sea, SQLite no se instala como un software independiente, sino que los desarrolladores de software que tienen que trabajar con bases de datos la utilizan como una biblioteca. Por ejemplo, SQLite viene de manera 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 se volvi\u00f3 popular gracias a licencia abierta, su confianza y su\u2026 seguridad: aunque ya se descubrieron varios errores graves en el c\u00f3digo de este DBMS.<\/p>\n<h2>La CVE-2022-35737 a detalle<\/h2>\n<p>Unos expertos han detectado un fallo en el c\u00f3digo de la funci\u00f3n <em>sqlite3_snprintf<\/em>, que se utiliza 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 utiliza toda una variable completa para calcular el tama\u00f1o de la cadena. Si dicha cadena de caracteres es muy grande, la variable puede tomar un valor negativo, lo 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 este fallo se introdujera hace 22 a\u00f1os en el c\u00f3digo, cuando no era com\u00fan pasar gigabytes de par\u00e1metros de funci\u00f3n debido a las limitaciones de recursos de la \u00e9poca. Pero este ya no es el caso. Otro punto interesante del informe de Trail of Bits es una suposici\u00f3n acerca de por qu\u00e9 se ignor\u00f3 dicho fallo durante la prueba de c\u00f3digo est\u00e1ndar. El objetivo principal del procedimiento de prueba es 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. Detectar tales vulnerabilidades con la t\u00e9cnica <em>fuzzing<\/em>, que alimenta par\u00e1metros aleatorios como entradas de funciones, es muy complicado, ya que los m\u00e9todos comunes de <em>fuzzing<\/em> no implican la generaci\u00f3n de cadenas tan pesadas. La conclusi\u00f3n de los autores de la investigaci\u00f3n es que esta t\u00e9cnica no puede reemplazar el an\u00e1lisis de c\u00f3digo est\u00e1tico por completo, 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 meramente te\u00f3rico contra el propio SQLite. No obstante, como ya dijimos, 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>La verdad es que en la investigaci\u00f3n hay bastantes suposiciones y todav\u00eda no se ha probado la posibilidad de explotar esta vulnerabilidad. Adem\u00e1s, existe otras limitantes. De acuerdo con los datos de los desarrolladores de SQLite, la falla solo importa 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 fue compilado mediante 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 efecto de este parche ha sido poco. Probablemente, los desarrolladores de software que usan SQLite como parte de su propio c\u00f3digo tengan que actualizar y distribuir una nueva versi\u00f3n del software. Hasta ese momento, la vulnerabilidad seguir\u00e1 ah\u00ed. Por no hablar de los muchos programas con SQLite que dejaron de actualizarse.<\/p>\n<p>A\u00fan 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 error se a\u00f1ade a la <a href=\"https:\/\/latam.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/25362\/\" target=\"_blank\" rel=\"noopener\">colecci\u00f3n<\/a> de defectos de larga duraci\u00f3n que perturbar 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>Una falla interesante en uno de los DBMS embebidos m\u00e1s populares.<\/p>\n","protected":false},"author":665,"featured_media":25502,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2795,3539,3540],"tags":[2216,5832,647],"class_list":{"0":"post-25501","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-desarrollo","11":"tag-sql","12":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/sqlite-vulnerability-22yo\/25501\/"},{"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","url":"https:\/\/www.kaspersky.es\/blog\/sqlite-vulnerability-22yo\/28057\/"},{"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:\/\/latam.kaspersky.com\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/25501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/comments?post=25501"}],"version-history":[{"count":1,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/25501\/revisions"}],"predecessor-version":[{"id":25503,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/25501\/revisions\/25503"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media\/25502"}],"wp:attachment":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media?parent=25501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/categories?post=25501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/tags?post=25501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}