{"id":27821,"date":"2022-10-10T08:00:22","date_gmt":"2022-10-10T06:00:22","guid":{"rendered":"https:\/\/www.kaspersky.es\/blog\/?p=27821"},"modified":"2022-10-09T22:30:28","modified_gmt":"2022-10-09T20:30:28","slug":"tarfile-15-year-old-vulnerability","status":"publish","type":"post","link":"https:\/\/www.kaspersky.es\/blog\/tarfile-15-year-old-vulnerability\/27821\/","title":{"rendered":"Los peligros de vulnerabilidades que tienen 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 puede ser utilizada por cualquier persona. La vulnerabilidad permite escribir un archivo arbitrario en una carpeta arbitraria del disco duro y, en algunos casos, tambi\u00e9n permite que se ejecute c\u00f3digo malicioso. Lo que hace que este estudio sea digno de menci\u00f3n es que este problema en tarfile <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">se descubri\u00f3<\/a> en agosto de 2007, \u00a1hace nada menos que 15 a\u00f1os! En aquel momento no se consideraba peligroso, sin embargo, veamos por qu\u00e9 no lo fue entonces y qu\u00e9 problemas podr\u00eda suponer en la actualidad para los desarrolladores de Python y sus usuarios.<\/p>\n<h2>Tarfile en detalle<\/h2>\n<p>Tarfile contiene c\u00f3digo para trabajar con archivos tar. La historia de este formato se remonta a 1979 y es un formato que se utiliza frecuentemente en sistemas operativos similares a UNIX. Tar es una sencilla forma de empaquetar una gran cantidad de archivos y carpetas. En sus inicios, se utiliz\u00f3 para escribir copias de seguridad en cinta magn\u00e9tica. Hoy en d\u00eda, los archivos tar pueden usar la compresi\u00f3n de archivos, aunque de forma opcional. El tarfile es responsable de crear y extraer dichos archivos, y los desarrolladores de Python lo usan como una herramienta confeccionada para estas tareas.<\/p>\n<p>La vulnerabilidad en tarfile es bastante simple. Se describi\u00f3 de forma exhaustiva 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> de agosto de 2007. Ni siquiera se trata de una vulnerabilidad como tal; tarfile \u00fanicamente recrea la estructura de carpetas exacta contenida en el archivo cuando se extrae. Esto incluye los casos en los que el nombre del archivo 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>El peligro aqu\u00ed se encuentra en que el usuario de un programa que emplea el m\u00f3dulo tarfile no sabe c\u00f3mo termina la extracci\u00f3n normal de un archivo regular. Puede que no haya 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 en 2001, hace m\u00e1s de 20 a\u00f1os. Sin embargo, en tarfile nunca se solucion\u00f3 esta vulnerabilidad.<\/p>\n<h2>15 a\u00f1os de espera<\/h2>\n<p>Tras una <a href=\"https:\/\/bugs.python.org\/issue1044#msg55464\" target=\"_blank\" rel=\"noopener nofollow\">discusi\u00f3n<\/a> sobre este potencial<em> bug<\/em> en 2007, se decidi\u00f3\u2026 no hacer nada, por dos razones: En primer lugar, este procesamiento de archivos se ajusta totalmente al est\u00e1ndar UNIX POSIX (podemos confirmarlo). En segundo lugar, \u201cen la pr\u00e1ctica, no hay posibilidad de explotaci\u00f3n\u201d. En aquel momento, se consider\u00f3 que era suficiente con realizar una advertencia en la gu\u00eda del usuario especificando que no se recomienda extraer archivos de fuentes no fiables utilizando tarfile.<\/p>\n<p>Sin embargo, esta afirmaci\u00f3n se refut\u00f3 en 2022, cuando Trellix demostr\u00f3 que, en la pr\u00e1ctica, es m\u00e1s que posible la explotaci\u00f3n de esta vulnerabilidad. Y no solo es posible escribir datos donde se quiera, sino que tambi\u00e9n es posible ejecutar c\u00f3digo arbitrario. Cabe recordar que esta es una biblioteca para programadores; es decir 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_27822\" style=\"width: 1378px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-27822\" class=\"wp-image-27822 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/88\/2022\/10\/09222630\/tarfile-15-year-old-vulnerability-code.jpg\" alt=\"Fragmento de c\u00f3digo vulnerable en Universal Radio Hacker.\" width=\"1368\" height=\"444\"><p id=\"caption-attachment-27822\" 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 para analizar protocolos inal\u00e1mbricos desconocidos. El programa guarda datos en forma de proyectos, que consisten en m\u00faltiples 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 lo tanto, la pr\u00f3xima vez que se reinicie el sistema, se ejecutar\u00e1 este c\u00f3digo. Esta vulnerabilidad puede, ser explotada en diferentes 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 se muestra en el v\u00eddeo es un poco 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. Primero, al importar estos datos, los investigadores repitieron el experimento implantando el archivo en el sistema, pero luego hicieron algo a\u00fan mejor: programaron un c\u00f3digo arbitrario para que se ejecutara en el pr\u00f3ximo inicio de Spyder. El resultado final de este experimento fue una solicitud para ejecutar c\u00f3digo arbitrario ahora con privilegios de administrador del sistema.<\/p>\n<h2>Consecuencias impredecibles<\/h2>\n<p>Esta historia de un error de hace 15 a\u00f1os demuestra una vez m\u00e1s que nunca se deben subestimar las vulnerabilidades que permitan escribir datos en cualquier parte, incluso si se hace acorde al protocolo y las rutas de explotaci\u00f3n no son evidentes.<\/p>\n<p>Tarfile es parte de la biblioteca est\u00e1ndar de Python y se puede encontrar en casi cualquier sistema basado en Linux (entre otros). Sin embargo, el peligro est\u00e1 en el uso de una espec\u00edfica funci\u00f3n vulnerable. En t\u00e9rminos generales, cualquier proyecto desarrollado en Python que emplee un m\u00f3dulo tarfile es una vulnerabilidad. Desde el punto de vista del usuario final, se trata de una situaci\u00f3n complicada: los usuarios pueden estar ejecutando un programa potencialmente vulnerable sin ni siquiera saber que este usa tar. Los expertos de Kaspersky recomiendan:<\/p>\n<ul>\n<li>limitar el procesamiento de archivos de fuentes no fiables;<\/li>\n<li>ejecutar programas de terceros con privilegios m\u00ednimos para minimizar las oportunidades de ataque;<\/li>\n<li><a href=\"https:\/\/www.kaspersky.es\/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 utilizan la 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 de Python normal y corriente descubrieron recientemente por qu\u00e9 pueden ser peligrosas las vulnerabilidades antiguas que no se han parcheado.<\/p>\n","protected":false},"author":665,"featured_media":27823,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2202,2754],"tags":[696,3494,784],"class_list":{"0":"post-27821","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"tag-linux","10":"tag-python","11":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/tarfile-15-year-old-vulnerability\/27821\/"},{"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":"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:\/\/www.kaspersky.es\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/27821","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=27821"}],"version-history":[{"count":2,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/27821\/revisions"}],"predecessor-version":[{"id":27825,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/posts\/27821\/revisions\/27825"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/media\/27823"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/media?parent=27821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/categories?post=27821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.es\/blog\/wp-json\/wp\/v2\/tags?post=27821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}