Een kritieke beveiligingsfout die gevolgen heeft voor Google Cloud Platform (GCP) Composer en die inmiddels is gepatcht, zou kunnen zijn misbruikt om op afstand code uit te voeren op cloudservers door middel van een supply chain-aanvalstechniek die ‘dependency confusion’ wordt genoemd.
De kwetsbaarheid heeft de codenaam CloudImposer door Tenable Research.
“Dankzij de kwetsbaarheid zou een aanvaller een interne softwareafhankelijkheid kunnen kapen die Google vooraf installeert op elke Google Cloud Composer-pijplijnorkestratietool”, aldus beveiligingsonderzoeker Liv Matan in een rapport dat is gedeeld met The Hacker News.
Verwarring over afhankelijkheid (ook wel substitutieaanval genoemd), dat voor het eerst werd gedocumenteerd door beveiligingsonderzoeker Alex Birsan in februari 2021, verwijst naar een type inbreuk op de softwaretoeleveringsketen waarbij een pakketbeheerder wordt misleid om een schadelijk pakket uit een openbare opslagplaats te halen in plaats van het beoogde bestand met dezelfde naam uit een interne opslagplaats.
Een kwaadwillende actor zou dus een grootschalige aanval op de toeleveringsketen kunnen uitvoeren door een namaakpakket te publiceren in een openbare pakketrepository met dezelfde naam als een pakket dat intern door bedrijven is ontwikkeld en met een hoger versienummer.
Dit zorgt er vervolgens voor dat de pakketbeheerder onbewust het schadelijke pakket downloadt van de openbare repository in plaats van de privérepository. Hierdoor wordt de bestaande pakketafhankelijkheid feitelijk vervangen door de frauduleuze tegenhanger.
Het probleem dat Tenable identificeerde, is vergelijkbaar in die zin dat het misbruikt kan worden om een schadelijk pakket te uploaden naar de Python Package Index (PyPI)-repository met de naam ‘google-cloud-datacatalog-lineage-producer-client’. Dit pakket kan vervolgens vooraf worden geïnstalleerd op alle Composer-instanties met verhoogde machtigingen.
Hoewel Cloud Composer vereist dat het betreffende pakket versiegebonden is (d.w.z. versie 0.1.0), ontdekte Tenable dat het gebruik van het argument “–extra-index-url” tijdens een “pip install”-opdracht prioriteit geeft aan het ophalen van het pakket uit het openbare register, waardoor verwarring over afhankelijkheid kan ontstaan.
Met dit privilege kunnen aanvallers code uitvoeren, inloggegevens van serviceaccounts stelen en zich lateraal in de omgeving van het slachtoffer verplaatsen naar andere GCP-services.
Na de responsible disclosure op 18 januari 2024 werd het in mei 2024 door Google opgelost door ervoor te zorgen dat het pakket alleen vanuit een privérepository werd geïnstalleerd. Het heeft ook de extra voorzorgsmaatregel toegevoegd om de checksum van het pakket te verifiëren om de integriteit ervan te bevestigen en te valideren dat er niet mee is geknoeid.
De Python Packaging Authority (PyPA) is zich naar verluidt al sinds maart 2018 bewust van de risico’s die het argument “–extra-index-url” met zich meebrengt. Gebruikers wordt aangeraden om PyPI niet te gebruiken in gevallen waarin het interne pakket moet worden opgehaald.
“Pakketten worden geacht uniek te zijn tot aan de naam en versie, dus twee wielen met dezelfde pakketnaam en versie worden door pip als niet te onderscheiden beschouwd,” merkte een PyPA-lid destijds op. “Dit is een opzettelijke eigenschap van de pakketmetadata en zal waarschijnlijk niet veranderen.”
Als onderdeel van de oplossing raadt Google ontwikkelaars nu ook aan om het argument “–index-url” te gebruiken in plaats van het argument “–extra-index-url” en dat GCP-klanten gebruikmaken van een virtuele opslagplaats voor Artifact Registry wanneer ze meerdere opslagplaatsen nodig hebben.
“Het argument ‘–index-url’ vermindert het risico op aanvallen die verwarring over afhankelijkheid veroorzaken, omdat er alleen wordt gezocht naar pakketten in het register die zijn gedefinieerd als een bepaalde waarde voor dat argument”, aldus Matan.