
Проект документации и отслеживания, направленный на повышение безопасности систем управления пакетами.
Проект документации и отслеживания, цель которого — сделать системы управления пакетами более безопасными. См. issues для очень приблизительного списка некоторых связанных проблем, которые мы видели.
| Язык | Имя | Уровень | Контроли | Ответственный Packman | Страница 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 |
В следующих разделах каждый из контролей, указанных в таблице выше, описан более подробно.
Строгая аутентификация означает, что система требует:
Поскольку возможность публиковать новый код в менеджере пакетов — мощная функция, важно понимать, что её нельзя легко выполнить, угадав пароль мейнтейнера. Внедрение MFA
Чтобы соответствовать этому требованию, менеджер пакетов должен иметь способ получать информацию о безопасности от сообщества и процесс обработки таких отзывов. Опубликованный адрес электронной почты, например security@, вместе с механизмом, обеспечивающим получение и обработку отзывов, удовлетворял бы этому требованию.
Пакеты могут сами выявлять проблемы или получать уведомления о проблемах. Платформа должна поддерживать способ, с помощью которого мейнтейнер пакета может сообщить о релизе с проблемой безопасности и:
Пакеты должны быть каким-то образом привязаны к явной версии кода (тегу?) в хорошо известном публичном репозитории (bitbucket.org, github.com).
Когда пакеты обновляются, все мейнтейнеры этого пакета должны получать уведомления.
Когда в пакете выявлены проблемы безопасности, у потребителя должна быть возможность проверить их. Это может быть команда, которая позволяет потребителю проверить известные проблемы.
У разработчиков должна быть возможность подписывать свой код. Когда они это делают, менеджер пакетов должен проверять подписи и предоставлять способ их распространения среди потребителей пакета.
Менеджер пакетов предоставляет метод проверки целостности загруженного пакета.
Нет - проверка целостности не выполняется Частично - проверка целостности выполняется с использованием слабого метода* Да - проверка выполняется с использованием достаточно безопасного метода
Платформа может предоставлять статический анализ кода для упреждающего выявления потенциальных проблем в важных библиотеках.
Платформа может отслеживать уязвимости в библиотеках, от которых зависит пакет (вышестоящих пакетах), и уведомлять мейнтейнеров, когда это имеет место.
Менеджер пакетов не должен выполнять код при установке пакета.
Менеджер пакетов не должен собирать информацию о проекте, использующем зависимость.
Система управления пакетами должна иметь руководство по ролям в проекте, которое должно включать план преемственности и условия активного участия.
Мейнтейнеры системы управления пакетами должны иметь процесс проверки ролей в проектах, чтобы гарантировать, что мейнтейнеры активны.
Потребители библиотек должны иметь возможность помечать свой интерес или одобрение конкретной библиотеки, чтобы гарантировать, что сборки используют только те библиотеки, которые они пометили определённым образом. Например, помечены как прошедшие проверку кода.
Менеджер пакетов предоставляет некоторый контроль для предотвращения утечки учётных данных / токена / сессии в составе содержимого пакета.
Нет - контроль отсутствует, и пользователь должен защищать себя сам Частично - вставить комментарий Да - учётные данные / токены либо блокируются от публикации, либо отзываются автоматическим способом, запускаемым при публикации пакета. Пользователи должны быть каким-то образом уведомлены о том, что действие было предпринято.
| Контроль | Уровень 1 | Уровень 2 | Уровень 3 |
|---|
| Строгая аутентификация | ☐ | ☑ | ☑ |
| MFA для публикации артефактов | ☐ | ☑ | ☑ |
| Контакты для безопасности | ☐ | ☑ | ☑ |
| Пакеты могут уведомлять о проблемах безопасности | ☐ | ☑ | ☑ |
| Пакет кода привязан к исходному коду | ☐ | ☑ | ☑ |
| Предотвращение публикации учётных данных | ☐ | ☑ | ☑ |
| Уведомления об обновлениях | ☐ | ☑ | ☑ |
| Подпись кода | ☐ | ☐ | ☑ |
| Проверка целостности | ☐ | ☐ | ☑ |
| Статический анализ кода | ☐ | ☐ | ☑ |
| Анализ зависимостей кода | ☐ | ☐ | ☑ |
| Менеджер пакетов не выполняет код | ☐ | ☐ | ☑ |
| Менеджер пакетов не собирает информацию | ☐ | ☐ | ☑ |
| Руководство по ролям в проекте | ☐ | ☐ | ☑ |
| Проверка ролей в проекте | ☐ | ☐ | ☑ |
| Тегирование библиотек на уровне аккаунта | ☐ | ☐ | ☐ |