Experimenteer met het maken van een NPM-pakket dat afhankelijk is van alle pakketten in de repository

Een van de ontwikkelaars van JavaScript-pakketten experimenteerde met het maken en plaatsen in de NPM-repository van het “alles”-pakket, dat alle bestaande pakketten in de repository met afhankelijkheden omvat. Om deze functie te implementeren heeft het “alles”-pakket directe afhankelijkheden met vijf “@everything-registry/chunk-N”-pakketten, die op hun beurt afhankelijkheden hebben van meer dan 3000 “sub-chunk-N”-pakketten, die elk binden aan 800 bestaande pakketten in de repository.

Het plaatsen van "alles" in NPM had twee interessante effecten. Ten eerste is het “alles”-pakket een soort hulpmiddel geworden voor het uitvoeren van DoS-aanvallen, omdat een poging om het te installeren leidt tot het downloaden van miljoenen pakketten die in NPM worden gehost en het uitputten van de beschikbare schijfruimte of het stoppen van de uitvoering van bouwprocessen. Volgens NPM-statistieken is het pakket ongeveer 250 keer gedownload, maar niemand neemt de moeite om het als afhankelijkheid aan een ander pakket toe te voegen nadat het account van de ontwikkelaar was gehackt om sabotage te plegen. Bovendien werden sommige services en tools die nieuwe door NPM gehoste pakketten monitoren en controleren, onbewust blootgesteld aan aanvallen.

Ten tweede blokkeerde het publiceren van het “alles”-pakket effectief de mogelijkheid om pakketten in NPM te verwijderen die in de lijst met afhankelijkheden terechtkwamen. Een pakket uit NPM kan alleen door de auteur worden verwijderd als het nog niet in de afhankelijkheden van andere pakketten wordt gebruikt, maar na de publicatie van “alles” bleken de afhankelijkheden alle pakketten in de repository te bestrijken. Het is opmerkelijk dat de verwijdering van het pakket "alles" zelf ook werd geblokkeerd, aangezien 9 jaar geleden een testpakket "alles-anders" in de repository werd geplaatst, dat de string "alles" in de lijst met afhankelijkheden bevatte. Na publicatie werd het “alles”-pakket dus afhankelijk van een ander pakket.

Bron: opennet.ru

Voeg een reactie