{"id":20389,"date":"2022-12-02T15:36:15","date_gmt":"2022-12-02T18:36:15","guid":{"rendered":"https:\/\/www.kaspersky.com.br\/blog\/?p=20389"},"modified":"2022-12-02T15:36:15","modified_gmt":"2022-12-02T18:36:15","slug":"sqlite-vulnerability-22yo","status":"publish","type":"post","link":"https:\/\/www.kaspersky.com.br\/blog\/sqlite-vulnerability-22yo\/20389\/","title":{"rendered":"As consequ\u00eancias de uma antiga vulnerabilidade SQLite"},"content":{"rendered":"<p>Em outubro de 2022, pesquisadores da Trail of Bits <a href=\"https:\/\/blog.trailofbits.com\/2022\/10\/25\/sqlite-vulnerability-july-2022-library-api\/\" target=\"_blank\" rel=\"noopener nofollow\">publicaram<\/a> uma an\u00e1lise detalhada de uma vulnerabilidade do SQLite DBMS. O artigo discute poss\u00edveis ataques via <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-35737\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2022-35737<\/a>, com consequ\u00eancias que v\u00e3o desde uma simples falha de aplicativo at\u00e9 a execu\u00e7\u00e3o arbitr\u00e1ria de c\u00f3digo. O bug bastante trivial no c\u00f3digo SQLite \u00e9 interessante e potencialmente perigoso por dois motivos. Em primeiro lugar, est\u00e1 no SQLite desde outubro de 2000 \u2013 quase desde o in\u00edcio do desenvolvimento deste software de c\u00f3digo aberto. Em segundo lugar, os recursos do SQLite tornam teoricamente poss\u00edvel atacar uma ampla gama de programas com SQLite dentro deles.<\/p>\n<h2>Recursos SQLite<\/h2>\n<p>SQLite \u00e9 um <a href=\"https:\/\/pt.wikipedia.org\/wiki\/Sistema_de_gerenciamento_de_banco_de_dados\" target=\"_blank\" rel=\"noopener nofollow\">DBMS<\/a> compacto, de c\u00f3digo aberto e embedado \u2013 lan\u00e7ado pela primeira vez h\u00e1 22 anos (em agosto de 2000). \u201cEmbedado\u201d \u00e9 a defini\u00e7\u00e3o chave aqui. SQLite n\u00e3o \u00e9 instalado como software separado. Em vez disso, \u00e9 usado como uma biblioteca para desenvolvedores de software que precisam trabalhar com bancos de dados. O SQLite est\u00e1 integrado por padr\u00e3o, por exemplo: nos navegadores Google Chrome, Firefox e Safari; Android; aplicativos de rede; e muitos pacotes de lan\u00e7amento de sistemas operacionais baseados no kernel Linux. O SQLite ganhou popularidade por sua licen\u00e7a aberta, confiabilidade e\u2026 seguran\u00e7a: poucas falhas graves foram encontradas no c\u00f3digo do DBMS at\u00e9 agora.<\/p>\n<h2>Detalhes da CVE-2022-35737<\/h2>\n<p>Especialistas detectaram um bug no c\u00f3digo da fun\u00e7\u00e3o sqlite3_snprintf, que \u00e9 usada para interagir com o banco de dados em programas escritos em C\/C++. Se voc\u00ea passar uma entrada de string muito grande (mais de 2 GB) para essa fun\u00e7\u00e3o, isso far\u00e1 com que o programa trave; ou seja, um ataque de nega\u00e7\u00e3o de servi\u00e7o (DoS) torna-se poss\u00edvel. No c\u00f3digo sqlite3_snprintf, uma vari\u00e1vel inteira foi usada para calcular o tamanho do string. Se o string passado for muito grande, a vari\u00e1vel pode ter um valor negativo. Isso faz com que um buffer de mem\u00f3ria a ser alocado seja muito pequeno para gravar o string recebido. Ocorre um erro de overflow de buffer.<\/p>\n<p>O erro provavelmente foi inserido no c\u00f3digo h\u00e1 22 anos, j\u00e1 que a passagem de gigabytes de par\u00e2metros de fun\u00e7\u00e3o era improv\u00e1vel devido \u00e0s limita\u00e7\u00f5es de recursos da \u00e9poca. Este n\u00e3o \u00e9 mais o caso. Um ponto de interesse separado no relat\u00f3rio Trail of Bits \u00e9 uma suposi\u00e7\u00e3o sobre porque esse erro foi perdido durante o teste de c\u00f3digo padr\u00e3o. O procedimento de teste visa principalmente verificar o c\u00f3digo rec\u00e9m-adicionado ou modificado, enquanto o c\u00f3digo aqui n\u00e3o foi alterado em mais de duas d\u00e9cadas. \u00c9 muito dif\u00edcil detectar essas vulnerabilidades com fuzzing \u2013 que est\u00e1 alimentando par\u00e2metros aleat\u00f3rios como entradas de fun\u00e7\u00e3o. Os m\u00e9todos comuns de fuzzing n\u00e3o envolvem a gera\u00e7\u00e3o de strings de tamanho t\u00e3o grande. Os autores da pesquisa concluem que o fuzzing n\u00e3o pode substituir totalmente a an\u00e1lise est\u00e1tica de c\u00f3digo, incluindo a realizada manualmente.<\/p>\n<h2>Implica\u00e7\u00f5es nebulosas<\/h2>\n<p>O Trail of Bits foi capaz de \u201cmodernizar\u201d o ataque DoS original para que pudesse executar c\u00f3digo arbitr\u00e1rio manipulando cuidadosamente o conte\u00fado e o tamanho do par\u00e2metro passado. Embora os autores do artigo tenham <a href=\"https:\/\/github.com\/trailofbits\/publications\/tree\/master\/disclosures\/CVE-2022-35737\" target=\"_blank\" rel=\"noopener nofollow\">mostrado<\/a> uma prova de conceito funcional demonstrando exemplos de ataques, esses s\u00e3o um exerc\u00edcio puramente te\u00f3rico de atacar o pr\u00f3prio SQLite. No entanto, como mencionado acima, o SQLite \u00e9 um DBMS embedado, portanto, para causar danos reais, algu\u00e9m precisaria atacar um aplicativo com c\u00f3digo SQLite incorporado.<\/p>\n<p>Acontece que h\u00e1 muitas suposi\u00e7\u00f5es na pesquisa, e a possibilidade pr\u00e1tica de realmente explorar a vulnerabilidade ainda n\u00e3o foi comprovada. Existem outras limita\u00e7\u00f5es. De acordo com <a href=\"https:\/\/www.sqlite.org\/cves.html\" target=\"_blank\" rel=\"noopener nofollow\">dados<\/a> dos desenvolvedores do SQLite, o bug \u00e9 relevante apenas para a interface de aplicativos C e somente se o c\u00f3digo for compilado com determinados par\u00e2metros. Os pr\u00f3prios pesquisadores do Trail of Bits apontam para a impossibilidade de um ataque se o SQLite foi compilado usando <em>stack canaries<\/em>. Esse \u00e9, essencialmente, um m\u00e9todo adicional de prote\u00e7\u00e3o contra os ataques de overflow de buffer \u2013 impedindo a execu\u00e7\u00e3o de c\u00f3digo arbitr\u00e1rio mesmo quando o overflow em si \u00e9 poss\u00edvel.<\/p>\n<p>A vulnerabilidade foi resolvida no SQLite 3.39.2, <a href=\"https:\/\/www.sqlite.org\/releaselog\/3_39_2.html\" target=\"_blank\" rel=\"noopener nofollow\">lan\u00e7ado<\/a> em julho de 2022. No entanto, a patch teve pouco efeito. Os desenvolvedores de software que usam o SQLite como parte de seu pr\u00f3prio c\u00f3digo provavelmente ter\u00e3o que atualizar seus c\u00f3digos e distribuir uma nova vers\u00e3o do software. At\u00e9 ent\u00e3o, a vulnerabilidade permanecer\u00e1 l\u00e1. E n\u00e3o esque\u00e7a que muitos programas utilizando o SQLite n\u00e3o s\u00e3o mais suportados.<\/p>\n<p>Ainda n\u00e3o est\u00e1 claro o quanto essa vulnerabilidade \u00e9 perigosa \u2013 ou se pode ser explorada na pr\u00e1tica. A julgar pela defini\u00e7\u00e3o dos desenvolvedores do SQLite, a chance de um ataque real \u00e9 pequena \u2013 mas n\u00e3o zero. Enquanto isso, o bug foi adicionado \u00e0 <a href=\"https:\/\/www.kaspersky.com.br\/blog\/tarfile-15-year-old-vulnerability\/20133\/\" target=\"_blank\" rel=\"noopener\">cole\u00e7\u00e3o<\/a> de defeitos de longa dura\u00e7\u00e3o que podem causar dores de cabe\u00e7a para desenvolvedores de software.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"kesb-gartner\">\n","protected":false},"excerpt":{"rendered":"<p>Um bug interessante em um dos DBMS embutidos mais populares.<\/p>\n","protected":false},"author":665,"featured_media":20390,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1119,1655,1656],"tags":[2842,27,267],"class_list":{"0":"post-20389","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-desenvolvimento","11":"tag-sql","12":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/sqlite-vulnerability-22yo\/20389\/"},{"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":"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":"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.com.br\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/comments?post=20389"}],"version-history":[{"count":2,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20389\/revisions"}],"predecessor-version":[{"id":20392,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20389\/revisions\/20392"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media\/20390"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media?parent=20389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/categories?post=20389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/tags?post=20389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}