RuntimeBroker npm Typosquat Plants Crypto Clipper

RuntimeBroker: en npm Typosquat planter en 40-kjedes kryptoklipper som en OS-kryptert "System Runtime Helper"

TL; DR

21.05.2026, npm-utgiveren jaggle utgitt ni versjoner (1.0.0 gjennom 1.0.8) av @jaggle/resizeobserves i et vindu på omtrent to timer.

Pakken er en typosquat av det legitime @juggle/resize-observer polyfill – en mye brukt pakke med millioner av ukentlige nedlastinger – men som ikke leverer noen faktisk ResizeObserver-implementering.

I stedet er pakkens postinstall-krok installerer en medfølgende Python-nyttelast, registrerer persistens som en plattformbasert runtime-megler og distribuerer en plattformuavhengig utklippstavlkaprer som retter seg mot kryptovalutatransaksjoner.

Linux utholdenhet fremstår som python3-dbus-helper, macOS as com.apple.python.runtimeog Windows as PyRuntimeBroker.

Nyttelasten overvåker kontinuerlig utklippstavlen for lommebokadresser på tvers mer enn 40 blokkjeder og erstatter lydløst kopierte adresser med angriperkontrollerte lommebøker.

Skadevaren opererer helt lokalt uten utgående C2-infrastruktur, noe som gjør utklippstavlens erstatning til selve eksfiltreringsmekanismen.

Den primære IOC-en er selve pakkenavnet: @jaggle/resizeobserves — legg merke til den utelatte vokalen i «jaggle» og den tilføydne «s» i «resizeobserves».

Alvorlighetsgrad: høy.

Angrepet: Hvordan det fungerer

npm:@jaggle/resizeobserves ser ikke ut som skadelig programvare på en tilfeldig måte npm-visning. Dens README.md er den ordrette README-filen til npm:@jonglere/endre størrelse-observatør — samme kodeeksempler, samme bruksanvisninger, samme importer { ResizeObserver } fra '@juggle/resize-observer' referanser overalt. Plagiatet er så omfattende at alle som ser på dokumentasjonen ville anta at de leser dokumentasjonen til den legitime pakken.

Ocuco pakke.json, derimot, er sparsom: nei Repository felt, en enkelt bin inngang peker mot bin/utklippstavle-guardian.jsOg etterinstallasjon skript som kjører node npm-install.jsREADME-filens eksempler på «grunnleggende bruk» refererer til en JavaScript-implementering som ikke finnes noe sted i tarballen. Den eneste JavaScript-filen i pakken er installasjonsskriptet.

Trinn 1 — npm postinstall bootstrapper en Python-nyttelast

npm-install.js er plattformbevisst. Den lokaliserer en pip kjørbar langs en fast søkesti (/usr/bin/pip3, /usr/local/bin/pip, faller tilbake til python3 -m pip), installerer den medfølgende Python-pakken fra tarball-katalogen, og – på Linux – henter inn xclip or xsell av apt-get, pacmaneller DNF hvis ingen av dem allerede er til stede:

Bruken av –break-system-pakker er bevisst: moderne Linux-distribusjoner leverer Python med PEP 668s markør for eksternt administrert miljø aktivert, som blokkerer nettstedsomfattende pip-installasjoner som standard. Installasjonsskriptet tvinger installasjonen gjennom.

Skriptet er også sudo-bevisst. Når den kjørende uid-en er resultatet av en sudo npm installasjon, leser manuset SUDO_USER og punger ut til få passord å finne ekte brukerens hjemmekatalog, og skriver deretter persistensfilene dit i stedet for inn i / RootPersistens er per bruker, ikke systemomfattende.

Fase 2 – Kryss-OS-persistens under runtime-meglernavn

Etter at Python-pakken er installert, registrerer skriptet en automatisk startoppføring under et annet navn på hvert operativsystem:

  • Linux — en systemd-brukerenhet på ~/.config/systemd/bruker/python3-dbus-hjelper.tjeneste. Enhetens Tekniske beskrivelser is Python D-Bus Runtime HelperSkriptet prøver også å aktivere det via systemctl –brukeraktivering, og går tilbake til en manuell symbolsk lenke under standard.mål.ønsker/ når systemctl feiler. Hvis det kjøres under sudo, bytter skriptet til sudo -u systemctl –brukermed XDG_RUNTIME_DIR angi slik at brukerbusskallet fungerer.
  • macOS — en LaunchAgent-plist på ~/Bibliotek/LaunchAgents/com.apple.python.runtime.plist med KjørVedLoad=true og KeepAlive=sann, deretter lastet inn via launchctl-lasting.
  • Windows — en planlagt oppgave kalt PyRuntimeBroker, utløst AtLogOn, med en utførelsestidsgrense på null (dvs. ingen timeout), registrert via PowerShell.

