halv

Författare

David Lindin @ Asurgent

Read time

5 min

markus-spiske-FXFz-sW0uwo-unsplash (1)

Ingen brukar läsa vad som faktiskt händer när man kör npm install. Det är som branschens rosa elefant, något alla vet men få vill prata om. Vi laddar hem kod från okända källor, kör den i pipelines med högre privilegier än vi borde, och hoppas på det bästa. Det är ungefär som att bjuda in 500 främlingar till ditt hus och ge dem alla nycklar till kassaskåpet.

Shai-Hulud-angriparna förstod detta mycket väl. De behövde inte bryta igenom brandväggar eller utnyttja avancerade noll-dagar utan de vände vårt förtroende mot oss.

Det spelade ut så här: en phishingkampanj fångade autentiseringstoken (GitHub / npm). Med token kunde angriparen injicera skadlig kod i postinstall-skript i vissa npm-paket. När någon installerade paketet exekverades koden där den genomsökte systemet efter GitHub- och npm-tokens, API-nycklar och molncredentialer (via metadata-endpoints i moln). När giltiga tokens upptäcktes, använde masken dem för att infektera fler paket som underhållaren kontrollerade. Paket återpublicerades med skadlig kod, vilket gjorde att masken kunde spridas exponentiellt. Utöver detta skapade den dolda GitHub Actions-workflows (t.ex. shai-hulud-workflow.yml) i angripna repos, exfiltrerade hemligheter och migrerade privata repos till publika versioner med suffix “-migration”. 

Omfattning av denna compromise är skrämmande. I de tidigaste rapporterna identifierades över 180 paket. Senare analyser pekar på att fler än 500 versioner inom fler än 100 paket kan ha drabbats.  Den skadliga koden injicerade en rutin som laddar ner TruffleHog för att leta hemligheter, och därefter exfiltrera dem via webhook-plats eller publika GitHub-repos kallade “Shai-Hulud”. Den försöker även pusha sig själv till fler paket som används av den drabbade användaren. 

Men viktigast av allt: även när de skadliga paketen tas bort, kvarstår alla tokens och nycklar som redan stulits. Det vil säga alla backdörrar finns kvar. Det är som att någon inte bara snott passet, utan även grävt gångar in i huset.

Utvecklarens roll: domen börjar här

För utvecklare är ansvar och vaksamhet avgörande. Det räcker inte att tro att “något verktyg” eller “policy” kommer skydda dig. Du måste själv bygga skydd i varje steg.

Först måste ni sluta lita blint på paket. Använd aldrig latest eller lösa versionintervall, varje beroende borde vara exakt pinad. Granska uttryckligen postinstall-skript innan du exekverar dem, särskilt i CI-miljöer. Kör installation i sandboxar där koden inte har åtkomst till verkliga tokens eller moln-credentialer.

Token-hantering är en avgörande punkt. Inga tokens får lagras som plaintext i miljövariabler, bash-historik eller commit-loggar. Alla konton, kopplat till npm, GitHub, med flera kräver MFA / 2FA. Token bör vara kortlivade, med minimal rättighet, och om möjligt projektbaserade. En token per projekt, ingen central nyckel som gäller överallt.

Dessutom måste kodgranskning omfatta säkerhetsaspekter. Varje beroendeändring som pushas bör godkännas av minst två personer, där någon granskar “vad kan detta paketet göra som vi inte vill att det ska göra?” Inför SBOM som obligatoriskt: varje build skapar en Software Bill of Materials där du måste kunna säga vilka paket som ingår i varje artefakt. När nästa attack kommer (och den kommer), måste du kunna svara på frågan: vilka system är drabbade och det snabbt.

Utvecklarens verktyg är inte “mer säkerhetspolicy” utan en säkerhetsmedveten kultur i realtid.

Ops / Drift / DevOps: pipeline är nya perimetern

När artefakter lämnar utvecklarnas händer är det upp till drift/ops att förhindra att skadlig kod når produktion. Era pipelines och registries är frontlinjen.

