Bezpečnost
Vaše aplikace je málo riziková. Vaše pipeline buildu ne.
Pokud je váš software interní, úzce zaměřený nebo nijak zajímavý, je rozumné dát bezpečnost na seznamu nízko. Útoky na dodavatelský řetězec ale nezkoumají, co vaše aplikace dělá. Míří na pipeline a balíčky, které sdílí každá aplikace.
Aktualizováno
Úvaha je správná, ale jen do určité míry
Slýcháme to často a obvykle to má rozumný základ. Aplikace je interní dashboard, datová pipeline nebo malá služba s hrstkou uživatelů. Neobsahuje nic, o co by útočník stál. Rozpočet na bezpečnost jde nejdřív na produkt pro zákazníky.
Pro samotnou aplikaci tato logika platí. Pro způsob, jakým se aplikace sestavuje, ale neplatí. Každý tým, ať dodává cokoli, má CI pipeline s přístupovými údaji a strom závislostí, který sám nenapsal. Ty stojí za útok právě proto, že jsou sdílené, a kompromitace v nich zasáhne vše ostatní, na co tyto přístupové údaje dosáhnou: vaše registry, cloudové účty i další repozitáře.
Útoky, kterým bylo jedno, co aplikace dělá
Žádný z těchto incidentů nemířil na určitý druh aplikace. Každý se k týmům dostal přes nástroj nebo balíček, který používaly k sestavování softwaru.
tj-actions/changed-files, 2025
Byla kompromitována široce používaná GitHub Action, která zjišťuje změněné soubory. Podle CISA byly škodlivé verze aktivní od 12. do 15. března 2025 a kompromitace odhalila tajné údaje včetně přístupových klíčů, osobních přístupových tokenů GitHubu, tokenů npm a soukromých klíčů RSA. Wiz uvedl, že kód vypisoval paměť CI runneru, takže u veřejných repozitářů skončily tajné údaje v logech workflow. Workflow, která na action odkazovala tagem verze, spustila škodlivý kód bez ohledu na to, co repozitář obsahoval.
Červ Shai-Hulud v npm, 2025
V září 2025 CISA varovala před samoreplikujícím se červem, který kompromitoval více než 500 balíčků npm. Sbíral osobní přístupové tokeny GitHubu a klíče cloudových API pro AWS, Google Cloud a Azure. Palo Alto Networks Unit 42 popsala, jak pomocí ukradených tokenů npm publikoval infikované verze dalších balíčků oběti a jak se pozdější vlna spouštěla během pre-install, což rozšířilo jeho dosah do pipeline CI/CD.
Shai-Hulud and other supply chain attacks
Jak npm červ Shai-Hulud při instalaci kradl přihlašovací údaje a používal je k publikování dalších kompromitovaných balíčků, spolu s dřívějšími útoky, na které navazuje.
Petteri Pulkkinen a Erika Marttinen na akci Kubernetes Community Days Helsinki 2026, od 4:30 do 7:57 záznamu SBOMbastic: Getting Ready for Upcoming EU Cybersecurity Regulation in Software Supply Chains.
Codecov Bash Uploader, 2021
Útočník získal přístupový údaj díky chybě v procesu sestavování Docker image společnosti Codecov a upravil skript Bash Uploader, který mnoho týmů spouštělo v CI. Od 31. ledna do 1. dubna 2021 mohl upravený skript odesílat třetí straně proměnné prostředí, včetně přístupových údajů, tokenů a klíčů dostupných v prostředí CI. Odhalil se, když si zákazník všiml, že kontrolní součet skriptu nesouhlasí.
xz utils, 2024
Škodlivý kód byl vložen do verzí 5.6.0 a 5.6.1 knihovny XZ Utils pro kompresi dat, která může být součástí linuxových distribucí. CISA doporučila přejít zpět na nekompromitovanou verzi, například 5.4.6, a pátrat po škodlivé aktivitě. Kompresní knihovna je asi ta nejnenápadnější závislost, jaká existuje, a přesto se stala cílem.
event-stream, 2018
Člověk, který se vydával za ochotného správce, převzal populární balíček npm event-stream a ve verzi 3.3.6 přidal škodlivou závislost flatmap-stream. Tým npm uvedl, že payload mířil na jednu konkrétní aplikaci, bitcoinovou peněženku Copay. Škodlivý kód ale dostal každý, kdo si event-stream nainstaloval.
Co mají tyto incidenty společného
- Odehrály se během buildu nebo instalace. Škodlivý kód běžel na počítačích vývojářů a CI runnerech, ne v produkční aplikaci.
- Šly po přístupových údajích. Cenou byly tokeny a klíče v pipeline, protože otevírají dveře i mimo sestavovaný projekt.
- Přišly pod důvěryhodnými jmény. Známá action, známý balíček, známý skript. Nikdo se nerozhodl nainstalovat malware.
- První otázka potom byla vždy stejná. Stáhl některý z našich buildů špatnou verzi a na co mohla dosáhnout? Týmy bez záznamu o tom, co každý build použil, to musely zpětně rekonstruovat.
Jak vypadá minimální úsilí
K pokrytí základů nepotřebujete bezpečnostní tým. Většina doporučení GitHubu a CISA se vejde do krátkého seznamu:
- Připínejte GitHub Actions třetích stran na úplný SHA commitu, ne na tag, aby přesunutý tag nemohl změnit, co se spouští.
- Commitujte lockfily a připínejte verze závislostí na známá dobrá vydání.
- Dávejte tokenům CI co nejužší oprávnění, která stačí, a rotujte je, když incident zasáhne něco, co používáte.
- Vyžadujte vícefaktorové ověřování odolné vůči phishingu u vývojářských a publikačních účtů.
- Uchovávejte záznam o tom, co každý build nainstaloval, abyste na otázku „byli jsme zasaženi?“ mohli odpovědět z dat, ne z paměti.
První čtyři body jsou konfigurace. Pátý většina malých týmů vynechává, protože vyžaduje nástroje.
Kde CRACI pomůže s malým úsilím
CRACI pokryje vedení záznamů a přidá síťovou hranici, aniž byste museli měnit aplikaci nebo workflow.
- Jeden řádek na job. Změňte
runs-onnacraci. Vaše workflow GitHub Actions zůstanou, jak jsou, a běhy se dál zobrazují v GitHubu. - SBOM z každého buildu. CRACI zaznamenává balíčky, které každý job skutečně stáhne, včetně balíčků obnovených z cache, a výsledek exportuje v CycloneDX nebo SPDX.
- Síťová stopa ke každému jobu. Když je oznámen incident, můžete zkontrolovat, které buildy stáhly zasažený balíček a kam se každý job připojoval.
- Egress policy, kterou můžete přepnout na výchozí zákaz. Povolte zdroje balíčků, které job potřebuje, a kompromitovaný krok bude mít méně míst, kam poslat, co najde. Politiky jsou fail-closed a porušení spustí výstrahu.
- Průběžné přehodnocování. Monitorované SBOM se znovu kontrolují, jak vycházejí nové zranitelnosti, takže starý build nezůstane „čistý“ jen proto, že se na něj nikdo nepodíval.
Abychom byli k omezením upřímní: egress policy by nezabránila kompromitaci tj-actions vypsat tajné údaje do veřejného logu a žádný nástroj nevrátí uniklý token. Připínání a rotace jsou dál důležité. CRACI mění to, jak rychle zjistíte, zda jste byli vystaveni, a kam až může kompromitovaný krok dosáhnout.
Ke spuštění prvního workflow stačí nainstalovat GitHub App a změnit jeden řádek na runs-on: craci.
Kolik to stojí
CRACI účtuje jen minuty buildu: $0.002 za vCPU-minutu ($0.004 za výchozí runner se 2 vCPU), účtováno po sekundách, bez měsíčního poplatku a bez poplatku za SBOM. Úplné podmínky najdete v ceníku. Způsobilé startupy se mohou přihlásit do programu pro startupy a získat nejméně 100 000 bezplatných minut buildu a osobní onboarding.
Pokud prodáváte software v EU, vyplatí se také ověřit, zda se na vás vztahuje Cyber Resilience Act. Náš průvodce CRA vysvětluje rozsah a termíny.
Podívejte se, co váš build skutečně stahuje
Rezervujte si demo a spusťte jedno ze svých workflow na CRACI. Získáte SBOM a síťovou stopu jobu, aniž byste měnili aplikaci.
Rezervujte si demo