Před pár dny byla vydána překvapivě jednoduchá metoda, která umožňuje útočit na závislosti v aplikacích které jsou vyvíjeny pomocí interních úložišť balíků. Vědci, kteří problém identifikovali byli schopni spustit váš kód na interních serverech 35 společností, včetně PayPal, Microsoft, Apple, Netflix, Uber, Tesla a Shopify.
Hacky byly prováděny v rámci programů Bug Bounty v koordinaci s napadenými společnostmi a pachatelé již obdrželi bonusy 130.000 XNUMX $ za identifikaci zranitelných míst.
Metoda je založena na skutečnosti, že mnoho společností používá ve svých interních aplikacích standardní závislosti repozitářů NPM, PyPI a RubyGems, jakož i interní závislosti, které nejsou veřejně distribuovány nebo stahovány z jejich vlastních úložišť.
Problém je v tom, že správci balíčků jako npm, pip a gem snaží se stáhnout vnitřní závislosti společností, a to i z veřejných úložišť. Za útok stačí definovat názvy balíčků s interními závislostmi a vytvořit si vlastní balíčky se stejnými názvy ve veřejných úložištích NPM, PyPI a RubyGems.
Problém není specifický pro NPM, PyPI a RubyGems a projevuje se také na jiných systémech, jako jsou NuGet, Maven a Yarn.
Myšlenka navrhované metody vznikla poté, co si výzkumník náhodou všiml, že ve veřejně dostupném kódu zveřejněném na GitHubu mnoho společností neodstraní zmínku o dalších závislostech ze svých souborů manifestů používané v interních projektech nebo při implementaci rozšířených funkcí. Podobné stopy byly nalezeny v kódu JavaScript pro webové služby a také v projektech Node.JS, Python a Ruby mnoha společností.
Hlavní úniky souvisely s vložením obsahu ze souborů package.json ve veřejně dostupném kódu JavaScriptu během procesu sestavování a také s použitím skutečných prvků cesty v volání require (), které lze použít k posouzení názvů závislostí.
Prohledání několika milionů podnikových domén odhalilo několik tisíc názvů balíčků JavaScript které nebyly v úložišti NPM. Po sestavení databáze interních názvů balíků se výzkumník rozhodl provést experiment s hacknutím infrastruktury společností účastnících se programů Bug Bounty. Výsledky byly překvapivě efektivní a výzkumník byl schopen spustit svůj kód na mnoha vývojových počítačích a serverech odpovědných za budování nebo testování na základě systémů nepřetržité integrace.
Při stahování závislostí správci balíků npm, pip a gem instalovali hlavně balíčky z primárních veřejných úložišť NPM, PyPI a RubyGems, které byly považovány za vyšší prioritu.
Přítomnost podobných balíčků se stejnými názvy v úložištích soukromých společností byla ignorována, aniž by zobrazovala varování nebo způsobovala selhání které by mohly přilákat pozornost správců. V PyPI byla priorita stahování ovlivněna číslem verze (bez ohledu na úložiště byla stažena nejnovější verze balíčku). V NPM a RubyGems byla priorita závislá pouze na úložišti.
Výzkumník umístil balíčky do repozitářů NPM, PyPI a RubyGems, které se protínají s názvy nalezených interních závislostí, a přidal kód do skriptu, který běží před instalací (předinstalovaný v NPM), aby shromáždil informace o systému a odeslal informace přijato externímu hostiteli.
Chcete-li sdělit informace o úspěchu hacku, obejít brány firewall blokující externí provoz, způsob organizace komunikace skrytých kanálů přes protokol DNS. Běžící kód vyřešil hostitele v útočící doméně pod kontrolou útočící domény, což umožnilo shromažďovat informace o úspěšných operacích na serveru DNS. Byly předány informace o hostiteli, uživatelském jménu a aktuální cestě.
75% všech zaznamenaných spuštění kódu bylo spojeno se stažením balíčků NPM, a to především kvůli skutečnosti, že v JavaScriptu bylo podstatně více interních názvů modulů než názvů závislostí v Pythonu a Ruby.
zdroj: https://medium.com/