Preskočiť na obsah
Bezpečnosť

Stačil jeden npm install: ako sa v roku 2026 kradnú API kľúče a ako sa brániť

V roku 2026 bola jednou z najľahších ciest do vašej aplikácie knižnica, ktorú ste si sami nainštalovali. Koncom marca 2026 útočníci prevzali účet hlavného správcu Axiosu, jednej z najpoužívanejších JavaScriptových knižníc, a vydali verzie s trójskym koňom pre Windows, macOS aj Linux (Security Boulevard). Kto v tej chvíli spustil npm install, mohol útočníkom odovzdať kľúče od svojej infraštruktúry.

Obálka článku API kľúče a npm: 28,65 mil. tajných údajov na GitHube za rok 2025, o 81 % viac uniknutých kľúčov k AI službám, dodávateľský reťazec na 3. mieste OWASP

Cieľom týchto útokov sú takmer vždy prístupové údaje: tokeny ku GitHubu, kľúče ku cloudu a heslá k databázam. A tých leží na očiach viac ako kedykoľvek predtým. Len vo verejných commitoch na GitHube pribudlo za rok 2025 28,65 milióna tajných údajov, o 34 % viac ako rok predtým (GitGuardian). V interných repozitároch je to ešte horšie: aspoň jeden tajný údaj obsahuje 32,2 % z nich (The Hacker News, podľa GitGuardian).

OWASP preto zaradil zlyhania dodávateľského reťazca softvéru v rebríčku Top 10:2025 rovno na tretie miesto (OWASP). Proti väčšine z nich pritom stačí pár nastavení na jedno popoludnie. Kompletný checklist so 105 bodmi pre celú aplikáciu je v článku Spúšťate webovú aplikáciu? Týchto 105 vecí skontrolujte skôr ako útočníci.

01Rok útokov na závislosti

Od septembra 2025 prichádza jeden veľký útok za druhým. Útočníci sa učia rýchlo: keď npm sprísnil tokeny, našli cestu aj cez legitímny publikačný proces.

Rok útokov cez npm: september 2025 červ Shai-Hulud, 9. 12. 2025 koniec klasických tokenov, marec 2026 TeamPCP a Axios, 11. 5. 2026 TanStack, Mistral AI a UiPath, jún až júl 2026 ďalšie štyri útoky
Veľké útoky na npm od septembra 2025.
KedyČo sa staloZdroj
Jún až júl 2026Ďalšie štyri útoky na npm a PyPI: nový variant červa Shai-Hulud, podvrhnuté platobné SDK, ukradnutý publikačný token a napadnutá CI pipelineGitGuardian
11. mája 2026Škodlivé verzie balíkov TanStack, Mistral AI a UiPath vyšli cez legitímny trusted publishing s platnou identitou GitHub ActionsWiz
31. marca 2026Prevzatý účet správcu Axiosu, dve verzie s trójskym koňom na vzdialený prístupStepSecurity, CISA
Marec 2026Skupina TeamPCP napadla bezpečnostný skener Trivy, nástroj KICS a knižnicu LiteLLMSecurity Boulevard
9. decembra 2025npm zrušil všetky klasické tokeny, prihlásenie platí dve hodinyGitHub Changelog
September 2025Samošíriaci sa červ Shai-Hulud napadol viac ako 500 npm balíkov a kradol tokeny ku GitHubu, AWS, Google Cloudu a AzureCISA

Májový útok ukázal, že podpis a doložený pôvod balíka nezaručujú, že je verzia bezpečná, pretože útočník vydal škodlivý kód legitímnou cestou. Obrana preto musí mať viac vrstiev.

02Tajné kľúče: kde nesmú byť a kde ich hľadať

Kľúč v kóde je ako kľúč od bytu pod rohožkou. Kým o ňom nikto nevie, nič sa nedeje. Lenže repozitár vidia kolegovia, CI, externé nástroje a po jednej chybe v nastavení aj celý internet. Najrýchlejšie pribúdajú uniknuté kľúče k AI službám: za rok 2025 ich bolo 1 275 105, o 81 % viac ako rok predtým (The Hacker News, podľa GitGuardian).

