Defecte de Python de 15 anys trobat en “més de 350.000” projectes • El registre


Es creu que almenys 350.000 projectes de codi obert són potencialment vulnerables a l’explotació mitjançant una fallada del mòdul Python que no s’ha solucionat durant 15 anys.

Dimarts, la firma de seguretat Trellix va dir que els seus investigadors d’amenaces havien trobat una vulnerabilitat a Python. tarfile mòdul, que proporciona una manera de llegir i escriure paquets de fitxers comprimits coneguts com a arxius tar. Inicialment, els caçadors d’errors van pensar que s’havien trobat amb un dia zero.

Va resultar ser un problema d’uns 5.500 dies: l’error ha estat vivint la seva millor vida durant l’última dècada i mitja mentre esperava l’extinció.

Identificat com CVE-2007-4559la vulnerabilitat va aparèixer el 24 d’agost de 2007 a a Publicació de la llista de correu de Python de Jan Matejek, que en aquell moment era el responsable del paquet Python per a SUSE. Es pot aprofitar per sobreescriure i segrestar fitxers a la màquina d’una víctima, quan una aplicació vulnerable obre un arxiu tar maliciós mitjançant tarfile.

“La vulnerabilitat és bàsicament així: si tar un fitxer anomenat "../../../../../etc/passwd" i després fer l’administrador untar això, /etc/passwd es sobreescriu”, va explicar Matejek aleshores.

La fallada de travessa del directori tarfile era reportat el 29 d’agost de 2007 per Tomas Hoger, enginyer de programari de Red Hat.

Però ja s’havia abordat, una mica. Un dia abans, Lars Gustäbel, responsable del mòdul tarfile, es va comprometre un canvi de codi això afegeix un veritable predeterminat check_paths paràmetre i una funció auxiliar al TarFile.extractall() mètode que genera un error si la ruta d’un fitxer d’arxiu tar no és segura.

Però la solució no va abordar TarFile.extract() mètode -que Gustäbel va dir que “no s’hauria d’utilitzar en absolut” – i va deixar oberta la possibilitat que extreure dades d’arxius no fiables pogués causar problemes.

En un fil de comentaris, Gustäbel va explicar que ja no ho considera un problema de seguretat. “tarfile.py no fa res dolent, el seu comportament s’ajusta a la definició de pax i les directrius de resolució de noms de ruta a POSIX”, va escriure.

“No hi ha cap explotació pràctica coneguda ni possible. I [updated] la documentació amb una advertència que podria ser perillós extreure arxius de fonts no fiables. Això és l’únic que s’ha de fer IMO”.

De fet, el documentació descriu aquesta pistola:

Avís: mai extreu arxius de fonts no fiables sense una inspecció prèvia. És possible que els fitxers es creïn fora de Camíper exemple, membres que tenen noms de fitxer absoluts que comencen per "/" o noms de fitxer amb dos punts "..".

I tanmateix aquí estem, amb els dos extract() i extractall() encara suposa l’amenaça d’un recorregut arbitrari del camí.

“La vulnerabilitat és un atac que travessa el camí extract i extractall funcions al mòdul tarfile que permeten a un atacant sobreescriure fitxers arbitraris afegint la seqüència ‘…’ als noms de fitxers d’un arxiu tar”, va explicar Kasimir Schulz, investigador de vulnerabilitats de Trellix, en un entrada al blog.

La seqüència “..” canvia la ruta de treball actual al directori principal. Per tant, utilitzant codi com el fragment de sis línies a continuació, diu Schulz, el tarfile Es pot dir al mòdul que llegeixi i modifiqui les metadades del fitxer abans d’afegir-lo a l’arxiu tar. I el resultat és una explotació.

import tarfile

def change_name(tarinfo):
    tarinfo.name = "../" + tarinfo.name
    return tarinfo

with tarfile.open("exploit.tar", "w:xz") as tar:
    tar.add("malicious_file", filter=change_name)

Segons Schulz, Trellix va construir una eina gratuïta anomenada Creosota per buscar CVE-2007-4559. El programari ja ha trobat l’error a l’aguait en aplicacions com Spyder IDE, un entorn científic de codi obert escrit per a Python, i Polemarch, un servei de gestió d’infraestructura informàtica per a Linux i Docker.

L’empresa estima el tarfile El defecte es pot trobar “en més de 350.000 projectes de codi obert i predominant en projectes de codi tancat”. També assenyala que tarfile és un mòdul predeterminat en qualsevol projecte Python i està present en marcs creats per AWS, Facebook, Google i Intel, i en aplicacions per a l’aprenentatge automàtic, l’automatització i els contenidors Docker.

Trellix diu que està treballant per posar el codi reparat a disposició dels projectes afectats.

“Usant les nostres eines, actualment tenim pedaços per a 11.005 dipòsits, preparats per a sol·licituds d’extracció”, va explicar Charles McFarland, investigador de vulnerabilitats de Trellix, en un entrada al blog. “Cada pedaç s’afegirà a un repositori bifurcat i una sol·licitud d’extracció es farà amb el pas del temps. Això ajudarà tant les persones com les organitzacions a prendre consciència del problema i donar-los una solució amb un clic.

“A causa de la mida dels projectes vulnerables, esperem continuar aquest procés durant les properes setmanes. S’espera que això arribi al 12,06 per cent de tots els projectes vulnerables, una mica més de 70.000 projectes en el moment de la finalització”.

El 87,94% restant dels projectes afectats potser voldria considerar altres opcions possibles. ®