Oudere Python Bootstrap-scripts creëren risico’s voor domeinovername in meerdere PyPI-pakketten

Cybersecurity-onderzoekers hebben kwetsbare code ontdekt in oudere Python-pakketten die mogelijk de weg kunnen vrijmaken voor een supply chain-compromis op de Python Package Index (PyPI) via een domeinovername-aanval.

Software supply chain-beveiligingsbedrijf ReversingLabs zei dat het de “kwetsbaarheid” vond in bootstrap-bestanden die werden geleverd door een automatiseringstool voor het bouwen en implementeren met de naam “zc.buildout”.

“De scripts automatiseren het proces van het downloaden, bouwen en installeren van de vereiste bibliotheken en tools”, aldus beveiligingsonderzoeker Vladimir Pezo. “In het bijzonder, wanneer het bootstrap-script wordt uitgevoerd, haalt het een installatiescript op en voert het uit voor het pakket Distribute van python-distribute(.)org – een verouderd domein dat nu te koop is in de premium prijsklasse, terwijl het erin slaagt de advertentie-inkomsten te verhogen.”

De PyPI-pakketten die een bootstrap-script bevatten dat toegang krijgt tot het betreffende domein, zijn onder meer tornado, pypiserver, slapos.core, roman, xlutils en testfixtures.

De kern van het probleem betreft een oud bootstrap-script (“bootstrap.py”) dat samen met de tool zc.buildout werd gebruikt om de Buildout-omgeving te initialiseren. Het Python-script ondersteunde ook de mogelijkheid om een ​​verpakkingshulpprogramma genaamd “Distribute”, een kortstondige afsplitsing van het Setuptools-project, in de lokale omgeving te installeren.

Om dit te bereiken wordt het Distribute-installatiescript (“distribute_setup.py”) opgehaald van python-distribute(.)org, een domein dat sinds 2014 te koop is. Bij het toevoegen van de optie was het de bedoeling om het bootstrap-script te instrueren om het Distribute-pakket te downloaden en te installeren in plaats van het oudere Setuptools-pakket om de eieren en afhankelijkheden voor de buildout te beheren.

Het is belangrijk op te merken dat de Distribute-vork tot stand is gekomen door het gebrek aan actieve ontwikkeling van Setuptools, het belangrijkste pakketbeheerprogramma dat destijds werd gebruikt. De functies van Distribute werden echter in 2013 weer in Setuptools geïntegreerd, waardoor Distribute overbodig werd.

Het door ReversingLabs geïdentificeerde probleem betreft het feit dat veel pakketten het bootstrap-script blijven verzenden dat ofwel standaard probeert Distribute te installeren, ofwel wanneer de opdrachtregeloptie (“-d” of “–distribute”) is opgegeven. Dit, in combinatie met het feit dat het domein in kwestie voor het oprapen ligt, brengt gebruikers met een latent risico met zich mee, omdat een aanvaller deze opstelling zou kunnen inzetten om kwaadaardige code door te geven wanneer het bootstrap-script onbedoeld wordt uitgevoerd en mogelijk gevoelige gegevens kan stelen.

Hoewel sommige getroffen pakketten stappen hebben ondernomen om het bootstrap-script te verwijderen, blijft het slapos.core-pakket nog steeds de kwetsbare code verzenden. Het is ook opgenomen in de ontwikkelings- en onderhoudsversie van Tornado.

Een ander belangrijk aspect om hier rekening mee te houden is dat het bootstrap-script niet automatisch wordt uitgevoerd tijdens de pakketinstallatie en is geschreven in Python 2. Dit betekent dat het script niet zonder aanpassingen kan worden uitgevoerd met Python 3. Maar alleen al de aanwezigheid van het bestand laat een “onnodig aanvalsoppervlak” achter waar aanvallers misbruik van kunnen maken als ontwikkelaars worden misleid om code uit te voeren die de uitvoering van het bootstrap-script activeert.

De dreiging van een domeinovername is niet theoretisch. In 2023 kwam aan het licht dat het npm-pakket fsevents werd gecompromitteerd door een slechte actor die de controle over een niet-geclaimde cloudbron gehost op fsevents-binaries.s3-us-west-2.amazonaws(.)com overnam om kwaadaardige uitvoerbare bestanden naar gebruikers te pushen die bepaalde versies van het pakket installeerden (CVE-2023-45311, CVSS-score: 9,8).

“Het probleem ligt in het programmeerpatroon dat het ophalen en uitvoeren van een payload van een hardgecodeerd domein omvat, een patroon dat vaak wordt waargenomen bij malware die downloadergedrag vertoont”, aldus Pezo. “Door het onvermogen om de Distribute-module formeel buiten gebruik te stellen, konden kwetsbare bootstrap-scripts blijven hangen en werden onbekende aantallen projecten blootgesteld aan een potentiële aanval.”

De onthulling komt op het moment dat HelixGuard een kwaadaardig pakket in PyPI ontdekte met de naam “spellcheckers” dat beweert een hulpmiddel te zijn voor het controleren van spelfouten met behulp van OpenAI Vision, maar kwaadaardige code bevat die is ontworpen om verbinding te maken met een externe server en een payload in de volgende fase te downloaden, die vervolgens een trojan voor externe toegang (RAT) uitvoert.

Het pakket, voor het eerst geüpload naar PyPI op 15 november 2025, door een gebruiker genaamd leo636722, is 955 keer gedownload. Het is niet langer beschikbaar om te downloaden.

“Deze RAT kan opdrachten op afstand ontvangen en door de aanvaller bestuurde Python-code uitvoeren via exec(), waardoor volledige controle op afstand over de host van het slachtoffer mogelijk wordt”, aldus HelixGuard. “Wanneer de gebruiker het kwaadaardige pakket installeert en uitvoert, wordt de achterdeur actief, waardoor de aanvaller de computer van de gebruiker op afstand kan besturen.”

Thijs Van der Does