Https://github.com/eirslett/package-trust

Последний скандал с безопасностью npm (резюмированный Заком Шнайдером: https://schneid.io/blog/event-stream-vulnerability-explained/) показывает одну из больших слабостей npm; отсутствие независимого аудита безопасности опубликованных пакетов.

Очевидно, мы не можем доверять добросовестным действиям всех издателей пакетов npm. Экосистема и разнообразие пакетов на npm великолепны, проблема не в этом. Нам нужен способ доверять пакетам, которые мы используем каждый день. Не только контрольные суммы для проверки того, что загруженный нами пакет действительно является тем, что опубликовал издатель; нам также нужна уверенность в том, что пакет не содержит вредоносных программ.

Я предлагаю для этого децентрализованное решение.

У нас должны быть инструменты разработчика для получения пакетов npm, выполнения аудита безопасности (люди проверяют содержимое пакета вручную) и создания криптографически проверяемой подписи, свидетельствующей о том, что пакет не содержит вредоносных программ.

Решение должно быть бесплатным для всех, кто хочет провести аудит. Потребуются некоторые знания GPG. Аудиторы публикуют свой открытый ключ, проводят аудит, генерируют подпись и публикуют эту подпись.

Каждый пакет npm может быть проверен независимо любым количеством людей. В самом деле, целью должно быть то, чтобы более одного человека проверяли данный пакет, чтобы снизить вероятность человеческой ошибки.

Нам нужны механизмы доверия для используемых ключей GPG - представьте, что злоумышленник может опубликовать злонамеренный сертификат аудита.

Из всех этих сертификатов мы можем проанализировать package-lock.json из наших приложений, получить список используемых зависимостей и сверить этот список с аудиторскими подписями. Мы можем кодифицировать различные правила соответствия - у разных разработчиков / компаний / организаций могут быть разные потребности в безопасности. Некоторым организациям вообще удавалось справиться с небольшим аудитом. Другие (правительственные учреждения, приложения, которые обрабатывают очень конфиденциальные данные и т. Д.) Могут потребовать независимого аудита со стороны 3 отдельных аудиторов, с ключами GPG, которым можно доверять и которые можно отследить до лица, возможно, нанятого профессиональной охранной компанией. В конвейерах CI может быть запущена проверка, которая автоматически завершит сборку, если не все зависимости правильно проверены и проверены.

Можно представить, что самые популярные пакеты npm (lodash, babel, request, response, express et) также будут наиболее проверенными, исходя из требований пользователей. Зависимости этих пакетов, конечно, также будут проверяться. Менее используемые пакеты вообще не будут иметь аудита или будут проверяться только с помощью ключей GPG, которым не доверяют. Тогда организации с высокими требованиями к безопасности будут мотивированы провести собственный аудит этих пакетов и, в свою очередь, публиковать свои аудиты, чтобы другие могли их использовать.

Предлагаемая минимальная реализация находится на Github: https://github.com/eirslett/package-trust На данный момент он основан на простом дереве файлов, но со временем его можно расширить с помощью дополнительных функций.