Un atac de dependență permite executarea codului la PayPal, Microsoft, Apple, Netflix, Uber și alte 30 de companii

Acum cateva zile a fost lansată o metodă surprinzător de simplă care permite atacarea dependențelor în aplicații care sunt dezvoltate folosind depozite interne de pachete. Cercetătorii care au identificat problema au putut să vă ruleze codul pe serverele interne a 35 de companii, inclusiv PayPal, Microsoft, Apple, Netflix, Uber, Tesla și Shopify.

Hack-urile au fost efectuate ca parte a programelor Bug Bounty, în coordonare cu companiile atacate, iar făptașii au primit deja bonusuri de 130.000 USD pentru identificarea vulnerabilităților.

Metoda se bazează pe faptul că multe companii utilizează dependențe standard de depozitare NPM, PyPI și RubyGems în aplicațiile lor interne, precum și dependențe interne care nu sunt distribuite public sau descărcate din propriile depozite.

Problema este că managerii de pachete ca npm, pip și gem încearcă să descarce dependențele interne ale companiilor, chiar și din depozitele publice. Pentru un atac, definiți doar numele pachetelor cu dependențe interne și creați propriile pachete cu aceleași nume în depozitele publice NPM, PyPI și RubyGems.

Problema nu este specifică NPM, PyPI și RubyGems și se manifestă și pe alte sisteme precum NuGet, Maven și Yarn.

Ideea pentru metoda propusă a apărut după ce un cercetător a observat din greșeală că în codul public publicat pe GitHub, multe companii nu elimină mențiunea dependențelor suplimentare din fișierele lor manifeste utilizate în proiecte interne sau la implementarea funcționalităților extinse. Urme similare au fost găsite în codul JavaScript pentru serviciile web, precum și în proiectele Node.JS, Python și Ruby ale multor companii.

Principalele scurgeri au fost legate de încorporarea conținutului din fișierele package.json din codul JavaScript disponibil public în timpul procesului de construire, precum și cu utilizarea elementelor de cale reale în apelurile require (), care pot fi utilizate pentru a judeca numele dependenței.

Scanarea a câteva milioane de domenii corporative a dezvăluit câteva mii de nume de pachete JavaScript care nu se aflau în depozitul NPM. După ce a compilat o bază de date cu numele pachetelor interne, cercetătorul a decis să efectueze un experiment pentru a pirata infrastructura companiilor care participă la programele Bug Bounty. Rezultatele au fost surprinzător de eficiente iar cercetătorul a reușit să-și ruleze codul pe multe computere și servere de dezvoltare responsabile de construirea sau testarea bazată pe sisteme de integrare continuă.

La descărcarea dependențelor, managerii de pachete npm, pip și gem au instalat în principal pachetele din depozitele publice primare NPM, PyPI și RubyGems, care au fost considerate a fi de prioritate mai mare.

Prezența pachetelor similare cu aceleași nume în depozitele companiilor private a fost ignorată fără a afișa avertismente sau a provoca blocări care ar putea atrage atenția administratorilor. În PyPI, prioritatea de descărcare a fost influențată de numărul versiunii (indiferent de depozit, a fost descărcată cea mai recentă versiune a pachetului). În NPM și RubyGems, prioritatea depindea doar de depozit.

Cercetătorul a plasat pachete în depozite NPM, PyPI și RubyGems care se intersectează cu numele dependențelor interne găsite, adăugând cod la scriptul care rulează înainte de instalare (preinstalat în NPM) pentru a colecta informații despre sistem și a trimite informațiile primit către gazda externă.

Pentru a transmite informații despre succesul hack-ului, ocoliți firewall-urile care blochează traficul extern, metoda de organizare a comunicațiilor pe canale ascunse prin protocolul DNS. Codul care rulează a rezolvat gazda din domeniul atacant sub controlul domeniului atacant, ceea ce a făcut posibilă colectarea informațiilor despre operațiunile de succes pe serverul DNS. Au fost transmise informații despre gazdă, numele de utilizator și calea curentă.

75% din toate execuțiile de cod înregistrate au fost asociate cu descărcările pachetelor NPM, în principal datorită faptului că au existat semnificativ mai multe nume de module interne în JavaScript decât nume de dependențe în Python și Ruby.

Fuente: https://medium.com/


Conținutul articolului respectă principiile noastre de etică editorială. Pentru a raporta o eroare, faceți clic pe aici.

Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.