Alle tre navnene er troverdige ved første øyekast. python3-dbus-hjelper følger navnekonvensjonen for legitim Python-D-Bus-integrasjon på Linux-skrivebord. com.apple.python.runtime etterligner Apples omvendte DNS-merking for sine egne tjenester. PyRuntimeBroker gjenspeiler Windows sin RuntimeBroker.exe — en ekte, signert Microsoft-tjeneste som formidler tillatelsesforespørsler for UWP-apper. Ingen av disse er ekte Apple/Microsoft/Python-tjenester i denne sammenhengen, men en forsvarer som gjør en rask visuell skanning av systemctl –brukerlisteenheter or Get-ScheduledTask er usannsynlig å rykke til.

Fase 3 – Kapreren av utklippstavlen

Python-nyttelasten, installert på utklippstavle_verge/verge.py, kjører en uendelig løkke som avspør systemets utklippstavle hvert 400. millisekund. Ved hvert hakk henter den innholdet i gjeldende utklippstavle via pyperclip.paste() og kjører dem mot en liste med over førti forhåndskompilerte regulære uttrykk som dekker lommebokadresseformater for Ethereum, Bitcoin, Monero, Solana, TRON, TON, Ripple, Litecoin, Dogecoin, Polkadot, NEAR, Cosmos, Algorand, Stellar, Cardano, Bitcoin Cash, Dash, Zcash, Aptos, Sui, Tezos, MultiversX, Harmony, Terra, Injective, Osmosis, Kava, Celestia, Nano, Filecoin, Ronin, Ergo, DigiByte, Hedera, BNB Smart Chain og flere andre som er stubbet, men tomme i standardkonfigurasjonen (Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin).

Når en match lander, leser skriptet angriperens adresse for den kjeden fra ~/.config/utklippstavle-verge/config.json (eller dens plattformekvivalenter) og overskriver utklippstavlen med den erstattede teksten:

Det finnes ingen nettverksfyr. Klipperen ringer ikke hjem, registrerer ikke infiserte verter, og eksfiltrerer ikke noe. Eksfiltreringen er selve substitusjonen: når en bruker kopierer en mottakeradresse fra lommebokens brukergrensesnitt og limer den inn i en sendedialog, tilhører den innlimte adressen operatøren. Midlene går tapt i båndet, transparent for brukeren.

Hva er nytt her

Noen få detaljer skiller seg ut sammenlignet med den generiske kryptoklippermalen:

1. npm → Python-kryssning. De fleste kryptoklipperne vi ser i npm er ren JavaScript, ofte tilslørt med _0x matriserotasjon eller eval(atob(…)) stabler. Dette eksemplet bruker npm-tarballen som ikke noe mer enn en leveringspakke for en Python-pakke – ren Python – og lar pip håndtere avhengighetsinstallasjon (pyperclip, psutil, Valgfri settproctitle) erklært i den medfølgende pyproject.tomlDet er ingen JavaScript-forvirring å omgå. Selve klipperen er enkel og lesbar Python.

2. Tri-OS-persistensetiketter valgt for plausibilitet. Mange plattformuavhengige installasjonsprogrammer registrerer persistens under generiske navn (oppdateringstjeneste, hjelper.plist). Dette eksemplet tar seg bryet med å velge etiketter som ligner plattformnative runtime-brokere på hvert operativsystem. Navngivningen er det eneste forsøket på stealth – det er ingen rootkit, ingen skjuling av brukerland, ingen sti-tilsløring. Veddemålet er at forsvarere sjelden reviderer ~/.config/systemd/bruker/ og at en tjeneste som heter python3-dbus-hjelper vil ikke skille seg ut i en tilfeldig anmeldelse.