Varje byggd artefakt, containerimage som npm-paket eller whatever, måste passera minst en säkerhetsskanning. Använd verktyg som Trivy, Grype, Anchore och liknande. Om skanningen hittar kritiska sårbarheter eller misstänkt kod, måste deployment stoppas automatiskt. Workshop-gates baserade på CVSS-nivåer eller heuristik blir din livlina.

När en bild pushas till din containerregistry måste registry vara konfigurerad för “push scanning” det vill säga skanna genast när innehåll laddas upp. Samtidigt måste redan lagrade images skannas regelbundet (dagligen, veckovis) för att fånga nya CVE-databaser. I drift måste runtime-bevakning finnas: vad gör containerna? Vilka nätverksanslutningar öppnas, vilka processer körs, och vilka filer läses eller skrivs? Oväntad outbound-trafik eller beteenden måste generera larm och (om möjligt) automatisk containment.

Loggning och telemetri är ert nervsystem. Ni måste logga varje paketpublicering, versionsändring, GitHub-event, pipeline-körning och registry-interaktion. Endast om du ser kan du upptäcka. Hemligheter och nycklar i drift måste skyddas så använd Managed Identities, nyckelvalv (Key Vault) och strikt IAM-princip ”least privilege”. Vid misstanke om kompromiss måste system kunna rotera tokens och isolera angripna komponenter på minuter, inte dagar.

Vid incident: analysera beroende-impact med SBOM och beroendeträd så du kan identifiera vilka komponenter och produkter som är utsatta, rulla tillbaka till säkra versioner, revoka tokens, återställ från godkända artefakter och genomför postmortem. Incidenthanteringsplan för supply chain-attacker ska finnas färdig i era playbooks.

CIO / CISO: styra mot motståndskraft

I styrelserummet handlar inte diskussionen om menus eller versionsnummer utan det handlar om existens och förtroende. En framgångsrik supply chain-attack påverkar hela kedjan. “produkt, kund, rykte, ekonomi”.

CISO / CIO måste se till att leveranskedjens säkerhet inte blir “något som får göras om vi har tid”. Den måste vara central i riskregister, budget och strategisk planering. Definiera mätbara KPI:er: procent av artefakter som skannas, medel-tid till patch, procent dependencies med pinade versioner, tid att rotera tokens vid incident och följ dem. Dessa KPI:er måste vara synliga i ledningsrapportering och styrelsebeslut.

Verktygen måste integreras, inte staplas. GitHub Advanced Security (kodskanning, secret scanning), SCA-verktyg, containerimage-skanning och runtime-detektion måste samverka med era pipelines, dina registries och driftplattform (t.ex. Azure). Automatisering och AI-/ML-baserad analys är inte val utan de är nödvändiga för att hantera komplexiteten.

Policyramverk krävs: inget kod- eller beroende-commit får nå produktion utan säkerhetsgodkännande. SBOM, scanningrapporter och säkerhetspolicyer måste vara krav i leverantörsavtal. Om en leverantör vägrar, är det fel leverantör. Utbildning måste prioriteras: utvecklare och ops måste internalisera att säkerhet är del av leverans, inte extrauppgift. Utnämn “security champions” i varje team som kan agera översättare mellan säkerhet och utveckling.

Du måste också ha proaktiva incidentberedskapsövningar: simulera supply chain-attacker regelbundet, testa hur snabbt ni kan isolera/återställa, identifiera gap och slipa processen.

I styrelsesammanhang måste du kunna svara på frågor före de ställs: vilka system kan vara exponerade, vilka kunddata kan vara riskerade, hur snabbt kan vi återvinna förtroende, vad kostar det för oss - och du måste ha svaren.

Ta del av de senaste insikterna och nyheterna

Prenumerera på vårt nyhetsbrev för att ha koll på senaste nytt inom cybersäkerhetssfären. 

Prenumerera på vår cybersäkerhetsnyheter