{"id":19552,"date":"2022-10-10T10:06:28","date_gmt":"2022-10-10T08:06:28","guid":{"rendered":"https:\/\/www.kaspersky.fr\/blog\/?p=19552"},"modified":"2022-10-10T10:09:40","modified_gmt":"2022-10-10T08:09:40","slug":"tarfile-15-year-old-vulnerability","status":"publish","type":"post","link":"https:\/\/www.kaspersky.fr\/blog\/tarfile-15-year-old-vulnerability\/19552\/","title":{"rendered":"Les dangers de vuln\u00e9rabilit\u00e9s vieilles de 15 ans"},"content":{"rendered":"<p>En septembre 2022, Trellix a publi\u00e9 un <a href=\"https:\/\/www.trellix.com\/en-us\/about\/newsroom\/stories\/research\/tarfile-exploiting-the-world.html\" target=\"_blank\" rel=\"noopener nofollow\">rapport<\/a> sur une vuln\u00e9rabilit\u00e9 du module <a href=\"https:\/\/docs.python.org\/3\/library\/tarfile.html#module-tarfile\" target=\"_blank\" rel=\"noopener nofollow\">tarfile<\/a>, qui fait partie de la biblioth\u00e8que standard du langage de programmation Python et que n\u2019importe qui peut utiliser. La vuln\u00e9rabilit\u00e9 permet l\u2019\u00e9criture d\u2019un fichier arbitraire dans un dossier arbitraire sur le disque dur et, dans certains cas, l\u2019ex\u00e9cution d\u2019un code malveillant. Cette \u00e9tude est remarquable puisque ce probl\u00e8me avec tarfile <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">a \u00e9t\u00e9 d\u00e9couvert<\/a> en ao\u00fbt 2007, il y a 15 ans\u00a0! \u00c0 cette \u00e9poque, cette faille n\u2019\u00e9tait pas aussi dangereuse. D\u00e9couvrons pourquoi ce n\u2019\u00e9tait pas une menace et quels probl\u00e8mes les d\u00e9veloppeurs de Python et les utilisateurs pourraient rencontrer.<\/p>\n<h2>Tarfile en d\u00e9tail<\/h2>\n<p>Tarfile contient un code qui permet de travailler les archives <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Tar_(informatique)\" target=\"_blank\" rel=\"noopener nofollow\">tar<\/a>. Ce format est largement utilis\u00e9 dans les syst\u00e8mes d\u2019exploitation comme Unix, et son histoire commence en 1979. Tar est un logiciel d\u2019archivage qui permet de regrouper simplement un grand nombre de fichiers et de dossiers. Au d\u00e9but, il \u00e9tait utilis\u00e9 pour enregistrer des sauvegardes sur bande magn\u00e9tique. De nos jours, les archives tar peuvent utiliser la compression des fichiers, m\u00eame si cette fonction est optionnelle. Le module tarfile est responsable de la cr\u00e9ation et de la d\u00e9compression des archives, et les d\u00e9veloppeurs Python s\u2019en servent comme outil tout pr\u00eat pour effectuer ces t\u00e2ches.<\/p>\n<p>La vuln\u00e9rabilit\u00e9 de tarfile est assez simple. Elle a \u00e9t\u00e9 d\u00e9crite en d\u00e9tail en 2007 lors de la publication du <a href=\"https:\/\/mail.python.org\/pipermail\/python-dev\/2007-August\/074290.html\" target=\"_blank\" rel=\"noopener nofollow\">rapport original sur ce bug<\/a>. De plus, il ne s\u2019agit pas vraiment d\u2019une vuln\u00e9rabilit\u00e9 en tant que telle. Le module tarfile reproduit la structure exacte du dossier contenue dans l\u2019archive lorsqu\u2019il est d\u00e9compress\u00e9. Dans certains cas, cela se passe lorsque le nom du fichier dans l\u2019archive ressemble \u00e0 \u00ab\u00a0..\/..\/..\/..\/..\/etc\/passwd\u00a0\u00bb. Si vous d\u00e9compressez une archive de ce genre comme administrateur syst\u00e8me, le fichier passwd n\u2019est pas \u00e9crit dans le r\u00e9pertoire o\u00f9 l\u2019archive se trouve. Lorsque vous parcourez les \u00e9l\u00e9ments \/..\/ du chemin, le fichier d\u00e9compress\u00e9 atteint d\u2019abord le r\u00e9pertoire racine, puis \u00e9crase le fichier passwd dans le directoire \/etc. Sous Linux, cela signifie que le fichier normal qui contient les donn\u00e9es de tous les utilisateurs syst\u00e8me est effac\u00e9.<\/p>\n<h2>Une attente de 15 ans<\/h2>\n<p>\u00c0 la suite d\u2019une <a href=\"https:\/\/bugs.python.org\/issue1044#msg55464\" target=\"_blank\" rel=\"noopener nofollow\">conversation<\/a> sur cet \u00e9ventuel bug d\u00e9couvert en 2007, les chercheurs ont d\u00e9cid\u00e9 de\u2026 ne rien faire pour deux raisons. Tout d\u2019abord, le traitement d\u2019un dossier de ce genre est parfaitement conforme \u00e0 la norme Unix POSIX (nous pouvons le confirmer). Ensuite, cette vuln\u00e9rabilit\u00e9 ne peut pas \u00eatre exploit\u00e9e en pratique. Les responsables ont consid\u00e9r\u00e9 qu\u2019un avertissement dans le guide utilisateur \u00e9tait suffisant puisqu\u2019il n\u2019est pas conseill\u00e9 de d\u00e9compresser les fichiers de sources non fiables avec le module tarfile.<\/p>\n<p>Il a fallu attendre 2022 pour que cet argument soit invalid\u00e9, lorsque Trellix a d\u00e9montr\u00e9 que cette vuln\u00e9rabilit\u00e9 peut tr\u00e8s bien \u00eatre exploit\u00e9e en pratique. Non seulement les cybercriminels peuvent \u00e9crire les donn\u00e9es n\u2019importe o\u00f9, mais en plus ils peuvent ex\u00e9cuter un code arbitraire. N\u2019oublions pas que cette biblioth\u00e8que s\u2019adresse aux programmeurs. En d\u2019autres termes, la possibilit\u00e9 d\u2019\u00eatre victime d\u2019une attaque d\u00e9pend du logiciel utilis\u00e9 par le module tarfile. Trellix donne deux exemples.<\/p>\n<div id=\"attachment_19553\" style=\"width: 1378px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-19553\" class=\"size-full wp-image-19553\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/93\/2022\/10\/10100324\/tarfile-15-year-old-vulnerability-code-1.jpg\" alt=\"\" width=\"1368\" height=\"444\"><p id=\"caption-attachment-19553\" class=\"wp-caption-text\">Extrait d\u2019un code vuln\u00e9rable dans 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\">Source<\/a><\/p><\/div>\n<p><a href=\"https:\/\/www.trellix.com\/en-us\/about\/newsroom\/stories\/research\/tarfile-exploiting-the-world.html\" target=\"_blank\" rel=\"noopener nofollow\">\u00a0<\/a><\/p>\n<p>Le premier est <a href=\"https:\/\/github.com\/jopohl\/urh\" target=\"_blank\" rel=\"noopener nofollow\">Universal Radio Hacker<\/a>, un programme<\/p>\n<p>utilis\u00e9 pour analyser les protocoles sans fil inconnus. Le programme sauvegarde les donn\u00e9es sous la forme de projets, qui consiste \u00e0 avoir plusieurs fichiers tar compress\u00e9s. Les chercheurs ont d\u00e9montr\u00e9 comment, en essayant d\u2019ouvrir une archive pr\u00e9d\u00e9finie, le fichier ex\u00e9cutable a \u00e9t\u00e9 \u00e9crit dans le directoire autorun de Windows. Ainsi, le code est ex\u00e9cut\u00e9 lorsque le syst\u00e8me est relanc\u00e9. Cette vuln\u00e9rabilit\u00e9 peut, entre autres, \u00eatre exploit\u00e9e sur diff\u00e9rentes plateformes.<\/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>Le deuxi\u00e8me exemple mentionn\u00e9 dans la vid\u00e9o est un peu plus compliqu\u00e9. L\u2019environnement de d\u00e9veloppement <a href=\"https:\/\/www.spyder-ide.org\/\" target=\"_blank\" rel=\"noopener nofollow\">Spyder IDE<\/a> stocke les donn\u00e9es dans des archives tar. Lorsque ces donn\u00e9es ont \u00e9t\u00e9 import\u00e9es, les chercheurs ont d\u2019abord reproduit l\u2019exp\u00e9rience en ins\u00e9rant le fichier dans le syst\u00e8me, puis ils ont fait autre chose\u00a0: ils ont programm\u00e9 un code arbitraire qui devait s\u2019ex\u00e9cuter la prochaine fois que Spyder serait lanc\u00e9. Ce test a d\u00e9bouch\u00e9 sur une demande afin d\u2019ex\u00e9cuter un code arbitraire avec des privil\u00e8ges d\u2019administrateur syst\u00e8me.<\/p>\n<h2>Des cons\u00e9quences impr\u00e9visibles<\/h2>\n<p>L\u2019histoire de ce bug vieux de 15 ans montre, encore une fois, que vous ne devez jamais sous-estimer les vuln\u00e9rabilit\u00e9s qui permettent d\u2019\u00e9crire des donn\u00e9es n\u2019importe o\u00f9, m\u00eame si le registre effectue cette action et que les chemins d\u2019exploitation ne sont pas \u00e9vidents.<\/p>\n<p>Tarfile fait partie de la biblioth\u00e8que standard de Python et se trouve dans pratiquement tous les syst\u00e8mes bas\u00e9s sur Linux (entre autres). Pourtant, la menace vient de l\u2019utilisation d\u2019une fonction vuln\u00e9rable sp\u00e9cifique. De fa\u00e7on g\u00e9n\u00e9rale, tout projet d\u00e9velopp\u00e9 sur Python qui se sert d\u2019un module tarfile est une vuln\u00e9rabilit\u00e9. Du point de vue de l\u2019utilisateur final, cette situation est d\u00e9licate\u00a0: l\u2019utilisateur pourrait ex\u00e9cuter un programme potentiellement vuln\u00e9rable sans savoir qu\u2019il utilise tar. Les experts de Kaspersky vous conseillent de\u00a0:<\/p>\n<ul>\n<li>Limiter le traitement de fichiers qui proviennent de sources non fiables\u00a0;<\/li>\n<li>Ex\u00e9cuter les programmes tiers avec un minimum de privil\u00e8ges afin de r\u00e9duire le risque d\u2019attaque\u00a0;<\/li>\n<li>R\u00e9aliser un <a href=\"https:\/\/www.kaspersky.fr\/enterprise-security\/application-security\" target=\"_blank\" rel=\"noopener\">audit<\/a> des programmes utilis\u00e9s sur les syst\u00e8mes les plus critiques afin d\u2019identifier ceux qui ont une fonction vuln\u00e9rable.<\/li>\n<\/ul>\n<p>Pour les d\u00e9veloppeurs, ce probl\u00e8me devrait les inciter \u00e0 r\u00e9aliser un audit de leur code afin de v\u00e9rifier s\u2019il fait appel \u00e0 une fonction vuln\u00e9rable, et \u00e0 effectuer les modifications n\u00e9cessaires.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les d\u00e9veloppeurs d\u2019un module Python ordinaire ont r\u00e9cemment d\u00e9couvert pourquoi les anciennes vuln\u00e9rabilit\u00e9s dangereuses peuvent \u00eatre dangereuses.<\/p>\n","protected":false},"author":665,"featured_media":19554,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2112,3150],"tags":[623,4333,322],"class_list":{"0":"post-19552","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-vulnerabilites"},"hreflang":[{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/tarfile-15-year-old-vulnerability\/19552\/"},{"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":"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.fr\/blog\/tag\/vulnerabilites\/","name":"Vuln\u00e9rabilit\u00e9s"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/19552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/comments?post=19552"}],"version-history":[{"count":4,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/19552\/revisions"}],"predecessor-version":[{"id":19556,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/19552\/revisions\/19556"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/media\/19554"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/media?parent=19552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/categories?post=19552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/tags?post=19552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}