{"id":20133,"date":"2022-10-17T10:38:38","date_gmt":"2022-10-17T13:38:38","guid":{"rendered":"https:\/\/www.kaspersky.com.br\/blog\/?p=20133"},"modified":"2022-10-17T10:38:38","modified_gmt":"2022-10-17T13:38:38","slug":"tarfile-15-year-old-vulnerability","status":"publish","type":"post","link":"https:\/\/www.kaspersky.com.br\/blog\/tarfile-15-year-old-vulnerability\/20133\/","title":{"rendered":"Os perigos das vulnerabilidades de 15 anos"},"content":{"rendered":"<p>Em setembro de 2022, a Trellix publicou um <a href=\"https:\/\/www.trellix.com\/en-us\/about\/newsroom\/stories\/research\/tarfile-exploiting-the-world.html\" target=\"_blank\" rel=\"noopener nofollow\">relat\u00f3rio<\/a> sobre uma vulnerabilidade no m\u00f3dulo <a href=\"https:\/\/docs.python.org\/3\/library\/tarfile.html#module-tarfile\" target=\"_blank\" rel=\"noopener nofollow\">tarfile<\/a>, que faz parte de uma biblioteca padr\u00e3o da linguagem de programa\u00e7\u00e3o Python e pode ser usada por qualquer pessoa. A vulnerabilidade permite que um arquivo seja gravado em uma pasta arbitr\u00e1ria no disco r\u00edgido e, em alguns casos, tamb\u00e9m permite a execu\u00e7\u00e3o de c\u00f3digos maliciosos. O que torna este estudo not\u00e1vel \u00e9 que o problema no tarfile foi <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">descoberto<\/a> em agosto de 2007 \u2013 h\u00e1 pouco mais de 15 anos! Mas naquela \u00e9poca n\u00e3o era considerado perigoso. Vamos descobrir por que n\u00e3o foi corrigido, o quanto pode ser perigoso e quais problemas os desenvolvedores Python e seus usu\u00e1rios podem enfrentar.<\/p>\n<h2>Tarfile em detalhes<\/h2>\n<p>Tarfile cont\u00e9m c\u00f3digo para trabalhar com arquivos <a href=\"https:\/\/en.wikipedia.org\/wiki\/Tar_(computing)\" target=\"_blank\" rel=\"noopener nofollow\">tar<\/a>. Este formato \u00e9 amplamente utilizado em sistemas operacionais semelhantes ao Unix, tra\u00e7ando sua hist\u00f3ria at\u00e9 1979. Tar \u00e9 uma maneira simples de embalar um grande n\u00famero de arquivos e pastas. Inicialmente foi usado para escrever backups em fita magn\u00e9tica. Hoje em dia, os arquivos tar podem usar compacta\u00e7\u00e3o de arquivos, embora isso seja opcional. O tarfile \u00e9 respons\u00e1vel pela cria\u00e7\u00e3o e desempacotamento desses arquivos, e os desenvolvedores python o usam como uma ferramenta para este tipo de tarefa.<\/p>\n<p>A vulnerabilidade no tarfile \u00e9 bastante simples. Foi descrito exaustivamente no relat\u00f3rio original do <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">bug<\/a> de agosto de 2007. N\u00e3o \u00e9 nem uma vulnerabilidade \u201ccl\u00e1ssica\u201d, \u00e9 que o tarfile recria a estrutura exata da pasta contida no arquivo quando est\u00e1 descompactada. Isso inclui casos em que o nome do arquivo \u00e9 algo como \u201c.. \/.. \/.. \/.. \/.. \/etc\/passwd\u201d. Se voc\u00ea desempacotar tal arquivo como um administrador de sistema, o arquivo passwd n\u00e3o ser\u00e1 escrito no diret\u00f3rio onde o arquivo em si est\u00e1 localizado. Ao passar pelo \u2026 \/ o programa respons\u00e1vel por restaurar os arquivos primeiro atinge o diret\u00f3rio root, em seguida, sobregrava o arquivo passwd no diret\u00f3rio \/etc. No Linux, isso significa apagar o arquivo regular mantendo os dados de todos os usu\u00e1rios do sistema.<\/p>\n<p>O perigo aqui \u00e9 que o usu\u00e1rio de um programa que emprega o m\u00f3dulo tarfile n\u00e3o sabe como termina o desempacotamento normal de um arquivo regular. Pode n\u00e3o haver nada, ou alguns arquivos podem aparecer em um lugar inesperado. Ou alguns arquivos de usu\u00e1rio podem ser substitu\u00eddos. O autor do relat\u00f3rio do bug menciona esse mesmo problema no pr\u00f3prio arquivador de piche, que foi corrigido em 2001 \u2013 h\u00e1 mais de 20 anos. Mas no tarfile a vulnerabilidade nunca foi fechada.<\/p>\n<h2>Uma espera de 15 anos<\/h2>\n<p>Ap\u00f3s uma <a href=\"https:\/\/bugs.python.org\/issue1044#msg55464\" target=\"_blank\" rel=\"noopener nofollow\">discuss\u00e3o sobre<\/a> o potencial bug em 2007, foi decidido\u2026 que nada deveria ser feito, por duas raz\u00f5es. Primeiro, esse processamento de arquivos est\u00e1 em total conformidade com o padr\u00e3o Unix POSIX (podemos confirmar isso). Segundo, \u201cn\u00e3o h\u00e1 possibilidade de explora\u00e7\u00e3o na pr\u00e1tica\u201d. Um aviso no guia do usu\u00e1rio de que n\u00e3o \u00e9 aconselh\u00e1vel descompactar arquivos de fontes n\u00e3o confi\u00e1veis usando tarfile foi considerado suficiente.<\/p>\n<p>Essa avalia\u00e7\u00e3o foi comprovadamente falsa em 2022, quando Trellix mostrou que a explora\u00e7\u00e3o na pr\u00e1tica \u00e9 mais do que poss\u00edvel. E n\u00e3o apenas para escrever dados onde voc\u00ea quiser, mas tamb\u00e9m para executar c\u00f3digo arbitr\u00e1rio. Lembre-se que esta \u00e9 uma biblioteca para programadores; \u00a0ou seja, a possibilidade de um ataque depende do software espec\u00edfico no qual o m\u00f3dulo tarfile \u00e9 usado. Trellix deu dois exemplos.<\/p>\n<div id=\"attachment_20134\" style=\"width: 1378px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-20134\" class=\"wp-image-20134 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/94\/2022\/10\/17102809\/tarfile-15-year-old-vulnerability-code.jpg\" alt='Trecho de c\u00f3digo vulner\u00e1vel no Universal Radio Hacker. &lt;a href=\"https:\/\/www.trellix.com\/en-us\/about\/newsroom\/stories\/research\/tarfile-exploiting-the-world.html\" target=\"_blank\"&gt;Fonte&lt;\/a&gt;.' width=\"1368\" height=\"444\"><p id=\"caption-attachment-20134\" class=\"wp-caption-text\">Trecho de c\u00f3digo vulner\u00e1vel no Universal Radio Hacker. <a href=\"https:\/\/www.trellix.com\/en-us\/about\/newsroom\/stories\/research\/tarfile-exploiting-the-world.html\" target=\"_blank\" rel=\"noopener nofollow\">Fonte<\/a>.<\/p><\/div>\n<p>O primeiro \u00e9 <a href=\"https:\/\/github.com\/jopohl\/urh\" target=\"_blank\" rel=\"noopener nofollow\">o Universal Radio Hacker<\/a>, um programa para analisar protocolos sem fio desconhecidos. O programa salva dados na forma de projetos, que consistem em v\u00e1rios arquivos tar. Os pesquisadores demonstraram como uma tentativa de abrir um arquivo pr\u00e9-feito resulta em um arquivo execut\u00e1vel sendo escrito no diret\u00f3rio execu\u00e7\u00e3o do Windows. Ent\u00e3o, da pr\u00f3xima vez que o sistema for reiniciado, este c\u00f3digo ser\u00e1 executado. Essa vulnerabilidade pode, entre outras coisas, ser explorada em diferentes plataformas.<\/p>\n<p><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe class=\"youtube-player\" type=\"text\/html\" width=\"640\" height=\"390\" src=\"https:\/\/www.youtube.com\/embed\/sUqSvyAsc5c?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent\" frameborder=\"0\" allowfullscreen=\"true\"><\/iframe><\/span><\/p>\n<p>O segundo exemplo mostrado no v\u00eddeo \u00e9 um pouco mais complicado. O ambiente de desenvolvimento do <a href=\"https:\/\/www.spyder-ide.org\/\" target=\"_blank\" rel=\"noopener nofollow\">\u00a0Spyder IDE<\/a> armazena dados em arquivos tar. Ao importar esses dados, os pesquisadores primeiro repetiram o experimento com o plantio do arquivo no sistema, mas depois fizeram algo mais legal: eles programaram c\u00f3digo arbitr\u00e1rio para ser executados na pr\u00f3xima inicializa\u00e7\u00e3o do Spyder. O resultado deste experimento foi um pedido para executar c\u00f3digo arbitr\u00e1rio agora com privil\u00e9gios de administrador do sistema.<\/p>\n<h2>Consequ\u00eancias imprevis\u00edveis<\/h2>\n<p>Esta hist\u00f3ria do bug de 15 anos ilustra mais uma vez que voc\u00ea nunca deve subestimar vulnerabilidades que permitem a inser\u00e7\u00e3o de dados em qualquer lugar \u2013 e se isso for feito os caminhos de explora\u00e7\u00e3o podem n\u00e3o ser t\u00e3o \u00f3bvios.<\/p>\n<p>Tarfile faz parte da biblioteca Python padr\u00e3o e pode ser encontrado em quase qualquer sistema baseado em Linux (entre outros). No entanto, o perigo est\u00e1 no uso de uma fun\u00e7\u00e3o vulner\u00e1vel espec\u00edfica. De um modo geral, qualquer projeto desenvolvido em Python que emprega um m\u00f3dulo de tarfile possui uma vulnerabilidade. Do ponto de vista do usu\u00e1rio final, \u00e9 uma situa\u00e7\u00e3o complicada: eles podem estar executando um programa potencialmente vulner\u00e1vel e nem mesmo sabem que ele usa tar. Especialistas da Kaspersky recomendam:<\/p>\n<ul>\n<li>limitar o processamento de arquivos de fontes n\u00e3o confi\u00e1veis;<\/li>\n<li>executar programas de terceiros com privil\u00e9gios m\u00ednimos para minimizar oportunidades de ataque;<\/li>\n<li><a href=\"https:\/\/www.kaspersky.com\/enterprise-security\/application-security\" target=\"_blank\" rel=\"noopener nofollow\">software de auditoria<\/a> usado nos sistemas mais cr\u00edticos para identificar aqueles que usam a fun\u00e7\u00e3o vulner\u00e1vel.<\/li>\n<\/ul>\n<p>Para os desenvolvedores, esse problema \u00e9 uma raz\u00e3o para auditar seu pr\u00f3prio c\u00f3digo para encontrar chamadas para uma fun\u00e7\u00e3o vulner\u00e1vel e alterar de acordo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Os desenvolvedores de um m\u00f3dulo Python comum descobriram recentemente por que antigas vulnerabilidades n\u00e3o corrigidas podem ser perigosas.<\/p>\n","protected":false},"author":665,"featured_media":20135,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1119,1655],"tags":[3071,350,267],"class_list":{"0":"post-20133","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"tag-python","10":"tag-linux","11":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/tarfile-15-year-old-vulnerability\/20133\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/tarfile-15-year-old-vulnerability\/24733\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/20204\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/27190\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/tarfile-15-year-old-vulnerability\/25059\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/25362\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/tarfile-15-year-old-vulnerability\/27821\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/tarfile-15-year-old-vulnerability\/34044\/"},{"hreflang":"tr","url":"https:\/\/www.kaspersky.com.tr\/blog\/tarfile-15-year-old-vulnerability\/11088\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/45703\/"},{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/tarfile-15-year-old-vulnerability\/19552\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/tarfile-15-year-old-vulnerability\/29350\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/tarfile-15-year-old-vulnerability\/25486\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/tarfile-15-year-old-vulnerability\/31108\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/tarfile-15-year-old-vulnerability\/30798\/"}],"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\/20133","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=20133"}],"version-history":[{"count":4,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20133\/revisions"}],"predecessor-version":[{"id":20137,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/20133\/revisions\/20137"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media\/20135"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media?parent=20133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/categories?post=20133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/tags?post=20133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}