
Un projet de documentation et de suivi visant à rendre les systèmes de gestion de paquets plus sécurisés.
Un projet de documentation et de suivi visant à rendre les systèmes de gestion de paquets plus sécurisés. Voir issues pour une liste très approximative de quelques-uns des problèmes connexes que nous avons rencontrés.
| Langage | Nom | Niveau | Contrôles | Responsable Packman | Page 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 |
Les sections suivantes décrivent chacun des contrôles mentionnés dans le tableau ci-dessus plus en détail.
L'authentification forte signifie que le système exige :
Étant donné que pouvoir pousser du nouveau code vers un gestionnaire de paquets est une fonction puissante, il est important de savoir qu'elle ne peut pas être facilement réalisée en devinant le mot de passe d'un mainteneur. La mise en œuvre du MFA
Pour satisfaire cette exigence, le gestionnaire de paquets doit avoir un moyen de recevoir des informations de sécurité de la part de la communauté et un processus pour traiter ces retours. Un email publié comme security@, ainsi qu'un mécanisme pour garantir que les retours sont capturés et traités, satisferait à cette exigence.
Les paquets peuvent eux-mêmes identifier des problèmes ou être notifiés de problèmes. La plateforme devrait prendre en charge un moyen pour un mainteneur de paquet de signaler une version avec un problème de sécurité et :
Les paquets doivent d'une manière ou d'une autre être liés à une version explicite du code (un tag ?) dans un dépôt public bien connu (bitbucket.org, github.com).
Lorsque des paquets sont mis à jour, tous les mainteneurs de ce paquet devraient être notifiés.
Lorsque des problèmes de sécurité sont identifiés dans un paquet, il devrait y avoir un moyen pour un consommateur de les vérifier. Cela pourrait être une commande qui permet au consommateur de vérifier les problèmes connus.
Il devrait être possible pour les développeurs de signer leur code. Lorsqu'ils le font, le gestionnaire de paquets devrait vérifier les signatures et fournir un moyen de les distribuer aux consommateurs du paquet.
Le gestionnaire de paquets fournit une méthode pour vérifier l'intégrité du paquet téléchargé.
Aucun - aucune vérification d'intégrité n'est effectuée Partiel - la vérification d'intégrité est effectuée à l'aide d'une méthode faible* Oui - La vérification est effectuée à l'aide d'une méthode suffisamment sécurisée
La plateforme peut fournir une analyse de code statique pour identifier de manière proactive les problèmes potentiels dans les bibliothèques importantes.
La plateforme peut suivre les vulnérabilités dans les bibliothèques dont dépend le paquet (paquets en amont) et notifier les mainteneurs le cas échéant.
Le gestionnaire de paquets ne doit pas exécuter de code lors de l'installation du paquet.
Le gestionnaire de paquets ne doit pas collecter d'informations sur le projet utilisant la dépendance.
Le système de gestion de paquets devrait avoir un guide pour les rôles sur un projet qui devrait inclure un plan de succession et des conditions pour un engagement actif.
Les mainteneurs du système de gestion de paquets devraient avoir un processus pour réviser les rôles sur les projets afin de garantir que les mainteneurs sont actifs.
Les consommateurs de bibliothèques devraient pouvoir étiqueter leur intérêt ou approbation pour une bibliothèque spécifique afin de garantir que les builds n'utilisent que les bibliothèques qu'ils ont étiquetées de certaines manières. Par ex. marqué comme revu de code.
Le gestionnaire de paquets fournit un certain contrôle pour empêcher que les identifiants d'authentification / token / session ne soient divulgués dans le contenu du paquet.
Aucun - aucun contrôle n'est présent et l'utilisateur doit se protéger lui-même Partiel - insérer un commentaire Oui - les identifiants / tokens sont soit bloqués de la publication, soit révoqués de manière automatisée déclenchée par la publication d'un paquet. Les utilisateurs devraient être notifiés d'une manière ou d'une autre qu'une action a eu lieu.
| Contrôle | Niveau 1 | Niveau 2 | Niveau 3 |
|---|
| Authentification forte | ☐ | ☑ | ☑ |
| MFA pour pousser les artefacts | ☐ | ☑ | ☑ |
| Contacts de sécurité | ☐ | ☑ | ☑ |
| Les paquets peuvent notifier des problèmes de sécurité | ☐ | ☑ | ☑ |
| Paquet de code lié au code source | ☐ | ☑ | ☑ |
| Empêche la publication d'identifiants | ☐ | ☑ | ☑ |
| Notifications de mise à jour | ☐ | ☑ | ☑ |
| Signature de code | ☐ | ☐ | ☑ |
| Vérification d'intégrité | ☐ | ☐ | ☑ |
| Analyse de code (statique) | ☐ | ☐ | ☑ |
| Analyse des dépendances de code | ☐ | ☐ | ☑ |
| Le gestionnaire de paquets n'exécute pas de code | ☐ | ☐ | ☑ |
| Le gestionnaire de paquets ne collecte pas d'informations | ☐ | ☐ | ☑ |
| Guide des rôles du projet | ☐ | ☐ | ☑ |
| Révision des rôles du projet | ☐ | ☐ | ☑ |
| Étiquetage des bibliothèques au niveau du compte | ☐ | ☐ | ☐ |