123% fler rapporterade CVE:er per dag 2026 än förra året.

Red team vs blue team

Attacker mot leveranskedjan: hur angripare tar sig in och hur du stoppar dem

Angripare riktar sig sällan mot ditt företag. De riktar sig mot paketet, Actionen eller byggverktyget som företag överallt är beroende av, och testar sedan exploiten på alla samtidigt. De behöver inte din beroendelista. Det gör du.

Vad är en attack mot mjukvarans leveranskedja?

En attack mot mjukvarans leveranskedja komprometterar något som en produkt byggs av, till exempel ett open source-paket, en CI/CD-komponent eller byggsystemet, i stället för att angripa produkten direkt. Modern programvara består till största delen av andras kod: det mesta kommer från open source-paket, och de flesta av dem är transitiva beroenden som ingen i teamet har valt. Komprometterar du en brett använd komponent når du varje organisation som bygger på den.

Det ändrar hur angripare väljer mål. De undersöker inte ett enskilt företags beroenden. De väljer ett paket eller verktyg med stor spridning, utnyttjar det överallt och ser vad som svarar.

Typer av attacker mot mjukvarans leveranskedja

Utnyttjande av ett sårbart beroende

En brist i ett populärt open source-paket offentliggörs, och angripare utnyttjar den i varje produkt som levererar den sårbara versionen, oftast som ett transitivt beroende som ingen har valt direkt.

Skadliga paketreleaser

En angripare tar över ett underhållarkonto, eller en mask stjäl publiceringstokens, och släpper en förgiftad version av ett betrott paket. Den körs i samma ögonblick som ett bygge installerar den, som med npm-masken Shai-Hulud.

Bakdörrar i uppströmsprojekt

En bidragsgivare bygger upp förtroende i ett open source-projekt över tid och smyger sedan in skadlig kod i en release som nedströms distributioner och produkter tar in, som med bakdörren i xz utils.

Typosquatting och dependency confusion

Paket med namn som liknar populära paket fångar upp skrivfel. Dependency confusion går längre: ett publikt paket med samma namn som ett företags interna paket installeras i dess ställe.

Komprometterade CI/CD-komponenter

En GitHub Action eller ett annat byggverktyg kapas, och varje pipeline som använder det kör angriparens kod med sina hemligheter inom räckhåll, som med tj-actions och Codecov.

Manipulation av bygge och artefakter

Själva bygget ändras, eller så byts artefakten ut mellan bygget och driftsättningen, så att ett rent källkodsträd ändå ger en komprometterad release, som med SolarWinds.

Exempel på attacker mot leveranskedjan

SolarWinds är den mest kända attacken mot leveranskedjan: skadlig kod som förts in i bygget och levererats till kunder som en vanlig uppdatering. De senaste attackerna går i stället på paketregister och CI-pipelines, där ett enda komprometterat paket eller en enda komprometterad Action når varje bygge som använder dem. Nyast först:

npm-mask · sedan september 2025

Shai-Hulud

En självspridande mask som körs när ett infekterat npm-paket installeras, stjäl tokens för npm, GitHub och molntjänster och publicerar infekterade versioner av offrets andra paket. De flesta infektioner kördes i CI.

Så kontrollerar du dina byggen →

CVE-2025-30066 · mars 2025

tj-actions/changed-files

CISA rapporterade att varje version av denna populära GitHub Action var komprometterad i tre dagar, med hemligheter exponerade i arbetsflödesloggar. Arbetsflöden som refererade till den via tagg körde angriparens kod.

CVE-2024-3094 · mars 2024

Bakdörren i xz utils

Andres Freund hittade en bakdörr i xz-versionerna 5.6.0 och 5.6.1 efter att ha märkt att SSH-inloggningar använde för mycket CPU. Den hade förts in i själva uppströmsprojektet.

CVE-2021-44228 · december 2021

Log4Shell

En brist i Apache Log4j 2, klassad som CVSS 10.0, lät en angripare som kontrollerade ett loggat meddelande köra godtycklig kod. Det svåra för de flesta team var att hitta vilka applikationer som innehöll log4j-core, oftast som ett beroende till ett beroende.

januari till april 2021

