Jak ręcznie naprawić luki w zabezpieczeniach npm?

98

Kiedy biegnę npm install , mówi found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details.

Jednak, npm audit fix wyjścioweup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

Czy to reviewoznacza, że ​​nie powinno to być naprawiane przez użytkownika?

Po uruchomieniu wyświetla npm auditlistę tabel, podobną do tej:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

W tym przykładzie sekcja naprawcza połączonej strony mówi Update to version 4.17.5 or later.. Jednak /node_modules/browser-sync/package.jsonsą tam wiersze:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

i koniec z lodashowymi zależnościami. Powinna więc być już wersja 4.17.5. Sprawdziłem też, /node_modules/lodash/lodash.jsonktóry ma var VERSION = '4.17.10';linię. W /node_modules/lodash/package.jsonistnieją te linie:

  "_from": "lodash@^4.17.4",
  "_id": "[email protected]",

Uważam, że wersja jest wyświetlana w „_id”, a nie w „_from”, więc wersje są poprawne, ale luka nadal pojawia się na liście kontrolnej.

Wciąż jestem nowy w node.js i te wiadomości bardzo mnie dezorientują. Czy jest jakiś sposób, aby to naprawić ręcznie lub pozbyć się tych wiadomości, z którymi nie mogę nic zrobić?

Jakupov
źródło

Odpowiedzi:

35

lodash-cliin devDependenciesnie ma wpływu na sposób browser-syncdziałania w projekcie, devDependenciessą ignorowane, gdy pakiet jest instalowany jako zależność.

Co auditRaport mówi, że jest to easy-extender, że ma lodashzależność:

browser-sync > easy-extender > lodash        

To zależy od Lodash 3 , podczas gdy problem został rozwiązany w Lodash 4. Problem można rozwiązać przez rozwidlenie easy-extender, aktualizację i zainstalowanie go zamiast pakietu z publicznego rejestru NPM. Ale nie ma prawdziwego problemu z tą zależnością.

auditważność raportu należy ocenić ręcznie. Nawet jeśli zagnieżdżona zależność wiąże się z zagrożeniem bezpieczeństwa, nie oznacza to, że została użyta funkcja, która wprowadza to zagrożenie. Nie oznacza to również, że nawet jeśli jest używany, wprowadza realne ryzyko ze względu na sposób, w jaki jest używany.

browser-syncjest narzędziem programistycznym, które nie jest używane w środowisku produkcyjnym, nie ma tak wielu scenariuszy, w których można by wykorzystać jego luki. I Prototype Zanieczyszczenia nie jest luka w ogóle, tylko zauważyć, że pakiet nie przestrzega dobrych praktyk, może być ignorowane.

Ogólnie jest to sposób na naprawienie zgłoszonych luk w zabezpieczeniach:

  • Sprawdź poczytalność
  • Jeśli jest to prawdziwy problem, sprawdź repozytorium podatnego pakietu pod kątem istniejących problemów i żądań żądań
  • Jeśli nie ma, zgłoś problem
  • Rozwidlaj repozytorium lub użyj istniejącego PR jako zależności git dopóki nie zostanie to naprawione w wersji NPM
  • W przypadku zależności zagnieżdżonych zrób to na kilku poziomach zagnieżdżenia

W większości przypadków oczekuje się, że nie przejdziesz dalej niż test poczytalności.

patch-packagemoże pomóc załatać zagnieżdżone zależności na miejscu, ale nie wpłynie to na auditraport.

Estus Flask
źródło
Nie zwróciłem uwagi na sekcję Path i naprawdę używa lodash v3.10.1, dzięki. Ale synchronizacja przeglądarki to tylko przykład, ostatnia lista. Tak więc mogę zignorować 2 słabe luki, ale czy mogę zignorować 31 umiarkowanych? Przypuszczam, że nie powinienem niczego modyfikować node_modules, więc czy rozwidlanie i naprawianie to jedyny sposób, aby się ich pozbyć? A jako nowy użytkownik nie mogę tego zrobić? Czy powinienem poinformować o nich programistów pakietów?
Jakupov
4
ale czy mogę zignorować 31 umiarkowanych? - na tym polega „kontrola zdrowia”, kieruj się własnym osądem. Im więcej uwagi poświęcisz temu, co faktycznie mówią te raporty, tym lepszym programistą możesz się stać pod względem bezpieczeństwa. Czy powinienem poinformować o nich programistów pakietów? - prawdopodobnie powinieneś (przynajmniej się zamknąć audit), odpowiedź na to odpowiada. Ludzie npm auditjakoś żyli bez . Szanse na to, że powodują rzeczywiste problemy z bezpieczeństwem aplikacji są bardzo niskie, ale nie wiedząc, czym są i jak są używane w Twojej aplikacji, nie mogę tego zagwarantować.
Estus Flask
Dzięki! Pisanie komentarza zajęło trochę czasu, więc nie widziałem edytowanej części przed komentowaniem.
Jakupov
6

Jeśli jesteś absolutnie pewien, że chcesz pominąć audyt, możesz to zrobić, dołączając --no-audit

 npm install --no-audit
Tjad Clark
źródło
3

„Poprawka audytu npm” zwiększy wersję zależności w pliku package.json, co może doprowadzić do złamania kodu. Lepszym sposobem jest więc otwarcie pliku package-lock.json i zaktualizowanie wersji zależności / subdependency do wymaganej wersji. Utrzymuj plik package-lock.json w repozytorium.

Czasami luki pochodzą z pakietów deweloperskich, w takim przypadku zignoruj ​​te luki, ponieważ nie są one wykrywane w produkcji.

nik
źródło
-3

Większość problemów pojawiła się w moim systemie z powodu pakietu npm. Próbowałem,

npm un npm

Nie musisz ponownie instalować.

Po prostu uruchom program ponownie. U mnie to zadziałało.

Gaurav Rana
źródło