Hackers kapen 22.000 verwijderde PyPI-pakketten en verspreiden schadelijke code naar ontwikkelaars

Een nieuwe aanvalstechniek voor de toeleveringsketen, gericht op het Python Package Index (PyPI)-register, wordt in het wild misbruikt in een poging om downstream-organisaties te infiltreren.

Het heeft de codenaam Revival Hijack gekregen van software supply chain security bedrijf JFrog, dat zei dat de aanvalsmethode gebruikt kon worden om 22.000 bestaande PyPI-pakketten te kapen en te resulteren in “honderdduizenden” kwaadaardige pakketdownloads. Deze vatbare pakketten hebben meer dan 100.000 downloads of zijn al meer dan zes maanden actief.

“Bij deze aanvalstechniek worden PyPI-softwarepakketten gekaapt door de optie te manipuleren om ze opnieuw te registreren nadat ze door de oorspronkelijke eigenaar uit de PyPI-index zijn verwijderd”, aldus JFrog-beveiligingsonderzoekers Andrey Polkovnychenko en Brian Moussalli in een rapport dat is gedeeld met The Hacker News.

De kern van de aanval is dat verschillende Python-pakketten die in de PyPI-repository zijn gepubliceerd, worden verwijderd, waardoor ze beschikbaar worden voor registratie door elke andere gebruiker.

Statistieken die JFrog deelt, tonen aan dat er gemiddeld 309 pakketten per maand worden verwijderd. Dit kan om verschillende redenen gebeuren: gebrek aan onderhoud (bijv. abandonware), het opnieuw publiceren van pakketten onder een andere naam of het introduceren van dezelfde functionaliteit in officiële bibliotheken of ingebouwde API’s.

Dit vormt bovendien een lucratief aanvalsoppervlak dat effectiever is dan typosquatting. Een aanvaller kan zijn eigen accounts gebruiken om schadelijke pakketten onder dezelfde naam en een hogere versie te publiceren en zo ontwikkelaarsomgevingen te infecteren.

“De techniek is niet afhankelijk van het slachtoffer dat een fout maakt bij het installeren van het pakket,” zeiden de onderzoekers, wijzend op hoe Revival Hijack betere resultaten kan opleveren vanuit het oogpunt van een tegenstander. “Het updaten van een ‘ooit veilig’ pakket naar de nieuwste versie wordt door veel gebruikers gezien als een veilige handeling.”

Hoewel PyPI over beveiligingen beschikt tegen pogingen tot imitatie van auteurs en typosquatting, bleek uit de analyse van JFrog dat bij het uitvoeren van de opdracht “pip list –outdated” het vervalste pakket wordt weergegeven als een nieuwe versie van het originele pakket, terwijl het originele pakket overeenkomt met een ander pakket van een geheel andere auteur.

Nog zorgwekkender is dat het uitvoeren van de opdracht “pip install –upgrade” het daadwerkelijke pakket vervangt door het neppakket, zonder dat er een waarschuwing wordt gegeven dat de auteur van het pakket is gewijzigd. Dit kan onwetende ontwikkelaars blootstellen aan een enorm risico voor de softwaretoeleveringsketen.

JFrog gaf aan dat het een nieuw PyPI-gebruikersaccount met de naam “security_holding” heeft aangemaakt. Hiermee kon het de kwetsbare pakketten veilig kapen en vervangen door lege tijdelijke aanduidingen. Zo werd voorkomen dat kwaadwillenden misbruik konden maken van de verwijderde pakketten.

Bovendien is aan elk van deze pakketten het versienummer 0.0.0.1 toegewezen – het tegenovergestelde van een scenario voor een afhankelijkheidsverwarringaanval – om te voorkomen dat ontwikkelaars deze ophalen bij het uitvoeren van een pip-upgradeopdracht.

Wat nog verontrustender is, is dat Revival Hijack al in het wild is uitgebuit. Een onbekende dreigingsactor met de naam Jinnis introduceerde op 30 maart 2024 een onschuldige versie van een pakket met de naam “pingdomv3”, dezelfde dag dat de oorspronkelijke eigenaar (cheneyyan) het pakket van PyPI verwijderde.

Op 12 april 2024 zou de nieuwe ontwikkelaar een update hebben uitgebracht met een Base64-gecodeerde payload die controleert op de aanwezigheid van de omgevingsvariabele “JENKINS_URL” en, indien aanwezig, een onbekende next-stage module uitvoert die is opgehaald van een externe server.

“Dit suggereert dat de aanvallers de uitvoering van de aanval hebben vertraagd of dat ze de aanval gerichter hebben ontworpen, waarbij ze de aanval mogelijk hebben beperkt tot een specifiek IP-bereik”, aldus JFrog.

De nieuwe aanval is een teken dat dreigingsactoren supply chain-aanvallen op grotere schaal in het vizier hebben door verwijderde PyPI-pakketten als doelwit te nemen om het bereik van de campagnes te vergroten. Organisaties en ontwikkelaars wordt aangeraden hun DevOps-pipelines te inspecteren om ervoor te zorgen dat ze geen pakketten installeren die al uit de repository zijn verwijderd.

“Door kwetsbaar gedrag toe te passen bij de verwerking van verwijderde pakketten konden aanvallers bestaande pakketten kapen, waardoor ze deze op de doelsystemen konden installeren zonder dat de workflow van de gebruiker werd gewijzigd”, aldus Moussalli, JFrog Security Research Team Lead.

“Het aanvalsoppervlak van het PyPI-pakket groeit voortdurend. Ondanks proactieve interventie hier, moeten gebruikers altijd waakzaam blijven en de nodige voorzorgsmaatregelen nemen om zichzelf en de PyPI-community te beschermen tegen deze kapingstechniek.”

Thijs Van der Does