Et afhængighedsangreb tillader udførelse af kode hos PayPal, Microsoft, Apple, Netflix, Uber og 30 andre virksomheder

Få dage siden en overraskende enkel metode blev frigivet, der gør det muligt at angribe afhængigheder i applikationer som er udviklet ved hjælp af interne pakkelager. Forskerne, der identificerede problemet de var i stand til at køre din kode på de interne servere fra 35 virksomheder, herunder PayPal, Microsoft, Apple, Netflix, Uber, Tesla og Shopify.

Hackerne blev udført som en del af Bug Bounty-programmerne i samordning med de angrebne virksomheder, og gerningsmændene har allerede modtaget $ 130.000 i bonusser for at identificere sårbarheder.

Metoden er baseret på det faktum, at mange virksomheder bruger standardopbevaringsafhængigheder af NPM, PyPI og RubyGems i deres interne applikationersamt interne afhængigheder, der ikke distribueres offentligt eller downloades fra deres egne arkiver.

Problemet er, at pakkeforvaltere som npm, pip og perle de forsøger at downloade virksomhedernes interne afhængigheder, selv fra de offentlige arkiver. For et angreb, bare definer navnene på pakkerne med interne afhængigheder og opret dine egne pakker med de samme navne i de offentlige arkiver af NPM, PyPI og RubyGems.

Problemet er ikke specifikt for NPM, PyPI og RubyGems, og det manifesterer sig også på andre systemer som NuGet, Maven og Garn.

Ideen til den foreslåede metode opstod, efter at en forsker ved et uheld bemærkede, at i en offentligt tilgængelig kode, der blev offentliggjort på GitHub, mange virksomheder fjerner ikke omtale af yderligere afhængigheder fra deres manifestfiler bruges i interne projekter eller ved implementering af udvidede funktioner. Lignende spor er fundet i JavaScript-kode til webservices såvel som i mange virksomheders Node.JS-, Python- og Ruby-projekter.

De vigtigste lækager var relateret til indlejring af indholdet fra package.json-filerne i den offentligt tilgængelige JavaScript-kode under byggeprocessen såvel som ved brug af faktiske stielementer i kræver () opkald, som kan bruges til at bedømme afhængighedsnavne.

Scanning af flere millioner virksomhedsdomæner afslørede flere tusinde JavaScript-pakkenavne som ikke var i NPM-arkivet. Efter at have samlet en database med interne pakkenavne, besluttede forskeren at gennemføre et eksperiment for at hacke infrastrukturen hos virksomheder, der deltager i Bug Bounty-programmer. Resultaterne var overraskende effektive og forskeren var i stand til at køre sin kode på mange udviklingscomputere og servere, der var ansvarlige for bygning eller test baseret på kontinuerlige integrationssystemer.

Ved download af afhængigheder installerede pakkeadministratorer npm, pip og perle hovedsageligt pakker fra de primære offentlige arkiver NPM, PyPI og RubyGems, som blev anset for at have højere prioritet.

Tilstedeværelsen af ​​lignende pakker med de samme navne i arkiverne til private virksomheder blev ignoreret uden at give nogen advarsler eller forårsage nedbrud der kunne tiltrække administratørers opmærksomhed. I PyPI blev downloadprioriteten påvirket af versionsnummeret (uanset lageret blev den seneste version af pakken downloadet). I NPM og RubyGems var prioriteten kun depotafhængig.

Forskeren har placeret pakker i NPM-, PyPI- og RubyGems-arkiver, der krydser navnene på de interne afhængigheder, der er fundet, tilføjer kode til scriptet, der kører før installationen (forudinstalleret i NPM) for at indsamle oplysninger om systemet og indsende oplysningerne modtaget til den eksterne vært.

For at formidle information om hackets succes, omgå firewalls, der blokerer ekstern trafik, metoden til at organisere hemmelig kanalkommunikation via DNS-protokollen. Koden, der kørte, løste værten i det angribende domæne under kontrol af det angribende domæne, hvilket gjorde det muligt at indsamle oplysninger om vellykkede operationer på DNS-serveren. Oplysninger om værten, brugernavnet og den aktuelle sti blev videregivet.

75% af alle registrerede kodeudførelser var associeret med NPM-pakkedownloads, primært på grund af det faktum, at der var signifikant flere interne modulnavne i JavaScript end afhængighedsnavne i Python og Ruby.

kilde: https://medium.com/


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.