Medziročný nárast uniknutých tajných údajov
  • Kľúče k AI službám81 %
  • Všetky tajné údaje vo verejných commitoch34 %

Rok 2025 oproti roku 2024. GitGuardian, State of Secrets Sprawl 2026 (The Hacker News).

  1. Žiadne heslo, token ani API kľúč v kóde, v Dockerfile ani v konfigurácii CI. Patria do správcu tajomstiev: AWS Secrets Manager, Google Secret Manager, Azure Key Vault, HashiCorp Vault, Doppler, Infisical alebo 1Password.
  2. Prejdite celú históriu Gitu. Kľúč zmazaný v novšom commite v histórii zostáva a nájde ho ktokoľvek s prístupom k repozitáru.
  3. Zapnite automatickú kontrolu skôr, ako kľúč unikne: pre-commit hook (gitleaks, ggshield, TruffleHog) na počítačoch vývojárov a push protection v GitHube alebo GitLabe.
  4. Dávajte pozor na frontend. Všetko, čo začína NEXT_PUBLIC_, VITE_ alebo REACT_APP_, skončí v JavaScripte v prehliadači a prečíta si to každý. Kľúč k platobnej bráne, k AI službe alebo servisný kľúč Supabase (service_role) tam nesmie byť nikdy.
  5. Každé prostredie má vlastné kľúče. Produkčné kľúče nemajú vývojári na svojich notebookoch.
  6. Kľúč má len nevyhnutné oprávnenia. Keď aplikácia potrebuje čítať z jedného bucketu, kľúč nesmie vedieť zmazať celý účet.
  7. Spíšte si, ako ktorý kľúč vymeniť. Pri incidente nebude čas pátrať, kde všade sa používa.

Ako to overíte

Spustite nad celou históriou repozitára gitleaks: gitleaks git --log-opts="--all". Potom otvorte produkčný web, zobrazte zdrojový kód a v súboroch JavaScriptu vyhľadajte slová key, secret a token.

03Konfigurácia produkcie

Chybná bezpečnostná konfigurácia je v OWASP Top 10:2025 na druhom mieste (OWASP). Typicky ide o súbory a režimy, ktoré zostali zapnuté z vývoja. Útočník ich nájde automatickým skenerom za pár minút.

  1. Debug režim vypnutý: DEBUG=False v Djangu, APP_DEBUG=false v Laraveli, NODE_ENV=production. Debug stránka prezradí cesty, premenné prostredia a často aj heslá.
  2. Cez web nie sú dostupné /.git/, /.env, zálohy typu backup.zip či db.sql, phpinfo, /actuator v Spring Boote ani /server-status v Apache.
  3. Swagger a GraphQL introspekcia sú v produkcii vypnuté alebo za prihlásením.
  4. Predvolené účty a heslá (admin/admin pri databázach, CMS a administrácii servera) sú zmenené alebo zmazané, ukážkové aplikácie a testovacie endpointy odstránené.
  5. Výpis obsahu adresárov je vypnutý.
  6. Hlavičky Server a X-Powered-By neukazujú verziu softvéru.
  7. CORS povoľuje len vaše konkrétne domény. Zástupný znak * spolu s credentials je chyba, rovnako ako server, ktorý slepo vracia Origin z požiadavky.
  8. Source mapy nie sú verejné. Nahrajte ich len do nástroja na sledovanie chýb (Sentry), inak prezradia celý zdrojový kód frontendu vrátane komentárov.

Ako to overíte

Otvorte v prehliadači vasa-domena.sk/.env, /.git/config a /debug. Všetky musia vrátiť 404. Nástroj nuclei s verejnými šablónami prejde stovky podobných miest za pár minút.

04Závislosti: ako si nenainštalovať trójskeho koňa

