In NPM is een tekortkoming ontdekt die het mogelijk maakt om de aanwezigheid van pakketten in gesloten repositories te bepalen. Het probleem is veroorzaakt door de verschillende reactietijden bij het opvragen van een bestaand en een niet-bestaand pakket door een externe gebruiker zonder toegang tot de repository. In het geval van gebrek aan toegang tot pakketten in privé-repositories retourneert de server registry.npmjs.org een foutmelding met code '404', maar als een pakket met de gevraagde naam bestaat, wordt de foutmelding met een significante vertraging gegeven. Een aanvaller kan deze eigenschap gebruiken om de aanwezigheid van een pakket te bepalen door namen van pakketten uit woordenboeken te raden.
Het bepalen van pakkettennamen in gesloten repositories kan nodig zijn om een aanval via dependency confusion uit te voeren, waarbij gebruik wordt gemaakt van de overlap van afhankelijkheidsnamen in openbare en interne repositories. Door te weten welke interne NPM-pakketten aanwezig zijn in bedrijf repositories, kan een aanvaller pakketten met dezelfde namen en nieuwere versie nummers in de openbare NPM-repository plaatsen. Als interne bibliotheken niet expliciet aan hun repository zijn gebonden in de instellingen tijdens het bouwen, beschouwt de package manager npm de openbare repository als hoger in prioriteit en zal het het door de aanvaller voorbereide pakket downloaden.
GitHub werd in maart op de kwestie gewezen, maar weigerde bescherming tegen de aanval toe te voegen en verwees naar architectonische beperkingen. Bedrijven die gebruik maken van privé-repositories wordt geadviseerd om periodiek te controleren op de aanwezigheid van overlappende namen in de openbare repository of om van hun naam mockups te creëren met namen die overeenkomen met de namen van pakketten in privé-repositories, zodat kwaadwillenden hun pakketten met overlappende namen niet kunnen plaatsen.
Bron: opennet.ru