3. Prosesstittel-forkledning er reell, men antianalyse er sovende. Python-nyttelasten definerer en _disguise_process() funksjon som setter prosesstittelen via settproctitle (Linux/macOS) eller AngiKonsolltittelW (Windows) — og main () kaller det. Så ps til Vil vise seg python3-dbus-hjelper istedenfor python3 …/guardian.pyDen samme modulen definerer imidlertid en kjører_monitor() funksjon som lister opp kjente prosessovervåkingsverktøy (htop, btop, Oppgavebehandling, Aktivitetsmonitor, Prosess hacker, Ressursmonitor, GNOME / KDE / Xfce / MATE systemmonitorer, og så videre) — og main () kaller den aldri. Substitusjonsløkken kjører ubetinget, enten brukeren har en prosessmonitor åpen eller ikke. Funksjonen er død kode i den leverte versjonen. Den er mest sannsynlig en rest fra en tidligere iterasjon, eller et stillas for en funksjon som ennå ikke er koblet opp. Uansett er den publiserte nyttelastens anti-analyseoverflate én prosesstittel-omdøping, ikke aktiv monitor-unngåelse.

4. Den medfølgende konfigurasjonssammenslåingsvirkemåten. npm-install.js skriver standard lommeboklisten til ~/.config/utklippstavle-verge/config.json og, hvis en konfigurasjonsfil allerede finnes, fletter inn alle nøkler med en tom verdi. Det betyr en bruker som tidligere har blitt infisert og delvis har ryddet opp i konfigurasjonen – for eksempel ved å tømme ethereum verdi — vil få den utfylt på nytt ved hver påfølgende installasjon av skadelig pakke. Det er ingen opprydding av persistensfilen i noen kodebane.

Dato/klokkeslett (UTC) Event
2026-05-21 18:50:32 @jaggle/resizeobserves@1.0.0 publisert.
2026-05-21 19:55:55 1.0.1 publisert – første versjon flagget av ekstern skanning.
2026-05-21 19:58:10 1.0.2 publisert.
2026-05-21 20:05:03 1.0.3 publisert.
2026-05-21 20:09:24 1.0.4 publisert.
2026-05-21 20:13:48 1.0.5 publisert.
2026-05-21 20:41:52 1.0.6 publisert.
2026-05-21 20:43:56 1.0.7 publisert – legger til en try/catch innpakning rundt skrivetrinnet for lommebokkonfigurasjon i npm-install.js.
2026-05-21 20:46:15 1.0.8 publisert – installatøren har fått nytt navn npm-install.jsnpm-install.cjs (byte-identisk innhold).
2026-05-22 Dommer og IOC-er publisert. Versjoner finnes fortsatt i registeret på publiseringstidspunktet (pågående).

Ni versjoner på én time og femtiseks minutter er raskt selv for en typosquat. Mønsteret er i samsvar med en publiser-og-brenn-kampanje — fyll registeret under ett referansenummer, la deteksjonen gå sin gang, og flytt til et nytt referansenummer når én enkelt versjon er fjernet. De synlige deltaene på tvers av kjøringen er kosmetiske: 1.0.1 lagt til eksplisitt /usr/bin/pip3-style-stier til pip-søkelisten (sudo-kompatibilitet), 1.0.7 pakket inn wallet-config-skrivingen i en try/catch, og 1.0.8 omdøpte installasjonsprogrammet fra . Js til .cjs samtidig som innholdet holdes byte-identisk. .cjs gi spor nytt navn med npm-advarsler om tvetydig moduloppløsning i pakker uten en eksplisitt "type" feltet, og kan være et forsøk på å undertrykke støy under installasjon som kan tiltrekke seg oppmerksomhet. Python-nyttelasten – den eneste delen som faktisk stjeler – er uendret på tvers av alle ni versjoner.

Indikatorer for kompromiss

Nettsidepakker

Økosystem Pakke versjoner status
NPM @jaggle/resizeobserves 1.0.0 gjennom 1.0.8 Direkte ved publisering; fjerning forespurt.

Filer og hasher