Bežná aplikácia v Node.js stojí na stovkách balíkov, ktoré nikto z tímu nečítal. Každý z nich môže jedného dňa vydať škodlivú verziu. Väčšina útokov sa pritom spustí už pri inštalácii. Zasiahne tak počítače vývojárov a build servery skôr, ako aplikácia vôbec pobeží.

  1. Commitujte lockfile (package-lock.json, pnpm-lock.yaml, poetry.lock, composer.lock) a v CI inštalujte presne podľa neho: npm ci namiesto npm install.
  2. Nové verzie nepreberajte hneď. Nastavte odklad niekoľkých dní: v npm voľba min-release-age, v pnpm a Renovate minimumReleaseAge. Dependabot od júla 2026 čaká s novými verziami v predvolenom stave tri dni (GitHub Changelog). Škodlivé verzie spravidla zmiznú z registra v priebehu hodín, pri Axiose išlo zhruba o tri hodiny (UNU C3).
  3. Obmedzte inštalačné skripty. Väčšina útokov sa spúšťa cez postinstall alebo preinstall. npm od verzie 12 z júla 2026 spúšťa skripty závislostí len pri výslovne povolených balíkoch (allowScripts v package.json, povolenie príkazom npm approve-scripts), pnpm to vie cez allowBuilds a Bun cez trustedDependencies (GitHub Changelog). V starších verziách npm použite voľbu ignore-scripts. Pozor, časť letných útokov sa spúšťala až pri importe balíka, proti nim obmedzenie skriptov nepomôže.
  4. Zapnite sledovanie zraniteľností: Dependabot alebo Renovate na aktualizácie, npm audit, OSV-Scanner alebo Snyk na známe chyby. Nástroje typu Socket navyše sledujú podozrivé správanie nových verzií, ktoré ešte nemajú žiadne CVE.
  5. Skôr než pridáte nový balík, overte, že naozaj existuje a je to ten správny. AI asistenti si občas vymyslia názov balíka a útočníci si takéto názvy registrujú vopred (slopsquatting).
  6. Interné balíky držte vo vlastnom scope a v .npmrc alebo pip.conf určte, odkiaľ sa sťahujú. Inak hrozí zámena s verejným balíkom rovnakého mena (dependency confusion).
  7. Vygenerujte SBOM, teda zoznam všetkých komponentov, vo formáte CycloneDX alebo SPDX. Keď vyjde ďalšia kritická chyba, do minúty viete, či sa vás týka.

Ako to overíte

Spustite npm audit --omit=dev alebo ekvivalent pre váš jazyk a OSV-Scanner nad lockfilom. Do produkcie nesmie ísť žiadna známa kritická zraniteľnosť bez písomne zdôvodnenej výnimky.

05CI/CD pipeline a kontajnery

Build server má prístup ku všetkému: ku kódu, k tajným kľúčom aj k produkcii. Pre útočníka má preto väčšiu cenu ako samotná aplikácia.

Pipeline

  1. Akcie v GitHub Actions pripínajte na konkrétny commit (SHA). Tag ako @v4 môže útočník presmerovať na inú verziu.
  2. Oprávnenia GITHUB_TOKEN nastavte na minimum (permissions: contents: read) a pridávajte len to, čo konkrétny job potrebuje.
  3. Pozor na spúšťač pull_request_target a na workflow, ktoré pracujú s kódom z cudzích forkov. Kód útočníka potom beží s prístupom k vašim tajomstvám.
  4. Do cloudu sa z CI prihlasujte cez OIDC s krátkodobými prístupmi. Dlhodobý kľúč uložený v nastavení CI je prvá vec, ktorú škodlivý balík hľadá.
  5. Produkčné nasadenie chráňte ochranou hlavnej vetvy, povinnou revíziou kódu a schválením nasadenia v prostredí production. Tajomstvá pre produkciu majú byť dostupné len tomuto prostrediu.
  6. Balíky publikujte cez trusted publishing (OIDC). npm od novembra 2025 obmedzuje platnosť granulárnych tokenov s oprávnením na zápis na najviac 90 dní (GitHub Changelog) a od konca júla 2026 tokeny s obídením dvojfaktorového overenia nesmú spravovať účet, tokeny ani správcov balíkov (GitHub Changelog).
  7. Vývojárske účty na GitHube, GitLabe, npm a PyPI majú dvojfaktorové overenie odolné proti phishingu. Väčšina prevzatí balíkov sa začala ukradnutým účtom správcu.