Codecov Bash Uploader

Angripare ändrade Bash Uploader-skriptet som team körde i sina CI-pipelines, så att det skickade CI-miljön, inklusive inloggningsuppgifter, tokens och nycklar, till en server utanför Codecovs infrastruktur. Det pågick obemärkt från den 31 januari tills en kund rapporterade det den 1 april.

SUNBURST · december 2020

SolarWinds Orion

Angripare hade långvarig, dold åtkomst till byggprocessen för SolarWinds Orion och förde in skadlig kod i Orion-releaserna 2019.4 till och med 2020.2.1 HF1, som kunderna installerade som vanliga uppdateringar. CISA utfärdade ett nöddirektiv som svar.

Red team vs blue team

Så fungerar attacker mot leveranskedjan, steg för steg

Varje steg med angriparens ord, och försvaret som svarar på det.

Steg 1 av 3

Rekognoscering

Du behöver inte känna till målet. Välj paketet, så väljer målen sig själva.

Red team

Satsa på beroendena som alla har

Du behöver inte deras lockfile. Populära paket ligger djupt i det transitiva trädet för nästan allting, och de flesta team kan inte säga vilka de levererar. Publika ledtrådar ringar in det: versioner i JavaScript-buntar och HTTP-huvuden, publika repon och containeravbilder. Och det som deras bygge hämtar utanför lockfilen, som binären ett postinstall-skript laddar ner eller lagren under deras basavbild, har deras skanner aldrig sett, så ingen patchar det.

Blue team

Känn till varje beroende som varje bygge drog in

CRACI ser trafiken som kommer in i varje bygge och registrerar varje paket och fil som bygget drar in, inklusive de dolda beroenden som lockfile-baserade verktyg missar, i alla led av det transitiva trädet. Din SBOM kommer från bygget som levererades, så du har listan som en angripare aldrig behövde, innan någon börjar leta.

SBOM:er från bygget →

Red team

Slå till i samma minut som en ny CVE kommer

Ett nytt säkerhetsmeddelande talar om exakt vilka versioner som är sårbara. Bygg exploiten, skanna efter allt som svarar och låt skanningen tala om vilka de är. Du börjar samma dag, medan deras team fortfarande frågar ”är vi berörda?” i en Slack-tråd.

Blue team

”Är vi berörda?” besvaras från byggregistreringen

CRACI omvärderar bevakade SBOM:er löpande mot nya sårbarhetsdata. Bygghistoriken visar vilka byggen som innehöll det sårbara beroendet, direkt eller transitivt, så att du vet var det levererades och hur länge.

Är vi berörda? →

Steg 2 av 3

Ta sig in

Utnyttja bristen innan den är patchad, eller hoppa över bristen och åk med i deras pipeline.

Red team

Generera attacken samma dag som den offentliggörs

AI gör om ett säkerhetsmeddelande och en patch-diff till en fungerande attack innan deras säkerhetsteam har triagerat ärendet. Offentliggörandet är ditt startskott. Deras sprintplanering är nästa vecka.

Blue team

Sluta leverera den sårbara versionen

Policykontroller kan blockera alla byggen som innehåller en specifik CVE, så att den sårbara versionen slutar levereras i samma ögonblick som du bestämmer det, hur djupt i trädet den än ligger.

Åtgärda CVE:er →

Red team

Skriv om en tagg, kör i tusen pipelines

Arbetsflöden litar på taggar som @v4, och taggar kan flyttas. Komprometterar du en populär GitHub Action kör varje arbetsflöde som använder den din kod, med sina hemligheter inom räckhåll.

Blue team

Vet exakt vilken Action varje bygge körde

CRACI registrerar de GitHub Actions som ett arbetsflöde kör i byggets SBOM, låsta till den commit som faktiskt kördes. När en Action komprometteras kan du se vilka byggen som körde den skadliga koden i stället för att gissa utifrån en tagg.

Säkerhetschecklista för CI/CD →

Steg 3 av 3

Ta sig ut

Ta hemligheterna och stanna kvar för mer.

Red team

Ring hem från deras CI

