GitHub ќе ги оневозможи npm install скриптите по дифолт за да спречи напади врз синџирот на снабдување со софтвер

GitHub најави дека во npm верзија 12 ќе бидат воведени „промени што го нарушуваат постојното однесување“ (breaking changes), меѓу кои е и оневозможувањето на install скриптите по дифолт со цел да се намалат заканите поврзани со синџирот на снабдување со софтвер.

Овие промени имаат за цел да спречат техники на напад кои го злоупотребуваат командата „npm install“ за извршување на злонамерен код преку npm lifecycle hooks. Командата „npm install“ се користи за преземање и инсталирање на сите потребни зависности за Node.js проект. Верзијата 12 е планирана да биде објавена следниот месец.

Опишувајќи ги lifecycle скриптите што се извршуваат при инсталација како „најголемата површина за извршување код во npm екосистемот“, GitHub објасни дека командата „npm install“ извршува скрипти од секоја транзитивна зависност. Поради тоа, еден компромитиран пакет каде било во дрвото на зависности може да изврши произволен код на компјутерот на развивачот или на CI системот.

Со блокирање на ваквото однесување, целта е да се бара експлицитна согласност од корисникот пред автоматски да се изврши код за време на „npm install“, наместо таквото извршување да се смета за доверливо по дифолт.

„Со тоа што извршувањето на скрипти станува опционално (opt-in), се затвора овој пат за напад, а сепак останува лесно достапен за пакетите на кои им верувате“, соопшти GitHub.

Промените вклучуваат:

  • npm install повеќе нема автоматски да ги извршува preinstall, install и postinstall скриптите од зависностите, освен ако тие не се експлицитно дозволени во проектот.
  • npm install повеќе нема да разрешува (resolve) Git зависности, директни или транзитивни, освен ако не се дозволени со опцијата –allow-git.
  • npm install повеќе нема да разрешува зависности од оддалечени URL адреси, како што се HTTPS tarball пакети, освен ако не се дозволени со опцијата –allow-remote.

Во врска со промените на стандардното однесување на allowScripts, компанијата објасни:

„Ова ги вклучува и native node-gyp компилациите (односно, пакет што содржи binding.gyp и нема експлицитна install скрипта сепак ќе биде блокиран, бидејќи npm автоматски извршува node-gyp rebuild за него). Prepare скриптите од git, file и link зависности се блокираат на ист начин.“

Со поставување на –allow-git на вредност none по дифолт, се затвора уште еден пат за извршување код. Во одредени случаи, .npmrc конфигурациската датотека на Git зависност може да го замени Git извршниот фајл дури и кога е користено –ignore-scripts, опција која спречува автоматско извршување на lifecycle скриптите наведени во package.json.

GitHub им препорачува на развивачите навреме да се подготват за овие промени така што ќе надградат на npm 11.16.0 или понова верзија, ќе извршат нормална инсталација и внимателно ќе ги прегледаат предупредувањата што ќе се појават.

Компанијата дополнува:

„Користете ја командата npm approve-scripts --allow-scripts-pending за да видите кои пакети содржат скрипти, одобрете ги оние на кои им верувате и зачувајте ги измените во package.json. По надградбата, ќе продолжат да се извршуваат само скриптите што сте ги одобриле. Сè што ќе остане неодобрено ќе престане да се извршува.“

Претходно оваа година, npm ја воведе и поставката min-release-age, која му наложува на npm да одбие инсталација на верзии на пакети што се објавени пред помалку од одреден број денови. Ова служи како дополнителна заштита од новообјавени злонамерни пакети.

Извори:

  • The Hacker News – GitHub to Disable npm Install Scripts by Default to Stop Supply Chain Attacks The Hacker News