O NPM a fost identificată o vulnerabilitate care permite determinarea existenței pachetelor în depozitele private. Problema este cauzată de timpi de reacție diferiți atunci când se solicită un pachet existent și unul inexistent de către un utilizator terț, care nu are acces la depozit. În absența accesului pentru orice pachet în depozitele private, serverul registry.npmjs.org returnează o eroare cu codul „404”, dar în cazul existenței unui pachet cu numele solicitat, eroarea apare cu o întârziere semnificativă. Atacatorul poate folosi această particularitate pentru a determina prezența unui pachet prin generarea de nume de pachete din dicționare.
Determinarea numelui pachetelor în depozitele private poate fi necesară pentru a efectua un atac prin amestecarea dependențelor, manipulând intersecția numelui dependențelor din depozitele publice și interne. Știind ce pachete interne NPM sunt prezente în depozitele corporative, atacatorul poate publica pachete cu aceleași nume și numere de versiune mai recente în depozitul public NPM. Dacă, în timpul construirii, bibliotecile interne nu sunt legate explicit în setările la depozitul lor, managerul de pachete npm va considera mai prioritar depozitul public și va descărca pachetul pregătit de atacator.
GitHub a fost notificat despre problemă în martie, dar a refuzat să adauge protecții împotriva atacului, invocând constrângerile arhitecturale. Companiile care utilizează depozite private sunt recomandate să verifice periodic apariția numelui intersecților în depozitul public sau să creeze în numele lor stub-uri cu numele care repetă numele pachetelor din depozitele private, astfel încât atacatorii să nu poată publica pachetele lor cu nume intersecționale.
Sursa: opennet.ro
