{"id":25362,"date":"2022-10-17T10:45:18","date_gmt":"2022-10-17T16:45:18","guid":{"rendered":"https:\/\/latam.kaspersky.com\/blog\/?p=25362"},"modified":"2022-10-17T10:45:18","modified_gmt":"2022-10-17T16:45:18","slug":"tarfile-15-year-old-vulnerability","status":"publish","type":"post","link":"https:\/\/latam.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/25362\/","title":{"rendered":"Los peligros de las vulnerabilidades de m\u00e1s de 15 a\u00f1os"},"content":{"rendered":"<p>En septiembre de 2022, Trellix public\u00f3 un <a href=\"https:\/\/www.trellix.com\/en-us\/about\/newsroom\/stories\/research\/tarfile-exploiting-the-world.html\" target=\"_blank\" rel=\"noopener nofollow\">informe<\/a> sobre una vulnerabilidad en el m\u00f3dulo <a href=\"https:\/\/docs.python.org\/es\/3\/library\/tarfile.html#module-tarfile\" target=\"_blank\" rel=\"noopener nofollow\">tarfile<\/a>, que forma parte de una biblioteca est\u00e1ndar para el lenguaje de programaci\u00f3n Python y que cualquier persona puede usarla. Esta vulnerabilidad permite escribir un archivo arbitrario en una carpeta arbitraria del disco duro y, en ocasiones, tambi\u00e9n permite que c\u00f3digo malicioso sea ejecutado. Lo que es digno de menci\u00f3n sobre este estudio es que dicho problema en tarfile <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">fue descubierto<\/a> en agosto de 2007, \u00a1hace poco m\u00e1s de 15 a\u00f1os! En ese momento no era considerado como peligroso, sin embargo, veamos por qu\u00e9 razones no lo fue y qu\u00e9 problemas podr\u00eda acarrear actualmente tanto a los desarrolladores de Python como a sus usuarios.<\/p>\n<h2>Tarfile a detalle<\/h2>\n<p>Tarfile contiene c\u00f3digo para trabajar con archivos tar. Este formato se remonta a 1979 y es un frecuentemente se utiliza en sistemas operativos parecidos a UNIX. Tar es una forma sencilla de empaquetar una gran cantidad de archivos y carpetas. En sus inicios, se utiliz\u00f3 para escribir copias de seguridad en cinta magn\u00e9tica. En la actualidad, los archivos tar pueden usar la compresi\u00f3n de archivos de manera opcional. El tarfile es responsable de crear y extraer dichos archivos, y los desarrolladores de Python lo utilizan como herramienta especial para estas tareas.<\/p>\n<p>La vulnerabilidad en tarfile es realidad es muy simple. Se describi\u00f3 exhaustivamente en el <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">informe original sobre el error<\/a> en agosto de 2007. De hecho, ni es una vulnerabilidad como tal; tarfile \u00fanicamente recrea la estructura de carpetas exactamente como est\u00e1 contenida en el archivo cuando se extrae. Esto incluye los casos en los que el nombre del documento en el archivo empaquetado es algo como \u201c..\/..\/..\/..\/..\/etc\/passwd\u201d. Si se extrae este archivo siendo administrador del sistema, el archivo passwd no se escribe en el mismo directorio donde se encuentra el archivo empaquetado. Al encontrarse los elementos \/..\/ en la ruta, la herramienta para desempaquetar primero llega al directorio ra\u00edz y luego sobrescribe el archivo passwd en el directorio \/etc. En Linux, esto significa borrar el archivo regular que contiene los datos de todos los usuarios del sistema.<\/p>\n<p>Aqu\u00ed el peligro se encuentra en que el usuario de un programa que emplea el m\u00f3dulo tarfile desconoce c\u00f3mo termina la extracci\u00f3n normal de un archivo regular. Puede que no tenga nada, que algunos archivos aparezcan en un lugar inesperado o que algunos archivos de usuario se sobrescriban. El autor del informe de este error menciona este mismo problema en el propio archivador tar, un problema que se solucion\u00f3 hace m\u00e1s de 20 a\u00f1os, en 2001. No obstante, esta vulnerabilidad en tarfile nunca fue solucionada.<\/p>\n<h2>15 a\u00f1os despu\u00e9s<\/h2>\n<p>Tras una <a href=\"https:\/\/bugs.python.org\/issue1044#msg55464\" target=\"_blank\" rel=\"noopener nofollow\">discusi\u00f3n<\/a> en 2007 sobre este potencial<em> bug<\/em>, la decisi\u00f3n fue\u2026 no hacer nada, por dos razones: primero, este procesamiento de archivos se ajusta totalmente al est\u00e1ndar UNIX POSIX (podemos confirmarlo). Segundo, \u201cen la pr\u00e1ctica, no hay posibilidad de explotaci\u00f3n\u201d. En ese momento, se consider\u00f3 que bastaba con realizar una advertencia en la gu\u00eda del usuario especificando que no era recomendable extraer archivos utilizando tarfile de fuentes no confiables.<\/p>\n<p>No obstante, en 2022 esta afirmaci\u00f3n fue refutada cuando Trellix demostr\u00f3 que, en la pr\u00e1ctica, claro que es posible la explotaci\u00f3n de dicha vulnerabilidad. No solo es posible escribir datos donde uno desee, sino que es posible ejecutar c\u00f3digo arbitrario tambi\u00e9n. Queremos recordar que esta es una biblioteca para programadores; o sea, que la posibilidad de un ataque depende del <em>software<\/em> espec\u00edfico en el que se utilice el m\u00f3dulo tarfile. Trellix dio dos ejemplos:<\/p>\n<div id=\"attachment_25368\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-25368\" class=\"wp-image-25368 size-large\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/87\/2022\/10\/17103307\/tarfile-15-year-old-vulnerability-code-1024x332.jpg\" alt=\"\" width=\"1024\" height=\"332\"><p id=\"caption-attachment-25368\" class=\"wp-caption-text\">Fragmento de c\u00f3digo vulnerable en 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\">Fuente<\/a>.<\/p><\/div>\n<p>El primero es <a href=\"https:\/\/github.com\/jopohl\/urh\" target=\"_blank\" rel=\"noopener nofollow\">Universal Radio Hacker<\/a>, un programa de an\u00e1lisis de protocolos inal\u00e1mbricos desconocidos. El programa guarda datos en forma de proyectos, que consisten en diversos archivos empaquetados en tar. Los investigadores demostraron c\u00f3mo un intento de abrir un archivo predefinido lleva a que un archivo ejecutable se escriba en el directorio de ejecuci\u00f3n autom\u00e1tica de Windows. Por ende, a la pr\u00f3xima que el sistema sea reiniciado, este c\u00f3digo ser\u00e1 ejecutado. Esta vulnerabilidad puede explotarse en distintas plataformas, entre otras cosas.<\/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\/jqs8S51_ENg?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>El segundo ejemplo que aparece en el v\u00eddeo es un tanto m\u00e1s complejo. El entorno de desarrollo <a href=\"https:\/\/www.spyder-ide.org\/\" target=\"_blank\" rel=\"noopener nofollow\">Spyder IDE<\/a> almacena datos en archivos tar. En primer lugar, al importar estos datos, los investigadores repitieron el experimento implantando el archivo en el sistema, para luego hacer algo a\u00fan mejor: programar un c\u00f3digo arbitrario para que fuera ejecutado en el siguiente inicio de Spyder. El resultado final de este experimento fue una solicitud para ejecutar c\u00f3digo arbitrario, pero con los privilegios del administrador del sistema.<\/p>\n<h2>Consecuencias impredecibles<\/h2>\n<p>Esta historia sobre un error que data de hace 15 a\u00f1os muestra que nunca hay que subestimar a las vulnerabilidades que permiten escribir datos en cualquier parte, inclusive si se sigue el protocolo y las rutas de explotaci\u00f3n no son evidentes.<\/p>\n<p>Tarfile es parte de la biblioteca est\u00e1ndar de Python y puede encontrarse en casi cualquier sistema basado en Linux (entre otros). No obstante, el peligro est\u00e1 en el uso de una funci\u00f3n vulnerable en espec\u00edfico. En t\u00e9rminos generales, cualquier proyecto desarrollado en Python que utilice un m\u00f3dulo tarfile es una vulnerabilidad. Desde el punto de vista del usuario final, se trata de una situaci\u00f3n complicada: los usuarios podr\u00edan estar ejecutando un programa potencialmente vulnerable sin ni siquiera saber que este utiliza tar. Nuestros expertos recomiendan:<\/p>\n<ul>\n<li>limitar el procesamiento de archivos de fuentes no confiables;<\/li>\n<li>ejecutar programas de terceros con privilegios m\u00ednimos para disminuir las oportunidades de un ataque;<\/li>\n<li><a href=\"https:\/\/latam.kaspersky.com\/enterprise-security\/application-security\" target=\"_blank\" rel=\"noopener\">examinar<\/a> el <em>software<\/em> utilizado en los sistemas m\u00e1s cr\u00edticos para identificar aquellos que usan una funci\u00f3n vulnerable.<\/li>\n<\/ul>\n<p>Para los desarrolladores, este problema les da una buena raz\u00f3n para revisar su propio c\u00f3digo en busca de funciones vulnerables y modificarlo acorde a los resultados del an\u00e1lisis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los desarrolladores de un m\u00f3dulo com\u00fan y corriente de Python descubrieron hace poco por qu\u00e9 pueden ser peligrosas las vulnerabilidades antiguas que no tienen parches.<\/p>\n","protected":false},"author":665,"featured_media":25367,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[893,5826,647],"class_list":{"0":"post-25362","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-news","8":"tag-linux","9":"tag-python","10":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/tarfile-15-year-old-vulnerability\/25362\/"},{"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","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":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/tarfile-15-year-old-vulnerability\/20133\/"},{"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:\/\/latam.kaspersky.com\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/25362","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=25362"}],"version-history":[{"count":3,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/25362\/revisions"}],"predecessor-version":[{"id":25371,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/25362\/revisions\/25371"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media\/25367"}],"wp:attachment":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media?parent=25362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/categories?post=25362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/tags?post=25362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}