Новите защити целят да намалят риска от атаки по веригата за доставки в екосистемата на JavaScript
GitHub обяви серия от съществени промени в npm v12, които ще засегнат начина, по който разработчиците инсталират зависимости и управляват JavaScript проекти. Основната цел е ограничаване на все по-честите атаки по веригата за доставки (supply-chain attacks), които злоупотребяват с автоматичното поведение на командата npm install.
Промените са сред най-значимите мерки за сигурност в историята на npm и бележат преход от модел на доверие по подразбиране към модел на изрично одобрение преди изпълнение на потенциално рискови действия.
Защо npm install се превърна в предпочитана цел за атакуващите
Командата npm install е един от най-често използваните механизми в екосистемата на Node.js.
Тя се изпълнява:
- след клониране на проект;
- при изтегляне на нови промени от хранилище;
- в CI/CD процеси;
- при изграждане на приложения и услуги.
Проблемът е, че исторически npm позволяваше автоматично изпълнение на определени скриптове по време на инсталацията на зависимости.
Това създава удобна възможност за нападателите да внедрят злонамерен код, който да се изпълни автоматично още при първоначалното инсталиране на пакет.
През последните години именно този механизъм беше използван в редица кампании за кражба на данни, компрометиране на среди за разработка и проникване в корпоративни CI/CD инфраструктури.
Какво се променя в npm v12
Автоматичното изпълнение на инсталационни скриптове вече няма да бъде разрешено по подразбиране
Най-съществената промяна е свързана със скриптовете:
- preinstall;
- install;
- postinstall.
В npm v12 тези скриптове няма да се изпълняват автоматично за зависимостите, освен ако не са били изрично одобрени.
Ограничението ще обхване и:
- компилации чрез node-gyp;
- prepare скриптове;
- локални зависимости;
- свързани (linked) пакети;
- Git-базирани зависимости.
Това премахва една от най-често използваните техники за внедряване на зловреден код в npm екосистемата.
Ограничаване на Git-базираните зависимости
Друга важна промяна е свързана със зависимости, зареждани директно от Git хранилища.
Досега npm можеше автоматично да изтегля и обработва такива зависимости, включително косвени (transitive) зависимости.
След въвеждането на npm v12:
- Git зависимости няма да се изтеглят автоматично;
- ще бъде необходимо изрично разрешение;
- това ще важи както за директни, така и за вложени зависимости.
Причината е, че подобни зависимости могат да предоставят алтернативни пътища за изпълнение на код дори когато стандартните инсталационни скриптове са деактивирани.
Спиране на автоматичното зареждане от външни URL адреси
npm v12 ще ограничи и зареждането на пакети от външни HTTPS адреси.
Това включва:
- tarball архиви;
- външни пакетни ресурси;
- нестандартни източници извън npm регистъра.
Подобно на Git зависимостите, тези източници вече ще изискват изрично потвърждение от страна на разработчика.
Какви атаки ще бъдат затруднени
Новият модел би предотвратил или значително затруднил редица известни кампании от последните години.
Сред тях са:
- компрометирани пакети с вредоносни preinstall скриптове;
- атаките срещу eslint-config-prettier;
- инцидентите с пакетите Picasso на Toptal;
- множество npm пакети за кражба на данни;
- техники, използвани в кампаниите Shai-Hulud;
- злоупотреби с Git зависимости и конфигурационни файлове.
Общият знаменател при всички тези атаки е автоматичното доверие към външен код по време на инсталационния процес. Именно това доверие npm v12 цели да премахне.
Какво трябва да направят разработчиците
GitHub препоръчва организациите и разработчиците да започнат подготовка още отсега.
Първата стъпка е преминаване към:
npm 11.16.0 или по-нова версия
Тези версии вече показват предупреждения за действия, които ще спрат да работят след преминаването към npm v12.
Така екипите могат предварително да идентифицират:
- зависимости с инсталационни скриптове;
- Git-базирани пакети;
- външни източници на зависимости;
- автоматизирани процеси, които ще изискват промени.
Край на модела „доверие по подразбиране“
Промените в npm v12 са част от по-широка тенденция в индустрията към прилагане на принципите на Zero Trust в процесите по разработка на софтуер.
Доскоро екосистемите за разработка бяха изградени около идеята за удобство и автоматизация. Това ускоряваше работата на разработчиците, но същевременно създаваше благоприятна среда за supply-chain атаки.
Днес ситуацията е различна.
Атакуващите все по-често се насочват не към крайните системи, а към инструментите за разработка, пакетните мениджъри и CI/CD веригите. Именно затова ограниченията в npm v12 могат да се разглеждат като една от най-важните стъпки за укрепване на сигурността в JavaScript екосистемата през последните години.
С въвеждането на npm v12 GitHub променя фундаментално начина, по който се обработват зависимости в Node.js среда. Автоматичното изпълнение на код, зареждането от Git хранилища и използването на външни URL източници вече няма да бъдат приемани за безопасни по подразбиране.
Макар тези промени да изискват адаптация от страна на разработчиците, те значително намаляват риска от компрометиране на софтуерни проекти чрез злонамерени пакети и атаки по веригата за доставки.









