Confundido es una utensilio para realizar espacios de nombres libres persistentes para nombres de paquetes privados a los que se hace remisión en la configuración de dependencia para Python (pypi) requirements.txt
, JavaScript (npm) package.json
, PHP (compositor) composer.json
o MVN (maven) pom.xml
.
¿Qué es todo esto?
El 9 de febrero de 2021, un investigador de seguridad Alex Birsan publicó un artículo que tocaba diferentes fallas de orden de resolución en herramientas de administración de dependencias presentes en múltiples ecosistemas de lenguajes de programación.
Microsoft publicó un documento técnico que describe formas de mitigar el impacto, mientras que la causa raíz aún permanece.
Interpretar el resultado de la utensilio
confused
simplemente lee un archivo de definición de dependencia de una aplicación y verifica los repositorios de paquetes públicos para cada entrada de dependencia en ese archivo. Se procederá a reportar todos los nombres de paquetes que no se encuentran en los repositorios públicos, estado que implica que un paquete podría ser pusilánime a este tipo de ataque, mientras que este vector aún no ha sido explotado.
Sin secuestro, esto no significa que una aplicación no esté siendo explotada de forma activa. Si sabe que su software utiliza repositorios de paquetes privados, debe comprobar de que los espacios de nombres para sus paquetes privados hayan sido reclamados por una parte de confianza (normalmente usted o su empresa).
Falsos positivos conocidos
Algunos ecosistemas de empaquetado como npm tienen un concepto llamado «alcances» que pueden ser privados o públicos. En esquema, significa un espacio de nombres que tiene un nivel superior: el efecto. Los ámbitos no son inherentemente visibles públicamente, lo que significa que confused
no puede detectar de forma fiable si se ha reclamado. Si su aplicación utiliza nombres de paquetes con ámbito, debe comprobar de que una parte de confianza haya reclamado el nombre del ámbito en los repositorios públicos.
Instalación
Uso
Uso:
./confundido [-l LANGUAGENAME] depfilename.ext
Uso de ./confused:
-l cautiverio
Sistema de repositorio de paquetes. Títulos posibles: «pip», «npm», «composer», «mvn» (predeterminado «npm»)
-s cautiverio
Nómina separada por comas de espacios de nombres seguros conocidos. Soporta comodines
-v Salida detallada
Ejemplo
Python (PyPI)
./confused -l pip requirements.txt
Problemas encontrados, los siguientes paquetes no están disponibles en los repositorios de paquetes públicos:
[!] internal_package1
JavaScript (npm)
./confused -l npm package.json
Problemas encontrados, los siguientes paquetes no están disponibles en los repositorios de paquetes públicos:
[!]internal_package1
[!]@ miempresa / paquete_interno1
[!]@ miempresa / paquete_interno2
#Ejemplo cuando el ámbito privado de @mycompany se ha registrado en npm, usando -s
./confused -l npm -s ‘@ mycompany / *’ package.json
Problemas encontrados, los siguientes paquetes no están disponibles en los repositorios de paquetes públicos:
[!]internal_package1
Maven (mvn)
./confused -l mvn pom.xml
Problemas encontrados, los siguientes paquetes no están disponibles en los repositorios de paquetes públicos:
[!]interno
[!]interno / paquete1
[!]internal / _package2