Kontajnery

  1. Používajte minimálne základné obrazy (distroless, Alpine, slim) pripnuté na digest.
  2. Aplikácia v kontajneri nebeží pod rootom a súborový systém je, kde sa dá, len na čítanie.
  3. Obrazy skenujte pri builde aj pravidelne potom. Nové zraniteľnosti sa objavujú aj v starých obrazoch.

Ako to overíte

Prejdite priečinok .github/workflows. Každá akcia tretej strany musí byť pripnutá na SHA a každý workflow musí mať nastavený blok permissions. V nastaveniach CI skontrolujte, či tam neležia dlhodobé kľúče ku cloudu.

06Čo robiť, keď kľúč unikne

Počítajte s tým, že sa to raz stane. Rozhoduje, či kľúč zneplatníte za desať minút, alebo za desať dní. Postup si spíšte vopred:

  1. Kľúč okamžite zneplatnite a vydajte nový. Zmazanie commitu ani prepísanie histórie Gitu nestačí, kópiu už môže mať niekto iný.
  2. Nový kľúč nasaďte do všetkých prostredí, kde sa používal. Tu sa oplatí zoznam z kapitoly o tajných kľúčoch.
  3. V logoch poskytovateľa (CloudTrail v AWS, audit log v GitHube, prehľad volaní pri AI službe) zistite, či kľúč medzitým niekto nepoužil.
  4. Ak áno, riešte to ako bezpečnostný incident: zistite, k akým dátam mal útočník prístup, a zvážte povinnosti podľa GDPR. Lehoty na hlásenie opisuje článok Únik dát stojí v priemere zhruba 4,4 milióna eur.
  5. Po škodlivej verzii závislosti preverte všetky počítače a build servery, kde prebehla inštalácia, a vymeňte všetky kľúče, ktoré na nich boli. CISA po útoku Shai-Hulud odporučila vymeniť všetky vývojárske prístupové údaje (CISA).
  6. Zistite, ako kľúč unikol, a zaveďte opatrenie, aby sa to neopakovalo. Najčastejšie chýba pre-commit hook alebo push protection.
Šesť krokov, keď kľúč unikne: zneplatniť a vydať nový, nasadiť ho všade, prejsť logy poskytovateľa, pri zneužití riešiť incident, po škodlivej závislosti vymeniť všetko, zistiť, ako kľúč unikol
Postup si spíšte skôr, ako ho budete potrebovať.

07Checklist

Tajné kľúče a konfigurácia

  • Sken celej histórie Gitu je bez nálezu, všetky kedykoľvek uniknuté kľúče sú vymenené.
  • Tajomstvá sú v správcovi tajomstiev, nie v kóde, Dockerfile ani v konfigurácii CI.
  • Vo frontendových premenných nie je žiadny tajný kľúč.
  • Produkcia má vlastné kľúče s minimálnymi oprávneniami.
  • Pre-commit hook a push protection sú zapnuté.
  • Existuje zoznam kľúčov a postup ich výmeny.
  • Debug režim je vypnutý.
  • Adresy /.env, /.git/, zálohy, phpinfo a /actuator vracajú 404.
  • Swagger a GraphQL introspekcia sú vypnuté alebo za prihlásením.
  • Predvolené účty a ukážkové aplikácie sú odstránené.
  • CORS povoľuje len konkrétne domény.
  • Source mapy nie sú verejné.

