¿Cómo arreglar las vulnerabilidades npm manualmente?

Cuando ejecuto npm install , dice que se found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details .

Sin embargo, las npm audit fix up to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

¿Esa review significa que no debe ser reparada por el usuario?

Cuando ejecuto npm audit me da una lista de tablas, similar a ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ 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 │ └───────────────┴──────────────────────────────────────────────────────────────┘ ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ 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 │ └───────────────┴──────────────────────────────────────────────────────────────┘ ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ 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 │ └───────────────┴──────────────────────────────────────────────────────────────┘

En este ejemplo, la sección de remediación de la página vinculada dice Update to version 4.17.5 or later. . Sin embargo, en /node_modules/browser-sync/package.json hay líneas:

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

Y no más dependencias de lodash. Así que ya debería ser v4.17.5. También verifiqué /node_modules/lodash/lodash.json que tiene var VERSION = '4.17.10'; línea. En /node_modules/lodash/package.json hay estas líneas:

  "_from": "lodash@^4.17.4", "_id": "lodash@4.17.10", 

Creo que la versión se muestra en “_id”, no en “_from”, por lo que las versiones son correctas pero la vulnerabilidad aún aparece en la lista de auditoría.

Todavía soy nuevo en node.js y esos mensajes me confunden mucho. ¿Hay alguna forma de arreglarlo manualmente o deshacerse de esos mensajes, no puedo hacer nada?

lodash-cli en devDependencies no afecta la forma en que funciona la browser-sync en su proyecto, las devDependencies se ignoran cuando un paquete se instala como una dependencia.

Lo que dice el informe de audit es que es easy-extender que tiene dependencia de datos:

 browser-sync > easy-extender > lodash 

Depende de Lodash 3 , mientras que el problema se solucionó en Lodash 4. El problema podría solucionarse bifurcando easy-extender , actualizándolo e instalándolo en lugar del paquete del registro público de NPM. Pero no hay problema real con esta dependencia.

audit importancia del informe de audit debe ser evaluada manualmente. Incluso si la dependencia anidada tiene un riesgo de seguridad, esto no significa que se usó una característica que introduce este riesgo. Esto tampoco significa que incluso si se usa, introduce un riesgo real debido a su uso.

browser-sync es una herramienta de desarrollo que no se utiliza en la producción, no hay tantos escenarios donde se puedan explotar sus vulnerabilidades. Y Prototype Pollution no es una vulnerabilidad en absoluto, solo un aviso de que un paquete no sigue las buenas prácticas, se puede ignorar.

En general, esta es la manera de arreglar las vulnerabilidades reportadas:

  • Hacer una prueba de cordura
  • En caso de que sea un problema real, consulte el repository del paquete vulnerable para los problemas existentes y las relaciones públicas
  • En caso de que no haya ninguno, envíe un problema.
  • Bifurque un repository o use el PR existente como dependencia de git hasta que se solucione en la versión NPM
  • En caso de dependencias anidadas, haga esto en varios niveles de anidación

La mayoría de las veces se espera que no avance más allá de un control de cordura.