package-lock.json - JS uzamknutia balíka - npm preklepy

Preklep v súbore Package-Lock.json: Ako môže uniesť vašu zostavu

Prečo je Package-Lock.JSON dôležitý pre vývojárov

V projektoch Node.js nie je package-lock.json len sprievodným súborom k package.json. Uzamyká presné verzie každej nainštalovanej závislosti vrátane vnorených. Tento súbor zaisťuje reprodukovateľnosť v rôznych prostrediach a zabraňuje neočakávaným zmenám pri publikovaní nových verzií balíkov. Bez neho by vývojári riskovali rôzne správanie vo fázach vývoja, testovania a produkcie v dôsledku posunu stromov závislostí a dokonca by otvorili dvere preklepom v npm, ak by sa do uzamykacieho súboru dostali chyby.


Pri správnom použití súbor package-lock.json zabezpečí, aby všetci členovia vášho tímu a vaši CI/CD pipeline inštalácií rovnaký kód. Ale jedna tichá preklep v tomto súbore môže vašu aplikáciu presmerovať priamo do pasce.

Ako preklepy vedú k útokom typu NPM?

Povedzme, že legitímny balík v package.json je napísané správne, napríklad lodashAle chybne napísaný záznam v package-lock.json, Ako sú lody, sa stále môže vkradnúť do vášho stromu závislostí, najmä ak ho niekto manuálne upravil alebo ho napísal chybný nástroj.

Útočníci využívajú tieto preklepy technikou nazývanou npm typosquatting. Nahrávajú škodlivé balíky s názvami pripomínajúcimi populárne balíky (napr. reagovať-domm, expresy, uhlový). Ak váš JSON so zámkom balíka obsahuje takúto preklep, npm bez otázok nainštaluje balík útočníka, pretože ste mu to výslovne povedali.

Typosquatting v npm nie je len teoretický. Typosquatting v npm v reálnom svete sa dostal na titulné stránky novín. Jedným z takýchto príkladov bol Kompromisný balík Coa, Kde škodlivý kód bol dodaný prostredníctvom aktualizácie dôveryhodného balíka. Rozdiel je v tom, že pri preklepoch v npm vývojár omylom pozve útočníka tým, že preklepne napíše závislosť.

Skutočné riziká v CI/CD PipelineChyby spôsobené chybami JSON pri uzamknutí balíka

moderné CI/CD pipelinepochúťka package-lock.json ako zdroj pravdy. Počas zostavovania alebo nasadzovania pipeline beží npm ci or npm install, pričom oba čítajú zo súboru lockfile. Ak sa vyskytne preklep, škodlivý balík sa automaticky stiahne. Žiadne upozornenia. Žiadne výzvy.

To znamená, že preklep spôsobený počas lokálneho vývoja sa môže nenápadne šíriť až do štádia vývoja alebo dokonca do produkcie. Útočníci môžu vložiť nástroje na krádeže poverení, ťažbu kryptomien alebo zadné vrátka, ktoré sa aktivujú po nasadení. Toto všetko sa môže stať bez spustenia bezpečnostných nástrojov, pretože závislosť bola „deklarovaná“ v package-lock.json.

Toto nie je len chyba. Je to narušenie dodávateľského reťazca, ktoré čaká na svoje miesto a preklepy v NPM z neho robia skutočnú hrozbu.

Detekcia a predchádzanie preklepom v závislostiach na zmiernenie preklepov NPM

Preklepy v package-lock.json sú neviditeľné, pokiaľ ich aktívne nehľadáte. Tu je postup, ako začať:

  • Statická analýzaNiektoré nástroje tieto problémy nezachytia, ale špecializované skenery závislostí to dokážu. Integrujte nástroje, ktoré vyhľadávajú vzory preklepov v npm a kontrolujú vaše package-lock.json pre nezrovnalosti.
  • Linting LockfilesNa overenie použite vlastné pravidlá lintingu alebo pluginy package-lock.json záznamy oproti známym bezpečným zoznamom.
  • Recenzie kóduVzájomné hodnotenia sú kritické. Rozdiely v uzamknutých súboroch sú hlučné, ale naučte svoj tím, aby ich kontroloval rovnako ako kód.
  • Automatizované kontroly: Nastaviť pre-commit hooks alebo úlohy CI na odmietnutie neoverených alebo podozrivých záznamov v package-lock.json.

Tu je praktický príklad použitia akcií GitHub:

Toto nie je úplne bezpečné, ale označuje to zvláštne názvy balíkov, ktoré by mohli signalizovať preklepy v npm.

Zabezpečenie projektov Node.js proti typosquattingu v NPM a útokom v dodávateľskom reťazci

Ak chcete uzamknúť svoju aplikáciu Node.js a zabrániť útokom prostredníctvom package-lock.json:

  • Prísne pripnutie verzieVyhnite sa rozsahom verzií (^, ~) v package.jsonUzamknite všetky závislosti na presné verzie, aby ste znížili neočakávané aktualizácie a posuny.
  • Overenie podpisuVyužite nástroje ako Sigstore a funkcie npm na overenie pôvodu balíkov.
  • Nemenné zostavy: Vždy používajte npm ci s overeným package-lock.json súbor v produkčnom prostredí. Nikdy sa nespoliehajte na npm install počas nasadenia, pretože to môže zaviesť neoverené zmeny.
  • Priebežné sledovaniePoužívajte monitorovacie riešenia, ktoré vás upozornia, keď:
    • Nové balíky sa zobrazia vo vašom package-lock.json
    • Existujúce balíky sa neočakávane menia
    • Podozrivé vzory (napr. názvy balíkov ako expresy, reagovať-domm, uhlový) sú detekované
  • Nástroje na audit závislostíIntegrujte automatizované nástroje, ako napríklad audit npm, Snyk, Alebo Xygeni do vášho CI pipeline skenovať zraniteľnosti a indikátory preklepov.
  • Hygiena uzamknutých súborov: Liečiť package-lock.json ako kód. Skontrolujte ho počas pull requests, najmä pri aktualizácii alebo pridávaní závislostí.
  • Automatizovaný Pre-Commit Kontroly: Použite pre-commit hooks overiť váš uzamykateľný súbor predtým, ako sa dostane do systému riadenia verzií.

package-lock.json je vysokocenným cieľom pri útokoch typu „typosquatting“ v NPM. Preklep ako reagovať-domm or lody poskytuje útočníkom priamu cestu do vašej zostavy pipelinePre zachovanie integrity dodávateľského reťazca je nevyhnutná ostražitosť v súvislosti s týmto súborom.

Takže jediná preklep môže pokaziť vašu stavbu. Nenechajte to!

Preklep v package-lock.json Nie je to len nedbalé kódovanie; je to skutočný vektor hrozby pre typosquatting v NPM. Súbor je strážcom brány a ak je ohrozený, váš pipeline je tiež. Oprava nie je atraktívna: spomaliť, skontrolovať súbor zámku, automatizovať kontroly a sledovať zmeny. Ale stojí to za to.

Na zvýšenie úrovne svojej obrany zvážte použitie nástrojov ako Xygeni, ktoré sú určené na detekciu preklepov, kontrolu JSON zámku balíka súbory a chrániť integritu balíka v celom vašom CI/CD pipelineV dobe otvoreného zdrojového kódu sa dôvera získava a overuje.

nástroje na analýzu zloženia softvéru SCA
Stanovte si priority, odstraňujte a zabezpečte svoje softvérové ​​riziká
Získajte svoj bezplatný účet.
Nie je potrebná kreditná karta.

Zabezpečte si vývoj a dodávku softvéru

s produktovým balíkom Xygeni