En skadlig paketrelease kör sitt installationsskript inne i deras bygge, där tokens och molnbehörigheter finns. CI-runners kan oftast nå hela internet, så hemligheterna ger sig av till din server innan någon vet att paketet är skadligt.

Blue team

Ett bygge når bara det som behövs

En egress-policy som nekar som standard låter ett bygge nå sina paketkällor och publiceringsmål och blockerar allt annat. Skadlig kod som skickar dina hemligheter till en angripares värd blockeras, även som patient noll i en attack som ingen har sett tidigare, och du får en varning om policyöverträdelsen.

Egress-policyer →

Red team

Stanna på runnern till nästa jobb

Långlivade självhostade runners är en gåva: plantera något i arbetsytan eller verktygscachen och vänta på att nästa jobb, och nästa uppsättning hemligheter, kommer till dig.

Blue team

En isolerad virtuell maskin per jobb

Varje CRACI-jobb körs i en egen isolerad virtuell maskin, så inget som ett jobb lämnar efter sig väntar på nästa. Det finns inte heller någon flotta av runners för dig att patcha och härda.

Hanterade vs självhostade runners →

Efter offentliggörandet

Kapplöpningen börjar när säkerhetsmeddelandet blir offentligt

Angriparen behöver inte veta att du kör beroendet. Angriparen testar exploiten överallt och ser vad som svarar. Ditt team behöver veta var beroendet levererades. Skillnaden är om du måste gå och leta, och det blir fler kapplöpningar för varje år: se hur många CVE:er som publiceras varje dag.

Red team

  1. Säkerhetsmeddelande publiceras
  2. Exploit genereras
  3. Skanning efter allt som kör en sårbar version
  4. Inne hos varje träff, även hos dig

Blue team, utan byggregistrering

  1. Säkerhetsmeddelande publiceras
  2. ”Är vi berörda?”
  3. Grep i repon, lockfiler och avbilder
  4. Hittar den transitiva kopian som ingen listade
  5. Räknar ut vilka releaser som levererade den
  6. Patch

Blue team, med CRACI

  1. Säkerhetsmeddelande publiceras
  2. Bevakade SBOM:er omvärderas
  3. Bygghistoriken visar byggena och perioden
  4. Policykontroll blockerar nya byggen med CVE:n

Så förhindrar du attacker mot mjukvarans leveranskedja

Ingen enskild kontroll stoppar varje attack mot leveranskedjan. Kombinera de här, så blir varje steg ovan svårare. För pipeline-sidan i detalj, se säkerhetschecklistan för CI/CD-pipelines.

  1. Vet vad varje bygge levererar. Ha en SBOM för varje bygge, inklusive transitiva beroenden och allt som hämtas utanför lockfilen. En skanning av repot är ingen registrering av releasen.
  2. Bevaka det som levererats, inte bara standardgrenen. Kontrollera släppta byggen på nytt mot nya säkerhetsmeddelanden, och behåll bygghistoriken som visar sedan när du varit exponerad.
  3. Lås beroenden och Actions. Använd lockfiler, och lås GitHub Actions till en fullständig commit-SHA. GitHub kallar det det enda sättet att använda en action som en oföränderlig release.
  4. Stoppa sårbara versioner vid bygget. Stoppa byggen utifrån de sårbarheter du har bestämt inte får levereras, så att en åtgärd inte i det tysta kan gå förlorad.
  5. Neka egress som standard i CI. Låt byggen bara nå sina paketkällor och publiceringsmål, så att skadlig kod inte kan skicka ut hemligheter, inte ens i en attack som ingen har sett tidigare.
  6. Isolera jobb och begränsa hemligheter. Kör varje jobb på en ny, isolerad maskin, och ge varje jobb bara de tokens och behörigheter det behöver.
  7. Verifiera artefakter innan du driftsätter. Signera proveniens under bygget och kontrollera att det som körs i produktion är exakt det som byggdes.
  8. Rotera hemligheter efter en incident. Om ett komprometterat paket eller en komprometterad Action kördes i din pipeline, behandla varje hemlighet den kunde nå som exponerad. Det var CISA:s råd efter tj-actions-attacken.

De behöver inte listan. Det gör du.

