Pred pár dňami bola vydaná prekvapivo jednoduchá metóda, ktorá umožňuje útočiť na závislosti v aplikáciách ktoré sa vyvíjajú pomocou interných archívov balíkov. Vedci, ktorí identifikovali problém dokázali spustiť váš kód na interných serveroch 35 spoločností vrátane PayPal, Microsoft, Apple, Netflix, Uber, Tesla a Shopify.
Hacky boli vykonané v rámci programov Bug Bounty v koordinácii s napadnutými spoločnosťami a páchatelia už dostali 130.000 XNUMX dolárov ako bonusy za identifikáciu zraniteľných miest.
Metóda je založená na skutočnosti, že veľa spoločností používa vo svojich interných aplikáciách štandardné závislosti repozitárov NPM, PyPI a RubyGems, ako aj interné závislosti, ktoré nie sú verejne distribuované alebo sťahované z vlastných úložísk.
Problém je v tom, že správcovia balíkov ako npm, pip a gem Pokúšajú sa prevziať interné závislosti spoločností, a to aj z verejných archívov. Za útok, stačí definovať názvy balíkov s internými závislosťami a vytvoriť si vlastné balíčky s rovnakými názvami vo verejných úložiskách NPM, PyPI a RubyGems.
Problém nie je špecifický pre NPM, PyPI a RubyGems a prejavuje sa aj na iných systémoch, ako sú NuGet, Maven a Yarn.
Myšlienka navrhovanej metódy prišla po tom, čo si výskumník náhodne všimol, že vo verejne dostupnom kóde zverejnenom na GitHube veľa spoločností neodstráni zmienku o ďalších závislostiach zo svojich súborov manifestov použité v interných projektoch alebo pri implementácii rozšírených funkcionalít. Podobné stopy sa našli v kóde webových služieb JavaScript, ako aj v projektoch Node.JS, Python a Ruby mnohých spoločností.
Hlavné úniky súviseli s vložením obsahu zo súborov package.json vo verejne dostupnom kóde JavaScript počas procesu zostavovania, ako aj s použitím skutočných prvkov cesty vo volaniach require (), ktoré sa dajú použiť na posúdenie mien závislostí.
Skenovanie niekoľkých miliónov podnikových domén odhalilo niekoľko tisíc názvov balíkov JavaScriptu ktoré sa nenachádzali v úložisku NPM. Po zostavení databázy interných názvov balíkov sa výskumník rozhodol uskutočniť experiment s hacknutím infraštruktúry spoločností zúčastňujúcich sa na programoch Bug Bounty. Výsledky boli prekvapivo efektívne a výskumník dokázal spustiť svoj kód na mnohých vývojových počítačoch a serveroch zodpovedných za budovanie alebo testovanie na základe systémov kontinuálnej integrácie.
Pri sťahovaní závislostí správcovia balíkov npm, pip a gem nainštalovali hlavne balíčky z primárnych verejných úložísk NPM, PyPI a RubyGems, ktoré boli považované za vyššiu prioritu.
Prítomnosť podobných balíkov s rovnakými názvami v archívoch súkromných spoločností bola ignorovaná bez zobrazenia varovania alebo zlyhania ktoré by mohli prilákať pozornosť správcov. V PyPI bola priorita sťahovania ovplyvnená číslom verzie (bez ohľadu na úložisko bola stiahnutá najnovšia verzia balíka). V NPM a RubyGems bola priorita závislá iba na úložisku.
Výskumník umiestnil balíčky do repozitárov NPM, PyPI a RubyGems, ktoré krížia názvy nájdených vnútorných závislostí, a pridal kód do skriptu, ktorý beží pred inštaláciou (predinštalovaný v NPM), aby zhromaždil informácie o systéme a odoslal prijaté informácie do externého hostiteľa.
Ak chcete sprostredkovať informácie o úspechu hacku, obíďte brány firewall blokujúce externú komunikáciu, spôsob organizácie komunikácie skrytých kanálov cez protokol DNS. Spustený kód vyriešil hostiteľa v útočiacej doméne pod kontrolou útočiacej domény, čo umožnilo zhromaždiť informácie o úspešných operáciách na serveri DNS. Informácie o hostiteľovi, používateľskom mene a aktuálnej ceste boli odovzdané.
75% všetkých zaznamenaných spustení kódu bolo spojených so sťahovaním balíkov NPM, a to predovšetkým kvôli skutočnosti, že interných názvov modulov JavaScriptu bolo podstatne viac ako mien závislostí Pythonu a Ruby.
Fuente: https://medium.com/