Útoky na npm závislosti: ako ochrániť svoju aplikáciu?
Útok na dodávateľský reťazec (supply chain attack) znamená, že útočník nenapadne priamo vašu aplikáciu, ale niektorú z knižníc, ktoré používa. V roku 2026 takto padli aj balíky, ktorým dôveruje celý svet — od HTTP klienta axios po balíky pod značkou Red Hat. Stačí jedna aktualizácia závislosti a škodlivý kód sa spustí na počítačoch vývojárov aj na vašich serveroch. Dobrá správa: pred väčšinou týchto útokov sa dá brániť niekoľkými disciplinovanými návykmi.
Čo je útok na dodávateľský reťazec a prečo by vás mal zaujímať?
Je to útok, pri ktorom sa škodlivý kód dostane do vášho softvéru cez tretiu stranu — najčastejšie cez open-source knižnicu, ktorú vy ani vaši vývojári nepíšete, ale denne ju inštalujete cez správcu balíkov (npm, PyPI a podobne).
Moderná aplikácia má typicky stovky až tisíce nepriamych závislostí. Vy schválite jednu knižnicu, tá si však potiahne ďalšie desiatky. Útočníkovi stačí kompromitovať jediný populárny balík a jeho kód sa rozšíri do všetkých projektov, ktoré ho používajú — vrátane toho vášho. Práve preto je tento typ útoku taký účinný: obchádza vašu vlastnú bezpečnosť a zneužíva dôveru, ktorú máte voči ekosystému.
Čo sa stalo s npm v roku 2026?
Rok 2026 priniesol sériu závažných kompromitácií veľmi populárnych npm balíkov. Nešlo o okrajové knižnice — útočníci cielili práve na tie, ktoré sú v základoch tisícov aplikácií.
- axios (31. marca 2026): najpopulárnejší HTTP klient v JavaScripte s vyše 100 miliónmi stiahnutí týždenne a približne 174 000 závislými balíkmi. Útočníci vydali škodlivé verzie 1.14.1 a 0.30.4 s podvrhnutou závislosťou (typosquat plain-crypto-js), ktorá pri inštalácii stiahla a spustila vzdialený trojan (RAT) pre Windows, macOS aj Linux. Škodlivé verzie boli online len niekoľko hodín, no Microsoft útok pripísal severokórejskej skupine Sapphire Sleet a CISA vydala oficiálne varovanie.
- node-ipc (14. mája 2026): základná knižnica pre medziprocesovú komunikáciu s miliónmi stiahnutí mesačne. Cez účet legitímneho správcu pribudli verzie so zamaskovaným kódom, ktorý kradol prihlasovacie údaje vývojárov, CI/CD systémov, cloudu, Kubernetes aj SSH a odosielal ich von cez DNS dotazy.
- @redhat-cloud-services (1. júna 2026): kampaň nazvaná Miasma zneužila neoprávnené commity v GitHub organizácii RedHatInsights a vydala škodlivé verzie 32 balíkov. Ich kód cielil na prístupy do AWS, Azure, GCP, HashiCorp Vault, Kubernetes, GitHub Actions, npm aj správcov hesiel ako 1Password a Bitwarden.
Tieto incidenty nadväzujú na červa Shai-Hulud z jesene 2025 — samošíriaci sa škodlivý kód, ktorý automaticky kompromituje ďalšie balíky. Jeho „mini" variant zasiahol v apríli a máji 2026 vyše 160 balíkov vrátane projektov TanStack, Mistral AI či OpenSearch. Inými slovami: nejde o ojedinelú nehodu, ale o trend.
Prečo to ohrozuje aj firmu, ktorá knižnice „len používa"?
Pretože škodlivý kód sa spustí vo vašom prostredí — bez ohľadu na to, kto knižnicu napísal. Najčastejšie udrie v dvoch momentoch: pri inštalácii balíka (cez tzv. install skripty) a pri jeho načítaní za behu aplikácie.
Reálny dopad na biznis je priamy. Ukradnuté prístupy do cloudu znamenajú únik dát alebo neočakávané účty za prevádzku. Kompromitovaný CI/CD systém umožní útočníkovi podpísať a nasadiť vlastnú verziu vášho produktu k zákazníkom. A keďže útok pochádza z „dôveryhodnej" knižnice, klasický antivírus ani firewall ho spravidla nezachytia.
Pri kompromitácii axiosu CISA odporučila organizáciám predpokladať napadnutie, ak nainštalovali postihnuté verzie — teda rotovať prihlasovacie údaje a preveriť systémy, nielen balík odinštalovať.
Ako sa pred útokmi na závislosti chrániť?
Najúčinnejšia je kombinácia niekoľkých opatrení — žiadne jedno nestačí, ale spolu výrazne zmenšia priestor na útok.
- Používajte lockfile a inštalujte deterministicky. Súbor package-lock.json (resp. pnpm-lock.yaml, yarn.lock) zafixuje presné verzie aj ich kontrolné súčty. Príkaz npm ci inštaluje výhradne to, čo je v lockfile, a nedovolí potichu stiahnuť novšiu verziu.
- Vypnite install skripty. Veľká časť škodlivého kódu sa spúšťa práve pri inštalácii. Voľba npm ci --ignore-scripts tento priestor zatvorí pre väčšinu projektov bez vedľajších efektov.
- Nepreberajte novinky okamžite. Zaveďte „odstup" (cooldown) — niekoľko dní pred prijatím čerstvo vydaných verzií. Väčšina kompromitovaných balíkov je online len hodiny a stihne ju odhaliť komunita.
- Skenujte automaticky v CI. Pridajte npm audit a nástroj na analýzu správania balíkov (napr. Socket.dev) do pipeline, aby každá zmena závislostí prešla kontrolou ešte pred nasadením.
- Obmedzte prístupy CI/CD. Krátkodobé tokeny (OIDC), princíp najnižších oprávnení a pravidelná rotácia tajomstiev zmenšia škodu, ak sa kód aj tak spustí.
Pomôcť vie aj provenance a štandard SLSA, ktoré dokladujú, kde a ako bol balík zostavený. Pozor však na ich hranice: provenance overuje pôvod balíka, nie to, čo kód reálne robí. Správca so zlým úmyslom môže škodlivý kód vydať aj cez plne dôveryhodnú pipeline a všetky kontroly prejdú. Preto je dôležitá kombinácia opatrení, nie spoliehanie sa na jedno.
Čo s tým má robiť vaša firma?
Nemusíte byť bezpečnostná firma, aby ste znížili riziko. Stačí zaviesť pár návykov:
- Zistite, čo vlastne používate. Vytvorte si zoznam závislostí (SBOM) pre každý produkt — bez prehľadu sa nedá ani reagovať na incident.
- Zafixujte verzie a inštalujte cez npm ci --ignore-scripts vo všetkých prostrediach, hlavne v CI/CD.
- Zaraďte kontrolu závislostí do pipeline a nastavte odstup pred prijímaním nových verzií.
- Pripravte si plán reakcie. Vopred vedzte, ako rýchlo rotujete prístupy do cloudu, npm a Gitu, ak sa objaví kompromitovaný balík.
- Preverte CI/CD a oprávnenia. Práve tam býva dopad najväčší — krátkodobé tokeny a minimálne práva sú lacná poistka.
Ak na to nemáte interné kapacity, oplatí sa nechať si nastaviť bezpečnú pipeline a pravidelné kontroly externe. V AppStudio riešime bezpečnostné testovanie aj Cloud & DevSecOps tak, aby kontrola závislostí bola súčasťou vývoja, nie dodatočnou starosťou. Nadväzujeme tým na prístup, ktorý sme opísali v článku o tom, prečo nasadzujeme security testy do CI/CD od prvého dňa.
Časté otázky
Stačí pred týmito útokmi antivírus?
Nie. Škodlivý kód prichádza z knižnice, ktorej váš systém dôveruje, a často sa spúšťa priamo pri inštalácii alebo behu aplikácie. Klasický antivírus ani firewall ho spravidla nezachytia — pomôže až kontrola samotných závislostí.
Týka sa to len npm a JavaScriptu?
Nie. Rovnaký princíp platí pre PyPI (Python), balíky pre PHP, Javu či kontajnerové image. npm je len najväčší a najčastejšie zasiahnutý ekosystém, preto sa o ňom hovorí najviac.
Ako rýchlo zistím, že som zasiahnutý?
Záleží na prehľade. Ak máte zoznam závislostí (SBOM) a skenovanie v CI, dokážete do minút overiť, či ste nainštalovali konkrétnu škodlivú verziu. Bez toho býva odhalenie otázkou dní až týždňov.
Je bezpečnejšie nepoužívať open-source knižnice?
To nie je realistické — moderný vývoj na nich stojí a vlastné riešenia majú tiež chyby. Cieľom nie je vyhnúť sa knižniciam, ale vedieť, ktoré používate, a mať proces na ich kontrolu a rýchlu reakciu.