Angripare bevakar varje säkerhetsmeddelande och testar exploiten på alla samma dag som en sårbarhet offentliggörs. De har aldrig behövt din beroendelista. Det gör du. CRACI ger ditt team den listan, hämtad från själva bygget, och stänger dörrarna som angripare räknar med: öppen egress och delade runners.

Attacker mot leveranskedjan: vanliga frågor

Vad är en attack mot mjukvarans leveranskedja?

En attack mot den kod, de verktyg eller de tjänster som en produkt byggs av, till exempel ett open source-paket, en CI/CD-komponent eller byggsystemet, snarare än mot själva produkten. En enda kompromettering når varje organisation som använder den berörda komponenten.

Vilka exempel finns på attacker mot mjukvarans leveranskedja?

Masken Shai-Hulud (sedan 2025) spreds genom infekterade npm-paket och stal hemligheter från CI. Attacken mot tj-actions/changed-files (CVE-2025-30066) kapade en populär GitHub Action. Bakdörren i xz utils (CVE-2024-3094) smögs in i ett uppströms komprimeringsbibliotek. Log4Shell (CVE-2021-44228) utnyttjade en brist i ett brett använt loggningsbibliotek för Java. Codecovs Bash Uploader (2021) ändrades för att skicka inloggningsuppgifter från CI till en extern server, och SolarWinds Orion (2020) levererades med skadlig kod som förts in i bygget.

Vilken är den mest kända attacken mot leveranskedjan?

SolarWinds. År 2020 förde angripare med dold åtkomst till byggprocessen för SolarWinds Orion in skadlig kod i dess releaser, och kunderna installerade den som en vanlig uppdatering. Den visade att ett rent källkodsträd inte räcker: själva bygget måste vara tillförlitligt och verifierbart.

Vet angripare vilka beroenden mitt företag använder?

Oftast inte, och de behöver inte veta det. De flesta attacker riktar sig mot ett paket snarare än ett företag: när ett säkerhetsmeddelande är ute testar angripare exploiten mot allt som kan köra en sårbar version och ser vad som svarar. Publika ledtrådar, som versioner i JavaScript-buntar eller repon med öppen källkod, hjälper dem att sikta. Asymmetrin är att du faktiskt behöver listan: för att veta om du är berörd måste du veta vad varje bygge levererade, inklusive det som hämtades utanför lockfilen.

Hur förhindrar man attacker mot mjukvarans leveranskedja?

Ingen enskild kontroll stoppar alla. Ha en SBOM över vad varje bygge levererar och bevaka den mot nya säkerhetsmeddelanden, lås beroenden och GitHub Actions, blockera sårbara versioner vid bygget, begränsa vad CI-jobb kan ansluta till, isolera jobb och begränsa deras hemligheter, och verifiera att driftsatta artefakter är de du byggde.

Hur kan jag skydda mig mot attacker mot leveranskedjan via npm?

Checka in en lockfile och installera från den i CI, och inaktivera installationsskript där ett bygge inte behöver dem (npm:s --ignore-scripts). Behåll en registrering av vilka paketversioner varje bygge faktiskt installerade, så att du snabbt kan kontrollera när en ny våg som Shai-Hulud blir känd. Begränsa vad CI-jobb kan ansluta till, så att ett skadligt installationsskript inte kan skicka ut dina tokens, och rotera varje token som en infekterad version kan ha nått.

Vad betyder red team vs blue team här?

I säkerhetsövningar spelar red team angriparen och blue team försvarar. Den här sidan använder samma uppdelning: varje steg i en attack mot leveranskedjan med angriparens ord, besvarat av försvaret.

Upptäcker CRACI skadliga paket?

Kända sådana, ja. En skadlig release som har en publicerad CVE, till exempel bakdörren i xz, flaggas som vilken annan sårbarhet som helst, och en policykontroll kan blockera byggen som innehåller den. CRACI analyserar inte hur paket beter sig och poängsätter inte rykte, så ett helt nytt skadligt paket flaggas inte förrän det finns ett säkerhetsmeddelande. Det är det egress-policyn är till för: med neka som standard når bygget bara de värdar det behöver, så paketet kan inte skicka ut dina hemligheter, inte ens i en attack som ingen har sett tidigare.