Sti Merknader
clipboard_guardian/guardian.py
(md5 f7935c2c82bc881288611ab6cd634f17)
Identisk på tvers av alle ni publiserte versjoner (1.0.0 gjennom 1.0.8). Clipper-nyttelasten.
npm-install.js (1.0.0 – 1.0.7)
npm-install.cjs (1.0.8)
Persistensinstallasjonsprogram; samme ende-til-ende-oppførsel. 1.0.7's .js og 1.0.8's .cjs er byte-identiske.
~/.config/clipboard-guardian/config.json Linux persistenskonfigurasjon og lommebokpakke.
~/Library/Application Support/clipboard-guardian/config.json macOS-persistenskonfigurasjon og lommebokpakke.
%APPDATA%\clipboard-guardian\config.json Windows-persistenskonfigurasjon og lommebokpakke.
~/.config/systemd/user/python3-dbus-helper.service Linux autostart-persistens.
~/Library/LaunchAgents/com.apple.python.runtime.plist macOS LaunchAgent-persistens.
~/Library/Logs/com.apple.python.runtime.log macOS stdout/stderr-logg for agenten.
Scheduled Task PyRuntimeBroker Windows automatisk startoppgave (AtLogOn, ingen timeout).

Atferdsindikatorer

Signal Tekniske beskrivelser
pip install --break-system-packages fra npm etterinstallasjon Tvinger frem Python-installasjon på hele nettstedet og omgår PEP 668-beskyttelse.
apt-get install -y xclip (eller pacman/dnf) Installerer utklippstavlverktøy på Linux under pakkeinstallasjon.
python3-dbus-helper.service systemd brukerenhet Persistens registrert under et plausibelt utseende runtime-helper-navn.
com.apple.python.runtime LaunchAgent Persistensetikett utenfor legitime Apple-systemstier.
PyRuntimeBroker Planlagt oppgave Falsk Windows runtime broker-persistens uten legitim installasjonskilde.
Python-prosess med tittelen python3-dbus-helper importere pyperclip og psutil Atferdsmessig avvik mellom vist prosessnavn og importerte biblioteker.
Endringer i utklippstavlen ~0.4 sekunder etter kopiering av lommebokadresse Signaturoppførsel for erstatning av kryptovalutaadresse.

Pakke med angriperlommebøker (liste over forsvarssøkere)

Lommeboklisten sendes hardkodet i npm-install.js og utklippstavle_verge/verge.pyForsvarere kan bruke listen både som en blokkeringsliste (behandle enhver overføring til disse adressene fra bedriftslommebøker som mistenkelig) og en jaktnøkkel (behandle tilstedeværelsen av noen av disse strengene i en uautentisert konfigurasjonsfil, byggeartefakt eller utviklermaskin som en infeksjonsindikator).

Attacker Wallet-pakke

Kjede Adresse
Ethereum / BSC 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Ronin (EVM) ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Bitcoin bc1qs2mpls4p0f7fng073gy2rcdgjpf7la4eugpt6y
Bitcoin Cash bitcoincash:qqmvyxxklzp7l3eslxavhc8phl6hprdf25lwc29nlt
Litecoin ltc1qnefc8x59a9cwtqnflt8hmqvezqw4hc7lt3fkqe
dogecoin DNEJmYRZtzyK44tZea4S7wV3otTyRk48Fy
Dash XtJ7E6mnhPK93Vib29PGQrTmQjhTTqFwbS
Zcash t1d4hcEnBjdh9X6Wb6R2dxqjnxddJ6ocP8M
DigiByte DPmH2dhiGK3hk3A69tZUMz6tHzGFHBzSrH
Monero 42zhAidVhP7QETk83JAspS59ASALSHFio44vmu6MdDCz15cSqtqsG4QVyzY8vTrjGrTEA6zMbWW6Yft1Ynz1xLfCN5FVbXf
Solana DWBAmQLi9gP6mk7UfJfQGYTV1UPK32WekLTqg83q1mc5
TRON TVgEgMemmJABYYnbNr1Wi8bSgADEkdEBt2
TON UQDTSkvwmptU9eG988KgxS3WjnYAZlXgfpJxnz4mhWZAvULr
Ripple r9tj3cMCiqRijNYqNVYNuwKykkQfS8FE4H
Polkadot 1JSkYqXQE4d28HdcmTPhbgCrdiPFTfSHxD67tam16p53oBG
NEAR 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364
Kosmos cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e
Osmosis osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t
Celestia celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5
injektiv inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh
Kava kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux
Harmony one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a
Earth terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x
Algorand XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI
Stellar GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE
Cardano addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f
MultiverseX erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0
Aptos 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e
Sui 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78
Nano nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn
Filecoin f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui
Tezos tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk
Ergo 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA
Hedera 0.0.10488092

