CanisterWorm-skadevare
Et sofistikert angrep på forsyningskjeden som opprinnelig var rettet mot den mye brukte Trivy-skanneren, har eskalert til et bredere angrep som påvirker en rekke npm-pakker. Trusselaktørene bak kampanjen mistenkes for å ha distribuert en tidligere udokumentert selvspredende orm kjent som CanisterWorm, noe som øker omfanget og virkningen av inntrengingen betydelig.
Skadevaren har fått navnet sitt fra bruken av en Internet Computer Protocol (ICP)-beholder, manipulasjonssikre smarte kontrakter som ligger på en desentralisert blokkjede, som en del av kommandoinfrastrukturen. Dette markerer det første offentlig dokumenterte tilfellet av at ICP-beholdere blir utnyttet som et våpen for å hente kommando-og-kontroll (C2)-endepunkter, og introduserer en ny og robust taktikk som kompliserer tradisjonelle tiltak for å redusere risikoen.
Innholdsfortegnelse
Kompromitterte pakker og vektor for initial tilgang
Angrepet har påvirket flere npm-pakker på tvers av ulike omfang, noe som viser en bred eksplosjonsradius innenfor programvarens forsyningskjede:
- 28 pakker under @EmilGroup-området
- 16 pakker under @opengov-området
- Tilleggspakker inkludert @teale.io/eslint-config, @airtm/uuid-base32 og @pypestream/floating-ui-dom
Denne kampanjen følger tett i kjølvannet av et påloggingsbrudd som gjorde det mulig for angripere å publisere ondsinnede versjoner av Trivy-relaterte verktøy, nærmere bestemt trivy, trivy-action og setup-trivy, som inneholdt innebygd funksjonalitet for å stjele påloggingsinformasjon. Operasjonen antas å være knyttet til en skyfokusert nettkriminell gruppe identifisert som TeamPCP.
Infeksjonsarbeidsflyt og desentralisert kommandoinfrastruktur
Infeksjonskjeden starter under installasjonsprosessen for npm-pakken, der et postinstallasjonsskript kjører en laster. Denne lasteren distribuerer en Python-basert bakdør som er utformet for å kommunisere med ICP-beholderen. Beholderen fungerer som en dead drop-resolver, og returnerer en URL som leder det infiserte systemet til å laste ned og kjøre neste nyttelast.
Den desentraliserte naturen til ICP-infrastrukturen gir angriperne en betydelig fordel. Siden beholderen dynamisk kan oppdatere nyttelast-URL-en, kan trusselaktører distribuere nye ondsinnede binærfiler på tvers av alle infiserte systemer uten å endre selve den distribuerte skadelige programvaren. Denne arkitekturen gjør også fjerningsarbeidet betydelig mer utfordrende.
Persistensmekanisme og stealth-teknikker
Persistens oppnås ved å opprette en systemd-brukertjeneste som er konfigurert til å starte den skadelige prosessen på nytt automatisk. Viktige egenskaper inkluderer:
- Automatisk omstart håndheves via Restart=always-direktivet
- En forsinkelse på 5 sekunder før bakdøren åpnes på nytt hvis den avsluttes
- Forkledning av tjenesten som legitim PostgreSQL-overvåkingsprogramvare under navnet «pgmon»
Denne tilnærmingen sikrer kontinuerlig drift samtidig som den minimerer sannsynligheten for oppdagelse ved å blande seg med legitime systemtjenester.
Adaptiv nyttelastlevering og kill switch-atferd
Bakdøren kommuniserer med jevne mellomrom med ICP-beholderen hvert 50. minutt ved hjelp av en forfalsket nettleser-brukeragent for å unngå mistanke. Den returnerte URL-en bestemmer neste handling:
- Hvis URL-en peker til en gyldig nyttelast, laster skadevaren den ned og kjører den
- Hvis nettadressen inneholder «youtube.com», går skadevaren inn i en inaktiv tilstand
Denne mekanismen fungerer effektivt som en ekstern kill switch. Ved å veksle beholderens URL mellom en godartet YouTube-lenke og en ondsinnet nyttelast, kan angriperen aktivere eller deaktivere skadevaren på tvers av alle infiserte systemer. Det er verdt å merke seg at tidligere utførte nyttelaster fortsetter å kjøre i bakgrunnen, ettersom skadevaren ikke avslutter tidligere prosesser.
En lignende YouTube-basert kill switch har også blitt observert i en trojanisert Trivy-binærfil (versjon 0.69.4), som kommuniserer med den samme ICP-infrastrukturen via en separat Python-dropper.
Ormefunksjoner og automatisert forplantning
I utgangspunktet var spredningen avhengig av et manuelt utført skript kalt deploy.js, som utnyttet stjålne npm-autentiseringstokener for å injisere ondsinnet kode i tilgjengelige pakker. Dette skriptet ble ikke utløst under installasjonen, men fungerte som et frittstående verktøy for å utvide angrepets rekkevidde.
Senere varianter av CanisterWorm har utviklet seg betydelig. I nyere versjoner, som de som finnes i @teale.io/eslint-config (versjon 1.8.11 og 1.8.12), integrerer ormen selvforplantning direkte i pakkens installasjonsprosess. Den oppdaterte mekanismen inkluderer:
- Utvinning av npm-autentiseringstokener fra det infiserte miljøet
- Umiddelbar utførelse av forplantningsrutinen som en frakoblet bakgrunnsprosess
- Automatisert publisering av kompromitterte pakker ved hjelp av innhentede legitimasjonsdetaljer
Dette skiftet forvandler angrepet fra en manuelt operert kampanje til et fullstendig autonomt forplantningssystem.
Eskalering til en selvopprettholdende trussel mot forsyningskjeden
Innføringen av automatisert tokenhøsting og selvforplantning markerer en kritisk eskalering. Enhver utviklerarbeidsstasjon eller CI/CD-pipeline som installerer en kompromittert pakke og inneholder tilgjengelige npm-legitimasjon, blir en aktiv forplantningsnode. Dette skaper en kaskadeeffekt der infiserte pakker fører til ytterligere infeksjoner på tvers av nedstrømsavhengigheter.
På dette stadiet utvikler trusselen seg fra å være kompromittert av isolerte kontoer til et selvopprettholdende økosystem for distribusjon av skadelig programvare. Hvert nylig infiserte miljø bidrar til spredningen, noe som muliggjør eksponentiell vekst og gjør inneslutning betydelig vanskeligere.
Noe som forverrer bekymringen er at testing av artefakter som en plassholdernyttelast («hello123») indikerer at angriperne aktivt forbedrer og validerer angrepskjeden før de distribuerer fullt operative, ondsinnede binærfiler.