
Un progetto di documentazione e monitoraggio con l'obiettivo di rendere più sicuri i sistemi di gestione dei pacchetti.
Un progetto di documentazione e monitoraggio con l'obiettivo di rendere più sicuri i sistemi di gestione dei pacchetti. Vedi issues per un elenco molto approssimativo di alcuni dei problemi correlati che abbiamo riscontrato.
| Language | Name | Tier | Controls | Packman Lead | Packman Page |
|---|---|---|---|---|---|
| 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 |
Le sezioni seguenti descrivono in dettaglio ciascuno dei controlli indicati nella tabella precedente.
Strong authentication significa che il sistema richiede:
Poiché la possibilità di inviare nuovo codice a un gestore di pacchetti è una funzione potente, è importante sapere che non può essere eseguita facilmente indovinando la password di un maintainer. Implementare MFA
Per soddisfare questo requisito, il gestore di pacchetti deve avere un modo per ricevere informazioni sulla sicurezza dalla community e un processo per gestire tale feedback. Un'email pubblicata come security@, insieme a un meccanismo per garantire che il feedback venga acquisito e a cui venga data risposta, soddisferebbe questo requisito.
I pacchetti possono essi stessi identificare problemi o essere notificati di problemi. La piattaforma dovrebbe supportare un modo per un maintainer di pacchetto di segnalare una release con un problema di sicurezza e:
I pacchetti devono in qualche modo essere legati a una versione esplicita del codice (un tag?) in un repository pubblico ben noto (bitbucket.org, github.com).
Quando i pacchetti vengono aggiornati, tutti i maintainer di quel pacchetto dovrebbero essere notificati.
Quando vengono identificati problemi di sicurezza in un pacchetto, dovrebbe esserci un modo per un consumatore di verificarli. Potrebbe essere un comando che consente al consumatore di controllare i problemi noti.
Dovrebbe essere possibile per gli sviluppatori firmare il proprio codice. Quando lo fanno, il gestore di pacchetti dovrebbe verificare le firme e fornire un modo per distribuirle ai consumatori del pacchetto.
Il gestore di pacchetti fornisce un metodo per verificare l'integrità del pacchetto scaricato.
None - nessuna verifica di integrità viene eseguita Partial - la verifica di integrità viene eseguita usando un metodo debole* Yes - la verifica viene eseguita usando un metodo sufficientemente sicuro
La piattaforma può fornire analisi statica del codice per identificare in modo proattivo potenziali problemi in librerie importanti.
La piattaforma può tracciare le vulnerabilità nelle librerie da cui il pacchetto dipende (pacchetti upstream) e notificare i maintainer quando è il caso.
Il gestore di pacchetti non dovrebbe eseguire codice durante l'installazione del pacchetto.
Il gestore di pacchetti non dovrebbe raccogliere informazioni sul progetto che utilizza la dipendenza.
Il sistema di gestione dei pacchetti dovrebbe avere una guida per i ruoli in un progetto che includa un piano di successione e termini per un coinvolgimento attivo.
I maintainer del sistema di gestione dei pacchetti dovrebbero avere un processo per rivedere i ruoli nei progetti per garantire che i maintainer siano attivi.
I consumatori di librerie dovrebbero poter etichettare il proprio interesse o la propria approvazione per una specifica libreria in modo da garantire che le build utilizzino solo librerie che hanno etichettato in determinati modi. Es. contrassegnate come revisionate dal codice.
Il gestore di pacchetti fornisce alcuni controlli per impedire che le credenziali di autenticazione / token / sessione vengano divulgate come parte del contenuto del pacchetto.
None - nessun controllo è presente e l'utente deve proteggersi da solo Partial - inserire commento Yes - le credenziali / i token sono bloccati dalla pubblicazione o revocati tramite un modo automatizzato innescato dalla pubblicazione di un pacchetto. Gli utenti dovrebbero essere notificati in qualche modo che l'azione è stata intrapresa.
| Control | Tier 1 | Tier 2 | Tier 3 |
|---|
| Strong Authentication | ☐ | ☑ | ☑ |
| MFA To Push Artifacts | ☐ | ☑ | ☑ |
| Security Contacts | ☐ | ☑ | ☑ |
| Packages Can Notify of Security Issues | ☐ | ☑ | ☑ |
| Code package tied to source code | ☐ | ☑ | ☑ |
| Prevents Credential from Being Published | ☐ | ☑ | ☑ |
| Update notifications | ☐ | ☑ | ☑ |
| Code signing | ☐ | ☐ | ☑ |
| Integrity Verification | ☐ | ☐ | ☑ |
| Code analysis (static) | ☐ | ☐ | ☑ |
| Code Dependency Analysis | ☐ | ☐ | ☑ |
| Package Manager Does Not Run Code | ☐ | ☐ | ☑ |
| Package Manager Does Not Collect Info | ☐ | ☐ | ☑ |
| Project Roles Guide | ☐ | ☐ | ☑ |
| Project Roles Review | ☐ | ☐ | ☑ |
| Account Level Library Tagging | ☐ | ☐ | ☐ |