Kjeder med regex-dekning, men tomme lommebokplasser i standardkonfigurasjonen – Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin, Beacon-Chain BNB – er ikke aktivt byttet ut i denne byggingen, men blir oppdaget. Behandle dem som overvåkingsområde snarere enn substitusjonsområde.

Attribusjon og motivasjon

Kampanjen tilbyr en tynn attribusjonsflate. Vi har ikke klart å bekrefte operatørens identitet. Hva vi kan registrere:

  • Utgiverens metadata. npm-kontoen jaggle oppgir e-postadressen sin som olgascarlet@deltajohnsons.com. Domenet deltajohnsons.com løser ikke opp til en bedriftsidentitet vi kan bekrefte. npm-kontoen viser ingen e-postbekreftelse og ingen SCM verifisering. Det er ingen tilknyttet offentlig GitHub-tilstedeværelse.
  • Repository-felt. Ocuco pakke.json bærer ingen Repository felt. Det legitime npm:@jonglere/endre størrelse-observatør peker på et ekte GitHub-repository med tusenvis av stjerner og aktive problemer. Fraværet av en repository-lenke er den raskeste visuelle indikatoren på npm-grensesnittet.
  • README-plagiering. Pakken README er den legitime @jongler/resize-observatør README byte-for-byte, inkludert importere eksempler som refererer @jongler/resize-observatør selve (ikke publiseringspakken). Operatøren gadd ikke engang å omskrive importfilene – et vanlig signal om at readme-filen ble fjernet, ikke tilpasset.
  • Ingen infrastruktur å snu seg etter. Det finnes ikke noe C2-endepunkt, ingen DNS-oppslag, ingen IP-adresse. Den ondsinnede oppførselen er fullstendig innkapslet i den lokale clipperen pluss den hardkodede lommebokpakken. Dette gjør domene- eller ASN-basert pivotering utilgjengelig. Forsvarere som pivoterer på tvers av kampanjer bør hash-matche lommebøkene mot alle tidligere clippere de har registrert. Gjenbruk av en lommebok på tvers av pakker er den mest håndterbare koblingen på tvers av kampanjer.
  • Valg av navn. @jaggle/resizeobserves er én karakter unna @sjongler og én bøyning av den velkjente resize-observatørDen kombinerte redigeringsavstanden er to tegn. Dette er en bevisst visuell kollisjon, ikke en generisk knebøy.

Motivasjon, forankret i nyttelastens atferd: ren monetarisering gjennom opportunistisk utklippstavlersubstitusjon. Det er ingen innhenting av legitimasjonsinformasjon, ingen fingeravtrykk fra verten, ingen avlesning av miljøvariabler. Operatøren bryr seg ikke om hvem offeret er – de bryr seg om at offerets neste overføring peker på en av de oppførte adressene. Førti-kjededekningen er lotterimodellen i aksjon: kast bredt, håp om at en enkelt høyverdig lime lander én gang per N installasjoner.

Operatøren virker likegyldig til fjerningen. Å publisere ni versjoner innen to timer under samme omfang leses som en publiser-og-brenn-håndtak: maksimer registeravtrykket før fjerningsforsinkelsen tar igjen, og gå deretter videre. Vi har ikke observert @jaggle publiserer på nytt under et nytt omfang i skrivende stund, men vi forventer lignende omfang (@jaggie, @sjongler-, @joggle) skal vises i løpet av de kommende dagene hvis operatøren fortsatt er aktiv.

Innvirkning, trender og hva forsvarere bør gjøre

 Impact

Det er ikke mulig å kvantifisere effekten i ekte penger fra det nåværende datasettet. Clipperen skriver ingen telemetri, og lommebøkene er ennå ikke observert som mottar substituerte overføringer ved analysefristen (en oppfølgingsundersøkelse av de listede kjedene er på listen vår). Den legitime npm:@jonglere/endre størrelse-observatør ligger i gjennomsnitt på godt syvsifrede ukentlige nedlastinger – et typosquat-mål med høy trafikk – og den skadelige pakken var aktiv i under 24 timer på tidspunktet for avsløringen, noe som begrenser den eksponerte populasjonen, men ikke nullstiller den.

