
Um projeto de documentação e rastreamento com o objetivo de tornar os sistemas de gerenciamento de pacotes mais seguros.
Um projeto de documentação e acompanhamento com o objetivo de tornar os sistemas de gerenciamento de pacotes mais seguros. Consulte issues para uma lista muito preliminar de alguns dos problemas relacionados que vimos.
| Linguagem | Nome | Nível | Controles | Líder do Packman | Página do 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 |
As seções a seguir descrevem cada um dos controles referenciados na tabela acima com mais detalhes.
Autenticação forte significa que o sistema exige:
Como poder enviar novo código a um gerenciador de pacotes é uma função poderosa, é importante saber que isso não pode ser feito facilmente adivinhando a senha de um mantenedor. Implementar MFA
Para atender a esse requisito, o gerenciador de pacotes deve ter uma forma de receber informações de segurança da comunidade e um processo para lidar com esse feedback. Um e-mail publicado, como security@, junto com um mecanismo para garantir que o feedback seja capturado e respondido, atenderia a esse requisito.
Os pacotes podem, por si próprios, identificar problemas ou ser notificados sobre eles. A plataforma deve oferecer suporte a uma forma de um mantenedor de pacote relatar uma versão com um problema de segurança e:
Os pacotes devem, de alguma forma, estar vinculados a uma versão explícita do código (uma tag?) em um repositório público conhecido (bitbucket.org, github.com).
Quando os pacotes são atualizados, todos os mantenedores daquele pacote devem ser notificados.
Quando problemas de segurança são identificados em um pacote, deve haver uma forma de o consumidor verificá-los. Isso poderia ser um comando que permite ao consumidor verificar problemas conhecidos.
Deve ser possível que desenvolvedores assinem seu código. Quando o fizerem, o gerenciador de pacotes deve verificar as assinaturas e fornecer uma forma de distribuí-las aos consumidores do pacote.
O gerenciador de pacotes fornece um método para verificar a integridade do pacote baixado.
Nenhum - nenhuma verificação de integridade é feita Parcial - a verificação de integridade é feita usando um método fraco* Sim - A verificação é feita usando um método suficientemente seguro
A plataforma pode fornecer análise estática de código para identificar proativamente possíveis problemas em bibliotecas importantes.
A plataforma pode rastrear vulnerabilidades em bibliotecas das quais o pacote depende (pacotes upstream) e notificar os mantenedores quando for o caso.
O gerenciador de pacotes não deve executar código na instalação do pacote.
O gerenciador de pacotes não deve coletar informações sobre o projeto que usa a dependência.
O sistema de gerenciamento de pacotes deve ter um guia para funções em um projeto, que deve incluir um plano de sucessão e termos para engajamento ativo.
Os mantenedores do sistema de gerenciamento de pacotes devem ter um processo para revisar as funções nos projetos, garantindo que os mantenedores estejam ativos.
Os consumidores de bibliotecas devem ser capazes de marcar seu interesse ou aprovação em uma biblioteca específica, para que possam garantir que as compilações usem apenas bibliotecas que marcaram de certas formas. Ex: marcadas como revisadas por código.
O gerenciador de pacotes fornece algum controle para evitar que as credenciais de autenticação / token / sessão sejam vazadas como parte do conteúdo do pacote.
Nenhum - nenhum controle está presente e o usuário deve se proteger Parcial - inserir comentário Sim - credenciais / tokens são bloqueados da publicação ou são revogados por meio de uma forma automatizada acionada pela publicação de um pacote. Os usuários devem ser notificados de alguma forma de que a ação foi tomada.
| Controle | Nível 1 | Nível 2 | Nível 3 |
|---|
| Autenticação Forte | ☐ | ☑ | ☑ |
| MFA para Enviar Artefatos | ☐ | ☑ | ☑ |
| Contatos de Segurança | ☐ | ☑ | ☑ |
| Pacotes Podem Notificar Problemas de Segurança | ☐ | ☑ | ☑ |
| Pacote de código vinculado ao código-fonte | ☐ | ☑ | ☑ |
| Impede que Credenciais Sejam Publicadas | ☐ | ☑ | ☑ |
| Notificações de Atualização | ☐ | ☑ | ☑ |
| Assinatura de Código | ☐ | ☐ | ☑ |
| Verificação de Integridade | ☐ | ☐ | ☑ |
| Análise de Código (estática) | ☐ | ☐ | ☑ |
| Análise de Dependências de Código | ☐ | ☐ | ☑ |
| Gerenciador de Pacotes Não Executa Código | ☐ | ☐ | ☑ |
| Gerenciador de Pacotes Não Coleta Informações | ☐ | ☐ | ☑ |
| Guia de Funções do Projeto | ☐ | ☐ | ☑ |
| Revisão de Funções do Projeto | ☐ | ☐ | ☑ |
| Marcação de Bibliotecas no Nível da Conta | ☐ | ☐ | ☐ |