15 år gammel Python-feil funnet i ‘over 350 000’ prosjekter • The Register


Minst 350 000 åpen kildekode-prosjekter antas å være potensielt sårbare for utnyttelse via en Python-modulfeil som har vært uløst i 15 år.

Tirsdag sa sikkerhetsfirmaet Trellix at trusselforskerne hadde støtt på en sårbarhet i Pythons tarfile modul, som gir en måte å lese og skrive komprimerte bunter med filer kjent som tar-arkiver. Til å begynne med trodde insektjegerne at de hadde kommet til en null-dag.

Det viste seg å handle om et 5500-dagers problem: feilen har levd sitt beste liv det siste og et halvt tiåret mens den har ventet på utryddelse.

Identifisert som CVE-2007-4559sårbarheten dukket opp 24. august 2007, i en Python-postlisteinnlegg fra Jan Matejek, som på det tidspunktet var Python-pakkevedlikeholder for SUSE. Det kan utnyttes til å potensielt overskrive og kapre filer på et offers maskin, når et sårbart program åpner et ondsinnet tar-arkiv via tarfile.

“Sårbarheten går i utgangspunktet slik: Hvis du tar en fil med navnet "../../../../../etc/passwd" og gjør deretter admin untar det, /etc/passwd blir overskrevet,” forklarte Matejek den gang.

Tarfile katalogen traversal feil var rapportert 29. august 2007 av Tomas Hoger, en programvareingeniør hos Red Hat.

Men det var allerede tatt opp, liksom. En dag tidligere forpliktet Lars Gustäbel, vedlikeholder av tarfilmodulen en kodeendring som legger til en standard sann check_paths parameter og en hjelpefunksjon til TarFile.extractall() metode som gir en feil hvis en tar-arkivfilbane er usikker.

Men reparasjonen tok ikke for seg TarFile.extract() metode – som Gustäbel sa “ikke burde brukes i det hele tatt” – og la muligheten åpen for at utvinning av data fra uklarerte arkiver kan forårsake problemer.

I en kommentartråd, forklarte Gustäbel at han ikke lenger anser dette som et sikkerhetsproblem. “tarfile.py gjør ingenting galt, dens oppførsel samsvarer med pax-definisjonen og retningslinjene for oppløsning av banenavn i POSIX,” skrev han.

“Det er ingen kjent eller mulig praktisk utnyttelse. I [updated] dokumentasjonen med en advarsel om at det kan være farlig å hente ut arkiver fra usikre kilder. Det er det eneste som skal gjøres IMO.”

Faktisk dokumentasjon beskriver denne fotpistolen:

Advarsel: Trekk aldri ut arkiver fra upålitelige kilder uten forutgående inspeksjon. Det er mulig at filer opprettes utenfor stif.eks medlemmer som har absolutte filnavn som begynner med "/" eller filnavn med to prikker "..".

Og likevel er vi her, med begge extract() og extractall() fortsatt utgjør trusselen om vilkårlig banegjennomgang.

“Sårbarheten er et banegjennomgangsangrep i extract og extractall funksjoner i tarfilmodulen som lar en angriper overskrive vilkårlige filer ved å legge til ‘..’-sekvensen til filnavn i et tar-arkiv,” forklarte Kasimir Schulz, en sårbarhetsforsker for Trellix, i en blogg innlegg.

“..”-sekvensen endrer gjeldende arbeidsbane til den overordnede katalogen. Så ved å bruke kode som den seks-linjers kodebiten nedenfor, sier Schulz tarfile modulen kan bli bedt om å lese og endre filens metadata før den legges til tar-arkivet. Og resultatet er en utnyttelse.

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)

I følge Schulz bygget Trellix et gratis verktøy kalt Creosote for å skanne etter CVE-2007-4559. Programvaren har allerede funnet feilen på lur i applikasjoner som Spyder IDE, et åpen kildekode vitenskapelig miljø skrevet for Python, og Polemarch, en IT-infrastrukturadministrasjonstjeneste for Linux og Docker.

Selskapet anslår tarfile feil kan bli funnet “i over 350 000 åpen kildekode-prosjekter og utbredt i lukket kildekode-prosjekter.” Den påpeker også det tarfile er en standardmodul i ethvert Python-prosjekt og finnes i rammeverk laget av AWS, Facebook, Google og Intel, og i applikasjoner for maskinlæring, automatisering og Docker-beholdere.

Trellix sier det jobber med å gjøre reparert kode tilgjengelig for berørte prosjekter.

“Ved å bruke verktøyene våre har vi for øyeblikket oppdateringer for 11 005 depoter, klare for pull-forespørsler,” forklarte Charles McFarland, en sårbarhetsforsker for Trellix, i en blogg innlegg. “Hver oppdatering vil bli lagt til et forked repository og en pull-forespørsel gjort over tid. Dette vil hjelpe både enkeltpersoner og organisasjoner å bli klar over problemet og gi dem en ett-klikk-løsning.

“På grunn av størrelsen på sårbare prosjekter forventer vi å fortsette denne prosessen i løpet av de neste ukene. Dette forventes å nå 12,06 prosent av alle sårbare prosjekter, litt over 70 000 prosjekter ved ferdigstillelse.”

De resterende 87,94 prosent av berørte prosjekter vil kanskje vurdere andre mulige alternativer. ®