Eksplosjonsradiusen som er verdt å spore er ikke direkte nedlastinger av @jaggle/resizeobserves — de er sannsynligvis små. Det er **transitive installasjoner**: en utvikler legger til pakken i et sandkasseprosjekt, kjører npm installasjon, og så glemmer man at installasjonskroken noen gang har kjørt. Hver maskin som behandlet etterinstallasjonen har nå en utklippstavlskapskaprer per bruker ved automatisk oppstart, uavhengig av om prosjektet fortsatt er på disk. Fjerner pakkekatalogen fra node_modules fjerner **ikke** persistensen.

Fremvoksende mønstre

To trender denne kampanjen eksemplifiserer.

npm som en Python-nyttelastleveringswrapper. npm tarball er et installasjonsprogram med fire linjer; den faktiske stjeleren er Python, installert på hele systemet av pip fra den medfølgende katalogen. Dette er ikke nytt – vi har sett npm-pakker droppe Python før – men det blir en målbart mer vanlig form på tvers av kryptoklipperkampanjer. Fordelen for operatøren er todelt: Python-utklippstavlebiblioteker (pyperclip (først blant dem) er renere og mer plattformuavhengige enn JavaScript-ekvivalentene, og De fleste automatiserte npm-skannere vekter JavaScript-filer og Python tungt .py bunter lett. Kostnaden er at installasjonsavtrykket er mye mer støyende – en ny pip installasjon er vanskelig å skjule på en utviklermaskin som vanligvis ikke pip installasjon under npm installasjon.

Plattform-native navn som den eneste snikende funksjonen. Flere nylige klippere og tyveri av små nyttelaster har droppet obfuskasjon på kodenivå helt til fordel for legitime persistensetiketter. python3-dbus-hjelper, com.apple.python.runtimeog PyRuntimeBroker er lærebokeksempler – navn en forsvarers øye vil hoppe over på en liste med førti brukertjenester. Dette er en billig og holdbar form for stealth: fjerning skjer per pakke, men persistensfilene overlever fjerningen, og en tjeneste oppkalt etter en ekte plattformkomponent vil ikke bli ryddet opp i noe annet enn en eksplisitt revisjon.

Hva forsvarere bør gjøre

  • Revisjon ~/.config/systemd/user/, ~/Library/LaunchAgents/ og Get-ScheduledTask produksjon på utviklermaskiner for oppføringene som er oppført i IOC-er. Hvis du fjerner npm-pakken, forblir disse på plass; de må fjernes manuelt.
  • Blokker overføringer til de oppførte lommebokadressene ved grenser mellom bedriftens finanskontor og DeFi-lommebøker der adressetillatelseslisting er tilgjengelig.
  • Let etter ~/.config/clipboard-guardian/config.json (og plattformekvivalenter) på tvers av utvikler-maskin-flåten. Tilstedeværelsen av filen er en høykonfidensinfeksjon uavhengig av hvilken pakkeversjon som leverte den.
  • Søk i node_modules/ etter clipboard_guardian/guardian.py i build-cache-øyeblikksbilder som kan være fra før fjerningen. Filens md5 er stabil på tvers av alle gjennomgåtte versjoner.
  • Låsfil-pin @jonglere/resize-observatør (den legitime pakken) slik at fremtidige installasjoner ikke kan løses opp til noe annet under en feiltekst på ett tegn, spesielt i arbeidsflyter uten låsefiler som NPX.
  • Behandle alle npm postinstall-påkaller pip install som høy alvorlighetsgrad i bygge-pipeline policy. Det finnes ingen legitim grunn til at en npm-pakke skal trenge pip ved installasjon – Python-verktøy distribuerer Python-verktøy.
  • Søk etter process_iter()-sammenlignbare overvåkingsdata for prosesser kalt python3-dbus-helper som importerer pyperclip — forkledningsavviket (D-Bus-hjelper som holder et utklippstavlbibliotek) er den reneste atferdsindikatoren vi har.
  • Roter lommebokadresser limt inn fra infiserte maskiner. En utklippstavlskapskaprer kompromitterer banen mellom et lommebokgrensesnitt og et limemål; adresser som kopieres mens de er infisert, kan endres i det stille. Alt som sendes i løpet av infeksjonsvinduet, bør behandles som potensielt feiladressert.

Konklusjonen er at vedvarende funksjonalitet overlever fjerning. Registeret vil til slutt fjerne @jaggle/resizeobserves I alle ni versjoner vil ikke systemd-enheten, LaunchAgent og den planlagte oppgaven fjerne seg selv.

Referanser

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken