
Un proyecto de documentación y seguimiento con el objetivo de hacer más seguros los sistemas de gestión de paquetes.
Un proyecto de documentación y seguimiento con el objetivo de hacer que los sistemas de gestión de paquetes sean más seguros. Consulte problemas para obtener una lista muy aproximada de algunos de los problemas relacionados que hemos visto.
| Lenguaje | Nombre | Nivel | Controles | Responsable de Packman | Página de Packman |
|---|
| JavaScript | npm | 1 | npm | ||
| Ruby | RubyGems | 1 | rubygems | ||
| Python | PyPi | 1 | pip/pypi | ||
| Java | Maven Central | 2 | maven central | ||
| Java | Android Central | ? | |||
| .Net | NuGet | 2 | nuget | ||
| Docker Hub | Docker | 1 | |||
| Golang | go get | 1 | golang | ||
| PHP | Composer | ? | |||
| Cocoa | Cocoa Pods | ? | |||
| Swift | Swift Package Manager | 1 | swiftpm | ||
| Rust | Cargo | 2? | rustcargo |
| Control | Nivel 1 | Nivel 2 | Nivel 3 |
|---|---|---|---|
| Autenticación fuerte | ☐ | ☑ | ☑ |
| MFA para publicar artefactos | ☐ | ☑ | ☑ |
| Contactos de seguridad | ☐ | ☑ | ☑ |
| Los paquetes pueden notificar problemas de seguridad | ☐ | ☑ | ☑ |
| Paquete de código vinculado al código fuente | ☐ | ☑ | ☑ |
| Evita que se publiquen credenciales | ☐ | ☑ | ☑ |
| Notificaciones de actualización | ☐ | ☑ | ☑ |
| Firma de código | ☐ | ☐ | ☑ |
| Verificación de integridad | ☐ | ☐ | ☑ |
| Análisis de código (estático) | ☐ | ☐ | ☑ |
| Análisis de dependencias de código | ☐ | ☐ | ☑ |
| El gestor de paquetes no ejecuta código | ☐ | ☐ | ☑ |
| El gestor de paquetes no recopila información | ☐ | ☐ | ☑ |
| Guía de roles de proyecto | ☐ | ☐ | ☑ |
| Revisión de roles de proyecto | ☐ | ☐ | ☑ |
| Etiquetado de bibliotecas a nivel de cuenta | ☐ | ☐ | ☐ |
Las siguientes secciones describen en detalle cada uno de los controles referenciados en la tabla anterior.
La autenticación fuerte significa que el sistema requiere:
Dado que poder enviar código nuevo a un gestor de paquetes es una función poderosa, es importante saber que no se puede lograr fácilmente adivinando la contraseña de un mantenedor. Implementar MFA
Para cumplir este requisito, el gestor de paquetes debe tener una forma de recibir información de seguridad de la comunidad y un proceso para manejar dicha retroalimentación. Un correo electrónico publicado como security@, junto con un mecanismo para garantizar que la retroalimentación se capture y responda, cumpliría este requisito.
Los paquetes pueden identificar problemas por sí mismos o ser notificados de ellos. La plataforma debería ofrecer una forma para que el mantenedor de un paquete informe de una versión con un problema de seguridad y:
Los paquetes deben estar vinculados de alguna manera a una versión explícita de código (¿una etiqueta?) en un repositorio público conocido (bitbucket.org, github.com).
Cuando se actualicen los paquetes, se debe notificar a todos los mantenedores de ese paquete.
Cuando se identifiquen problemas de seguridad en un paquete, debería haber una forma de que un consumidor los consulte. Esto podría ser un comando que permita al consumidor comprobar problemas conocidos.
Debería ser posible que los desarrolladores firmen su código. Cuando lo hagan, el gestor de paquetes debería verificar las firmas y proporcionar una forma de distribuirlas a los consumidores del paquete.
El gestor de paquetes proporciona un método para verificar la integridad del paquete descargado.
Ninguno - no se realiza verificación de integridad Parcial - la verificación de integridad se realiza mediante un método débil* Sí - la verificación se realiza mediante un método suficientemente seguro
La plataforma puede proporcionar análisis estático de código para identificar de forma proactiva posibles problemas en bibliotecas importantes.
La plataforma puede rastrear vulnerabilidades en las bibliotecas de las que depende el paquete (paquetes ascendentes) y notificar a los mantenedores en ese caso.
El gestor de paquetes no debería ejecutar código al instalar el paquete.
El gestor de paquetes no debería recopilar información sobre el proyecto que utiliza la dependencia.
El sistema de gestión de paquetes debería tener una guía de roles en un proyecto que incluya un plan de sucesión y términos para la participación activa.
Los mantenedores del sistema de gestión de paquetes deberían tener un proceso para revisar los roles en los proyectos a fin de garantizar que los mantenedores estén activos.
Los consumidores de bibliotecas deberían poder etiquetar su interés o aprobación en una biblioteca específica para asegurarse de que las compilaciones solo utilicen bibliotecas que hayan etiquetado de ciertas maneras. P. ej., marcada como revisada.
El gestor de paquetes proporciona algún control para evitar que las credenciales de autenticación / token / sesión se filtren como parte del contenido del paquete.
Ninguno - no hay ningún control y el usuario debe protegerse Parcial - insertar comentario Sí - las credenciales / tokens se bloquean para su publicación o se revocan mediante un método automatizado activado por la publicación de un paquete. Los usuarios deben ser notificados de alguna manera de que se ha tomado una acción.