Tengo problemas para resolver una vulnerabilidad ReDoS identificada por npm audit . Mi aplicación tiene una subdependencia ansi-html anidada que es vulnerable a ataques, pero desafortunadamente, parece que los mantenedores se han ausentado sin permiso . Como puede ver en la sección de comentarios de ese problema de Github, para solucionar este problema, la comunidad ha creado una bifurcación del repositorio llamado ansi-html-community que se encuentra aquí , que aborda esta vulnerabilidad.
Por lo tanto, me gustaría reemplazar todas las referencias anidadas de ansi-html con ansi-html-community .
Mi estrategia normal de usar npm-force-resolutions no parece poder anular las subdependencias anidadas con un paquete diferente por completo, sino solo los mismos paquetes que tienen un número de versión diferente. He investigado esto durante varias horas, pero desafortunadamente, la única forma que he encontrado para solucionarlo parece ser con yarn , que ahora estoy considerando seriamente usar en lugar de npm. Sin embargo, esto no es ideal ya que toda nuestra canalización de CI/CD está configurada para usar npm.
¿Alguien sabe de alguna otra forma de lograr la sustitución/resolución de paquetes de subdependencia anidados sin tener que cambiar al uso de hilo?
Estas son preguntas de interés que pude encontrar, pero desafortunadamente, tienden a discutir solo métodos para anular el número de versión del paquete, no el paquete en sí.
¿Cómo anulo las versiones de dependencia anidadas de NPM?
npm shrinkwrap (no ideal):npm: ¿cómo anular las dependencias de un paquete dependiente?
Me lo imaginé. A partir de octubre de 2021, la solución que usa npm-force-resolutions es en realidad muy similar a cómo la especificaría usando yarn . Solo necesita proporcionar un enlace al tarball donde normalmente especificaría el número de versión principal. Su sección de resoluciones de package.json debería verse así:
"resolutions": { "ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" }Para encontrar el enlace al tarball, use el siguiente comando, modificando su registro según sea necesario:
npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/ Además, tenga en cuenta que para que npm-force-resolutions funcione cuando ejecuta npm install , necesitará una entrada de preinstall en la sección de scripts de package.json :
"scripts": { "preinstall": "npx npm-force-resolutions" }Para aquellos que necesitan la misma solución con hilo, simplemente agregue esto a su paquete.json
"resolutions": { "ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" } y luego ejecute yarn install
también puede hacerlo después de esto, si no funciona de inmediato
rm yarn.lock
yarn import