Перейти до основного змісту
Версія: 10.x

Помʼякшення наслідків атак на ланцюги постачання

Іноді пакунки npm можуть бути скомпрометовані та опубліковані разом із шкідливим програмним забезпеченням. На щастя, є такі компанії, як Socket, Snyk та Aikido, які виявляють ці скомпрометовані пакунки на ранній стадії. Реєстр npm зазвичай видаляє уражені версії протягом кількох годин. Однак між моментом публікації шкідливого програмного забезпечення та його виявленням завжди є певний проміжок часу, протягом якого ви можете бути вразливими. На щастя, є кілька речей, які ви можете зробити за допомогою pnpm, щоб мінімізувати ризики.

Блокування ризикованих постінсталяційних скриптів

Історично більшість скомпрометованих пакунків використовували скрипти postinstall для запуску коду одразу після встановлення. Щоб зменшити це, pnpm v10 вимикає автоматичне виконання скриптів postinstall у залежностях. Хоча існує налаштування для їх повторного глобального увімкнення за допомогою dangerouslyAllowAllBuilds, ми рекомендуємо явно вказувати лише надійні залежності за допомогою allowBuilds. Таким чином, якщо залежність не потребувала збірки в минулому, вона не запустить шкідливий скрипт раптово, якщо буде опубліковано скомпрометовану версію. Однак, ми рекомендуємо бути обережними під час оновлення надійного пакунка, який містить скрипт postinstall, оскільки його може бути скомпрометовано.

Запобігання екзотичним перехідним залежностям

Ви можете запобігти використанню перехідних залежностей з екзотичних джерел (таких як репозиторії git або прямі URL-адреси tar-архівів) шляхом встановлення blockExoticSubdeps на true. Це гарантує, що всі перехідні залежності отримуються з надійних джерел, що зменшує ризик атак на ланцюжок постачання.

Затримка оновлень залежностей

Ще один спосіб зменшити ризик встановлення скомпрометованих пакунків — це відкласти оновлення ваших залежностей. Оскільки шкідливе програмне забезпечення зазвичай виявляється швидко, відстрочка оновлення на 24 години, швидше за все, допоможе вам уникнути встановлення шкідливої версії. Параметр minimumReleaseAge визначає мінімальну кількість хвилин, яка повинна пройти після публікації версії, перш ніж pnpm встановить її. Наприклад, встановіть значення 1440, щоб чекати один день, або 10080, щоб чекати один тиждень перед встановленням нової версії.

Забезпечення довіри за допомогою trustPolicy

Для додаткового захисту вашого ланцюга постачання pnpm також підтримує налаштування trustPolicy. При встановленні значення no-downgrade цей параметр запобігатиме встановленню пакунка, якщо його рівень довіри знизився порівняно з попередніми версіями (наприклад, якщо раніше він був опублікований надійним видавцем, а зараз має лише інформацію про походження або не має доказів надійності). Це допоможе вам уникнути встановлення потенційно небезпечних або менш надійних версій.

Якщо вам потрібно дозволити певним пакункам або версіям обходити перевірку політики довіри, ви можете скористатися налаштуванням trustPolicyExclude. Це корисно для відомих пакунків, які можуть не відповідати вимогам довіри, але все одно є безпечними для використання.

Використовуйте файл блокування

Само собою зрозуміло, що ви завжди повинні фіксувати свої залежності за допомогою файлу блокування. Додайте файл блокування до свого репозиторію, щоб уникнути несподіваних оновлень.