15-jarige Python-fout gevonden in ‘meer dan 350.000’ projecten • The Register

Er wordt aangenomen dat minstens 350.000 open source-projecten potentieel kwetsbaar zijn voor uitbuiting via een Python-modulefout die al 15 jaar niet is verholpen.

Dinsdag zei beveiligingsbedrijf Trellix dat zijn dreigingsonderzoekers een kwetsbaarheid in Python’s hadden aangetroffen tarfile module, die een manier biedt om gecomprimeerde bundels bestanden, ook wel tar-archieven genoemd, te lezen en te schrijven. Aanvankelijk dachten de insectenjagers dat ze toevallig een zero-day tegenkwamen.

Het bleek een kwestie van ongeveer 5500 dagen te zijn: de bug heeft de afgelopen tien jaar zijn beste leven geleid in afwachting van uitsterven.

De kwetsbaarheid, geïdentificeerd als CVE-2007-4559, dook op 24 augustus 2007 op in een Python-mailinglijstpost van Jan Matejek, die destijds de Python-pakketbeheerder voor SUSE was. Het kan worden misbruikt om mogelijk bestanden op de computer van een slachtoffer te overschrijven en te kapen, wanneer een kwetsbare toepassing een kwaadaardig tar-archief opent via tarfile.

“De kwetsbaarheid gaat in principe als volgt: als je een bestand met de naam "../../../../../etc/passwd" en maak dan de admin untar it, /etc/passwd wordt overschreven”, legde Matejek destijds uit.

De fout in de tarfile-directory werd op 29 augustus 2007 gemeld door Tomas Hoger, een software-engineer bij Red Hat.

Maar het was al behandeld, een soort van. Een dag eerder voerde Lars Gustäbel, beheerder van de tarfile-module, een codewijziging door die een standaard true toevoegt check_paths parameter en een helperfunctie voor de TarFile.extractall() methode die een fout genereert als een tar-archiefbestandspad onveilig is.

Maar de oplossing loste het probleem niet op TarFile.extract() methode – waarvan Gustäbel zei “helemaal niet te gebruiken” – en liet de mogelijkheid open dat het extraheren van gegevens uit niet-vertrouwde archieven problemen zou kunnen veroorzaken.

In een commentaarthread legde Gustäbel uit dat hij dit niet langer als een beveiligingsprobleem beschouwt. “tarfile.py doet niets verkeerd, het gedrag voldoet aan de pax-definitie en de richtlijnen voor padnaamresolutie in POSIX”, schreef hij.

“Er is geen bekende of mogelijke praktische exploit. I [updated] de documentatie met een waarschuwing dat het gevaarlijk kan zijn om archieven uit niet-vertrouwde bronnen te extraheren. Dat is het enige dat IMO moet worden gedaan.”

Inderdaad, de documentatie beschrijft dit voetgeweer:

Waarschuwing: extraheer nooit archieven van niet-vertrouwde bronnen zonder voorafgaande inspectie. Het is mogelijk dat bestanden worden aangemaakt buiten padbijv. leden met absolute bestandsnamen die beginnen met "/" of bestandsnamen met twee punten "..".

En toch zijn we hier, met zowel de extract() en extractall() nog steeds de dreiging van willekeurig padtraversal vormen.

“De kwetsbaarheid is een pathtraversal-aanval in de extract en extractall functies in de tarfile-module waarmee een aanvaller willekeurige bestanden kan overschrijven door de ‘..’-reeks toe te voegen aan bestandsnamen in een tar-archief”, legt Kasimir Schulz, een kwetsbaarheidsonderzoeker voor Trellix, uit in een blogpost.

De reeks “..” verandert het huidige werkpad naar de bovenliggende map. Dus met behulp van code zoals het fragment van zes regels hieronder, zegt Schulz, tarfile module kan worden verteld om de metadata van het bestand te lezen en te wijzigen voordat het wordt toegevoegd aan het tar-archief. En het resultaat is een exploit.

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)

Volgens Schulz heeft Trellix een gratis tool gebouwd met de naam Creosoot om te scannen op CVE-2007-4559. De software heeft de bug al gevonden in applicaties zoals Spyder IDE, een open-source wetenschappelijke omgeving geschreven voor Python, en Polemarch, een IT-infrastructuurbeheerservice voor Linux en Docker.

Het bedrijf schat de tarfile fout kan worden gevonden “in meer dan 350.000 open-source projecten en gangbaar in closed-source projecten.” Het wijst er ook op dat tarfile is een standaardmodule in elk Python-project en is aanwezig in frameworks die zijn gemaakt door AWS, Facebook, Google en Intel, en in applicaties voor machine learning, automatisering en Docker-containers.

Trellix zegt dat het eraan werkt om gerepareerde code beschikbaar te maken voor getroffen projecten.

“Met onze tools hebben we momenteel patches voor 11.005 repositories, klaar voor pull-verzoeken”, legt Charles McFarland, een kwetsbaarheidsonderzoeker voor Trellix, uit in een blogpost. “Elke patch wordt toegevoegd aan een gevorkte repository en er wordt in de loop van de tijd een pull-verzoek gedaan. Dit zal zowel individuen als organisaties helpen om zich bewust te worden van het probleem en hen een oplossing met één klik te geven.

“Vanwege de omvang van kwetsbare projecten verwachten we dit proces de komende weken voort te zetten. Naar verwachting zal dit 12,06 procent van alle kwetsbare projecten raken, iets meer dan 70K projecten tegen de tijd dat ze zijn voltooid.”

De overige 87,94 procent van de getroffen projecten wil misschien andere mogelijke opties overwegen. ®

Leave a Comment