Závislosti a CI/CD

  • Lockfile je v repozitári a CI inštaluje cez npm ci.
  • Žiadna známa kritická zraniteľnosť bez zdôvodnenej výnimky.
  • Nové verzie sa preberajú s odkladom niekoľkých dní.
  • Inštalačné skripty sú obmedzené.
  • Existuje SBOM.
  • Akcie v GitHub Actions sú pripnuté na SHA, GITHUB_TOKEN má minimálne oprávnenia.
  • CI sa do cloudu prihlasuje cez OIDC.
  • Nasadenie do produkcie vyžaduje schválenie.
  • Účty vývojárov majú dvojfaktorové overenie odolné proti phishingu.
  • Kontajnery bežia bez práv roota z minimálneho obrazu.

Oprávnenia a vstupy v kóde rieši článok Stačí zmeniť číslo v adrese, server a cloud článok Váš staging už poznajú.

08Celá séria o bezpečnosti webovej aplikácie

Séria piatich článkov pokrýva celú aplikáciu, od kódu cez server až po povinnosti vedenia:

09Časté otázky

Ako zistím, či mi unikol API kľúč?

Spustite nad celou históriou repozitára nástroj gitleaks alebo TruffleHog a zapnite v GitHube alebo GitLabe skenovanie tajomstiev. U poskytovateľa kľúča potom v logu skontrolujte, či ho niekto nepoužil z neznámej IP adresy.

Stačí zmazať kľúč z GitHubu?

Nie. Kľúč zostáva v histórii Gitu a niekto si ho už mohol skopírovať. Vždy ho zneplatnite a vydajte nový.

Môžem dať API kľúč do frontendu?

Len ak je určený ako verejný, napríklad publishable key pri Stripe alebo anon key pri Supabase so zapnutým row-level security. Tajné kľúče k platbám, AI službám alebo databáze do frontendu nikdy nepatria, prečíta si ich každý návštevník.

Stačí npm audit?

Nie. npm audit nájde len problémy, ktoré už niekto nahlásil a zverejnil. Novo napadnutú verziu balíka v prvých hodinách nespozná, preto sa kombinuje s odkladom aktualizácií a nástrojmi, ktoré sledujú správanie balíkov.

Čo bol útok na Axios?

Útok na dodávateľský reťazec z noci na 31. marca 2026. Útočníci prevzali účet hlavného správcu knižnice Axios a vydali dve verzie, ktoré pri inštalácii stiahli trójskeho koňa na vzdialený prístup do Windows, macOS aj Linuxu (Security Boulevard).

Čo je Shai-Hulud?

Samošíriaci sa červ v registri npm. V septembri 2025 napadol viac ako 500 balíkov, kradol tokeny ku GitHubu a cloudom a s ich pomocou sa šíril ďalej (CISA). V roku 2026 sa objavili jeho ďalšie varianty.

10Zdroje

Údaje platia k 27. septembru 2026.

Tím LISTIFYWeby, aplikácie a marketing z Prahy od roku 2008

Ďalšie články

Všetky články →
Bezpečnosť27. 9. 2026 · 12 min čítania

Spúšťate webovú aplikáciu? Týchto 105 vecí skontrolujte skôr ako útočníci

Bezpečnosť27. 9. 2026 · 15 min čítania

Stačí zmeniť číslo v adrese: chyby v kóde, cez ktoré unikajú dáta

Bezpečnosť27. 9. 2026 · 11 min čítania

Váš staging už poznajú. Ako zabezpečiť server, HTTPS a cloud pred spustením webu

Zdieľať stránku

E-mailom

Máte nápad? Za 15 minút budete vedieť, ako na to.

Krátky hovor, žiadna prezentácia. Povieme vám, čo dáva zmysel, koľko to bude stáť a ako rýchlo to zvládneme.

+420 771 166 199Po až Pi 8:30 až 16:00 · info@listify.cool

Kedy vám máme zavolať?

Vyberte deň a časové rozmedzie. Zavoláme my, hovor trvá zhruba 15 minút.

Deň