RuntimeBroker npm Typosquat Planzen Krypto Clipper

RuntimeBroker: en npm Typosquat installéiert e 40-Ketten-Krypto-Clipper als Cross-OS "System Runtime Helper"

TL; DR

Den 21. Mee 2026 huet den npm Editeur jaggle néng Versioune verëffentlecht (1.0.0 duerch 1.0.8) of @jaggle/resizeobserves an engem Fënster vun ongeféier zwou Stonne.

De Pak ass en Typosquat vun der legitimer @juggle/resize-observer polyfill - e wäit verbreetent Pak mat Millioune wöchentlechen Downloads - awer liwwert keng tatsächlech ResizeObserver Implementatioun.

Amplaz, de Pak Postinstallatiouns-Hook installéiert eng gebündelt Python-Payload, registréiert Persistenz als e plattform-natiiv ausgesienden Runtime-Broker an setzt en plattformiwwergräifenden Clipboard-Hiacker an, deen op Krypto-Währungstransaktioune gezielt ass.

Linux Ausdauer erschéngt als python3-dbus-helper, macOS as com.apple.python.runtime, an Windows as PyRuntimeBroker.

D'Payload iwwerwaacht kontinuéierlech d'Zwëschespäicher no Portemonnaie-Adressen. méi wéi 40 Blockchainen an ersetzt kopéiert Adressen ouni Problemer duerch vun Ugräifer kontrolléiert Portemonnaien.

D'Malware funktionéiert komplett lokal ouni erausgehend C2-Infrastruktur, wouduerch d'Ersatz vum Zwëschespeicher selwer zum Exfiltratiounsmechanismus ass.

Den primären IOC ass den Numm vum Pak selwer: @jaggle/resizeobserves — bemierkt de falege Vokal a „jaggle“ an den derbäigesaten „s“ a „resizeobserves“.

Schwéiergrad: héich.

Den Ugrëff: Wéi et funktionéiert

npm:@jaggle/resizeobserves gesäit net aus wéi Malware op engem Casual npm Vue. Seng VIRLIESEN.md ass déi wuertwiertlech README vun npm:@jongléieren/Gréisst-änneren-Observateur — déiselwecht Codebeispiller, déiselwecht Benotzungsinstruktiounen, déiselwecht importéiert { ResizeObserver } vun '@juggle/resize-observer' Referenzen duerchgängeg. De Plagiat ass sou komplett, datt jiddereen, deen d'Dokumentatioun kuckt, dovun ausgoe géif, datt hien d'Dokumentatioun vum legitime Pak liest.

d' Package.json, am Géigesaz, ass spuersam: nee Repository Feld, een eenzegt Auer Entrée weist op bin/Clipboard-Guardian.js, An engem no der Installatioun Skript dat leeft Node npm-install.jsD'Beispiller fir "Basisbenotzung" am README bezéie sech op eng JavaScript-Implementatioun, déi néierens am Tarball existéiert. Déi eenzeg JavaScript-Datei am Pak ass den Installatiounsskript.

Etapp 1 — npm Postinstall bootstraps eng Python Payload

npm-install.js ass plattformbewosst. Et lokaliséiert e Pip ausféierbar laanscht e fixe Sichwee (/usr/bin/pip3, /usr/local/bin/pip, zréckfalen op python3 -m pip), installéiert de gebonnenen Python-Pak aus dem Tarball-Verzeichnis, an — op Linux — zitt eran xklip or xsell via apt-get, Pacman, oder dnf wann keen vun deenen zwee scho präsent ass:

D'Benotze vu –Break-System-Paketen ass bewosst: modern Linux-Distributiounen liwweren Python mam aktivéierten external-managed-environment-Marker vu PEP 668, deen standardméisseg PIP-Installatioune fir déi ganz Websäit blockéiert. Den Installatiounsskript forcéiert d'Installatioun duerchzeféieren.

De Skript ass och sudo-bewosst. Wann déi lafend uid d'Resultat vun engem ass sudo npm Installatioun, liest sech d'Skript SUDO_USER an zitt sech eraus fir gutt passwd ze fannen real dem Benotzer säin Heemverzeichnis, schreift dann seng Persistenzdateien dohinner anstatt an / RootPersistenz ass pro Benotzer, net systemwäit.

Etapp 2 — Cross-OS Persistenz ënner Runtime-Broker Nimm

Nodeems de Python-Pak installéiert ass, registréiert de Skript en Autostart-Eintrag ënner engem aneren Numm op all Betribssystem:

  • Linux — eng systemd Benotzerunitéit bei ~/.config/systemd/user/python3-dbus-helper.serviceD'Eenheet Beschreiwung is Python D-Bus Runtime HelperDe Skript probéiert et och z'aktivéieren iwwer systemctl –Benotzer aktivéieren, zréck op e manuelle Symlink ënner standard.target.wëllt/ wann systemctl ausfällt. Wann ënner sudo leeft, wiesselt de Skript op sudo -u systemctl –Benotzer, mat XDG_RUNTIME_DIR sou agestallt, datt de Benotzer-Bus-Uruff funktionéiert.
  • macOS — e LaunchAgent-Plist op ~/Bibliothéik/LaunchAgents/com.apple.python.runtime.plist mat RunAtLoad=true an Liewen halen=true, dann iwwerlueden launchctl lueden.
  • Windows — eng geplangten Aufgab mam Numm PyRuntimeBroker, déi AtLogOn ausgeléist huet, mat enger Ausféierungszäitlimit vun Null (d.h. kee Timeout), registréiert iwwer PowerShell.

All dräi Nimm sinn op den éischte Bléck glafwierdeg. python3-dbus-Hëllefer follegt der Namenskonventioun vun der legitimer Python-D-Bus Integratioun op Linux Desktops. com.apple.python.runtime imitéiert Apple seng Reverse-DNS-Labeling fir seng eege Servicer. PyRuntimeBroker widderhëlt Windows seng RuntimeBroker.exe — e richtegen, ënnerschriwwenen Microsoft-Service, deen Ufroen fir Erlaabnisser fir UWP-Apps verhandelt. Keen dovunner sinn an dësem Kontext richteg Apple/Microsoft/Python-Servicer, mee en Defender, deen e séieren visuelle Scan vun ... mécht. systemctl –Benotzerlëscht-Eenheeten or Get-ScheduledTask ass onwahrscheinlech ze zidderen.

Etapp 3 - Den Clipboard-Hijacker

D'Python-Payload, installéiert op clipboard_guardian/guardian.py, leeft eng onendlech Schleif, déi all 400 Millisekonnen d'System-Zwëschespäicher offrot. Bei all Tick zitt et den aktuellen Inhalt vum Zwëschespäicher iwwer pyperclip.paste() a leeft se géint eng Lëscht vu méi wéi véierzeg virkompiléierte regulären Ausdréck aus, déi Portemonnaie-Adressformate fir 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, a verschidde aner, déi an der Standardkonfiguratioun eidel sinn (Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin).

Wann e Match lant, liest de Skript d'Adress vum Ugräifer fir déi Kette vun ~/.config/clipboard-guardian/config.json (oder seng Plattform-Equivalente) an iwwerschreift d'Zwëschespäicher mat dem ersatzenden Text:

Et gëtt kee Netzwierk-Beacon. De Clipper rufft net heem un, registréiert keng infizéiert Hosts, exfiltréiert näischt. D'Exfiltratioun ass d'Substitutioun selwer: wann e Benotzer eng Empfängeradress aus sengem Portemonnaie-UI kopéiert an an en Senddialog agefügt, gehéiert déi agefügten Adress dem Bedreiwer. D'Sue ginn am Band verluer, transparent fir de Benotzer.

Wat ass hei nei?

E puer Detailer stiechen am Verglach zum generesche Krypto-Clipper-Schabloun eraus:

1. npm → Python-Crossover. Déi meescht Krypto-Clippers, déi mir an npm gesinn, si pure JavaScript, dacks verschleiert mat _0x Array-Rotatioun oder eval(atob(…)) Stacks. Dëst Beispill benotzt den npm tarball als näischt anescht wéi e Liwwerungswrapper fir e Python-Package - propper Python - a léisst pip d'Ofhängegkeetsinstallatioun handhaben (Pyperclip, psutil, fakultativ setzenproctitle) am gebundelten deklaréiert pyproject.tomlEt gëtt keng JavaScript-Verschleierung ze bekämpfen. De Clipper selwer ass einfach, liesbar Python.

2. Tri-OS Persistenzlabels, déi op Plausibilitéit ausgewielt goufen. Vill Cross-Plattform-Installateure registréieren d'Persistenz ënner genereschen Nimm (updater.service, helper.plist). Dëst Beispill mécht sech d'Méi fir Etiketten ze wielen, déi op all Betribssystem plattformnatiiv Runtime Broker gläichen. D'Benennung ass deen eenzege Versuch vu Stealth - et gëtt kee Rootkit, kee Benotzerland verstoppt, keng Pfadverschleierung. D'Wette ass, datt Verdeedeger selten Audite maachen. ~/.config/systemd/user/ an datt e Service mam Numm python3-dbus-Hëllefer wäert an enger lässeger Bewäertung net erausstéchen.

3. Prozess-Titel-Verkleedung ass real, awer Anti-Analyse ass dormant. D'Python-Payload definéiert eng _Verkleedungsprozess() Funktioun, déi den Prozesstitel iwwer setzenproctitle (Linux/macOS) oder KonsoletitelW astellen (Windows) — an Haapt () nennt et. Also ps zu wäert weisen python3-dbus-Hëllefer amplaz vun python3 …/guardian.py. Dee selwechte Modul definéiert awer en leeft_iwwerwaachungsgerät() Funktioun déi bekannt Prozess-Iwwerwaachungsinstrumenter opzielt (htop, btop, Task Manager, Aktivitéitsmonitor, Prozess Hacker, Ressourcenmonitor, GNOME / KDE / Xfce / MATE Systemmonitore, asw.) — an Haapt () rufft et ni op. De Substitutiounsschleef leeft onbedingt, egal ob de Benotzer e Prozessmonitor op huet oder net. D'Funktioun ass doudege Code an der geliwwerter Versioun. Et ass héchstwahrscheinlech en Iwwerrescht vun enger fréierer Iteratioun oder e Schabloun fir eng Funktioun, déi nach net installéiert ass. Egal wéi, d'Anti-Analysefläch vun der publizéierter Payload ass eng Ëmbenennung vum Prozesstitel, keng aktiv Monitor-Ëmwandlung.

4. Dat gebündelt Config-Merge Verhalen. npm-install.js schreift déi Standard-Portemonnaie-Lëscht op ~/.config/clipboard-guardian/config.json an, wann eng Configuratiounsdatei schonn existéiert, füügt all Schlësselen derbäi, deenen hire bestehenden Wäert eidel ass. Dat heescht e Benotzer, deen virdru infizéiert gouf an d'Configuratioun deelweis gebotzt huet - zum Beispill andeems hien d' ethereum Wäert — gëtt bei all spéiderer Installatioun vu béiswëllege Paketen nei gefëllt. Et gëtt keng Reinigung vun der Persistenzdatei an iergendengem Code-Pfad.

Datum / Zäit (UTC) Héichwaasser
2026-05-21 18:50:32 @jaggle/resizeobserves@1.0.0 publizéiert.
2026-05-21 19:55:55 1.0.1 publizéiert — éischt Versioun duerch extern Scannen markéiert.
2026-05-21 19:58:10 1.0.2 publizéiert.
2026-05-21 20:05:03 1.0.3 publizéiert.
2026-05-21 20:09:24 1.0.4 publizéiert.
2026-05-21 20:13:48 1.0.5 publizéiert.
2026-05-21 20:41:52 1.0.6 publizéiert.
2026-05-21 20:43:56 1.0.7 publizéiert — füügt eng try/catch Wrapper ronderëm de Schreifschrëtt fir Wallet-Config npm-install.js.
2026-05-21 20:46:15 1.0.8 publizéiert — Installateur ëmbenannt npm-install.jsnpm-install.cjs (byte-identeschen Inhalt).
2026-05-22 Urteeler an IOCs publizéiert. Versioune sinn zum Zäitpunkt vun der Verëffentlechung nach ëmmer am Register verfügbar (lafend).

Néng Versiounen an enger Stonn a sechsanzwanzeg Minutten ass séier, och fir en Typosquat. D'Muster entsprécht engem Kampagne "publizéieren a verbrennen" — d'Registrierung ënner engem Handle iwwerfëllt, d'Detektioun säi Laf maachen loossen, an op en neien Handle wiesselen, soubal eng eenzeg Versioun ewechgeholl gouf. Déi siichtbar Deltaen am Laf si kosmetesch: 1.0.1 explizit bäigefüügt /usr/bin/pip3-style Weeër op d'Pip-Sichlëscht (sudo-Kompatibilitéit), 1.0.7 huet de wallet-config Schreiwen an engem try/catch agewéckelt, an 1.0.8 huet den Installateur ëmbenannt vun .js ze maachen .cjs wärend säin Inhalt byte-identesch bleift. .cjs Ëmbenennen vun Tracks mat npm-Warnungen iwwer eng zweideiteg Modulopléisung a Paketen ouni eng explizit "Typ" Feld, a kéint e Versuch sinn, Kaméidi während der Installatioun z'ënnerdrécken, deen d'Opmierksamkeet op sech zéien kéint. D'Python-Payload - deen eenzegen Deel, deen tatsächlech klaut - ass an allen néng Versiounen onverännert.

Indicateuren vun Kompromëss

Formulen

Ecosystem Pak Versiounen Status
npm @jaggle/resizeobserves 1.0.0 duerch 1.0.8 Live bei der Verëffentlechung; Entfernung ugefrot.

Dateien & Hashes

Wee Notes
clipboard_guardian/guardian.py
(md5 f7935c2c82bc881288611ab6cd634f17)
Identesch bei allen néng publizéierte Versiounen (1.0.0 duerch 1.0.8). D'Notzlaascht vum Clipper.
npm-install.js (1.0.0 – 1.0.7)
npm-install.cjs (1.0.8)
Persistenz-Installatiounsprogramm; dat selwecht End-to-End-Verhalen. 1.0.7's .js an 1.0.8's .cjs sinn byte-identesch.
~/.config/clipboard-guardian/config.json Linux Persistenzkonfiguratioun a Wallet-Bundle.
~/Library/Application Support/clipboard-guardian/config.json macOS Persistenzkonfiguratioun a Wallet-Bundle.
%APPDATA%\clipboard-guardian\config.json Windows Persistenzkonfiguratioun a Wallet-Bundle.
~/.config/systemd/user/python3-dbus-helper.service Linux Autostart Persistenz.
~/Library/LaunchAgents/com.apple.python.runtime.plist macOS LaunchAgent Persistenz.
~/Library/Logs/com.apple.python.runtime.log macOS stdout/stderr-Log fir den Agent.
Scheduled Task PyRuntimeBroker Windows Autostart-Aufgab (AtLogOn, keng Zäitlimit).

Behuelen Indicateuren

Signal Beschreiwung
pip install --break-system-packages vun npm postinstall Erzwingt eng sitewäit Python-Installatioun, ouni de PEP 668-Schutz ze ëmgoen.
apt-get install -y xclip (oder Pacman/DNF) Installéiert Clipboard-Utilities op Linux während der Pakinstallatioun.
python3-dbus-helper.service systemd Benotzerunitéit Persistenz gouf ënner engem plausibel ausgesienden Runtime-Helper-Numm registréiert.
com.apple.python.runtime LaunchAgent Persistenzlabel ausserhalb vu legitimen Apple-Systempfaden.
PyRuntimeBroker Geplangt Aufgab Gefälschte Windows Runtime Broker Persistenz ouni legitim Installatiounsquell.
Python Prozess mam Titel python3-dbus-helper importéieren pyperclip an psutil Verhalensfehler tëscht dem ugewisenen Prozessnumm an den importéierte Bibliothéiken.
Ännerungen am Zwëschespäicher ~0.4 Sekonnen nom Kopéiere vun der Portemonnaie-Adress D'Verhale vun der Signatur vun der Ersatz vun enger Krypto-Adress.

Attacker Portemonnaie Bundle (Verdeedeger Juegdlëscht)

D'Portemonnaie-Lëscht gëtt hardcoded geliwwert an npm-install.js an clipboard_guardian/guardian.pyVerteideger kënnen d'Lëscht souwuel als Blocklëscht benotzen (all Transfert op dës Adressen vu Firmenportemonnaien als verdächteg behandelen) wéi och als Juegdschlëssel (d'Präsenz vun enger vun dëse Strings an enger net authentifizéierter Configuratiounsdatei, engem Build-Artefakt oder enger Entwécklermaschinn als Infektiounsindikator behandelen).

Attacker Portemonnaie Bundle

Kette Schéckt
Ethereum / BSC 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Ronin (EVM) ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18
geschriwen 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
NËMMEN 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364
Cosmos cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e
Osmosis osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t
Celestia celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5
Injektiv inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh
Kaffi kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux
Harmonie one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a
Terra terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x
Algorand XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI
Stellar GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE
Kardan addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f
MultiversX erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0
apt 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e
sui 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78
Nanotechnike nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn
Filecoin f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui
Tezos tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk
Ergo 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA
Hedera 0.0.10488092

Ketten mat Regex-Ofdeckung awer eidele Portemonnaie-Slots an der Standardkonfiguratioun - Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin, Beacon-Chain BNB - ginn an dësem Build net aktiv ersat, awer detektéiert. Behandelt se als Iwwerwaachungsberäich anstatt als Ersatzberäich.

Attributioun & Motivatioun

D'Campagne bitt eng dënn Attributiounsfläch. Mir konnten d'Identitéit vum Bedreiwer net bestätegen. Wat mir ophuelen kënnen:

  • Metadaten vum Editeur. Den npm-Kont jaggelen lëscht seng E-Mail als olgascarlet@deltajohnsons.comDen Domaine deltajohnsons.com léisst sech net op eng Firmenidentitéit opléisen, déi mir verifizéiere kënnen. Den npm-Kont weist keng E-Mail-Verifizéierung a keng SCM Verifizéierung. Et gëtt keng associéiert ëffentlech GitHub-Präsenz.
  • Feld vum Repository. d' Package.json drot Nr Repository Feld. Déi legitim npm:@jongléieren/Gréisst-änneren-Observateur weist op e richtegt GitHub-Repository mat Dausende vu Stären an aktiven Themen. D'Feele vun engem Repository-Link ass déi eenzeg séierst visuell Indikatioun op der npm UI.
  • README Plagiat. De Pak README ass de legitime @jongléieren/Gréisstänneren-Observateur README Byte-fir-Byte, inklusiv Import Beispiller, déi sech bezéien @jongléieren/Gréisstänneren-Observateur selwer (net de Verëffentlechungspaket). Den Operateur huet sech net emol d'Méi gemaach, d'Importen nei ze schreiwen - e gemeinsamt Signal, datt de Readme-Protokoll opgehuewe gouf, net ugepasst.
  • Keng Infrastruktur fir sech ze konzentréieren. Et gëtt keen C2-Endpoint, keen DNS-Sich, keng IP. Dat béiswëllegt Verhalen ass komplett am lokalen Clipper plus dem hard-codéierte Wallet-Bundle verstoppt. Dëst mécht Domain- oder ASN-baséiert Pivoting net verfügbar. Verteideger, déi iwwer Kampagnen pivotéieren, sollten d'Portemonnaien mat all fréiere Clipper, déi se archivéiert hunn, hash-matchen; d'Wiederverwendung vun engem Portemonnaie iwwer verschidde Paketen ass déi einfachst Verbindung tëscht de Kampagnen.
  • Wiel vun der Namensung. @jaggle/resizeobserves ass ee Charakter ewech vun @jongléieren an eng Ofwäichung vum bekannte Gréisst-Observateur ännerenDéi kombinéiert Editiounsdistanz ass zwou Glyphen. Dëst ass eng bewosst visuell Kollisioun, keen generesche Squat.

Motivatioun, baséiert op dem Verhalen vun der Notzlaascht: reng Monetariséierung duerch opportunistesch Zwëschespeichersubstitutioun. Et gëtt keng Ernte vu Registréierungen, kee Fangerofdrock vun den Hosten, keng Liesung vun Ëmweltvariablen. Dem Bedreiwer ass et egal, wien d'Affer ass - hie këmmert sech doriwwer, datt den nächste Transfer vum Affer op eng vun den opgezielten Adressen hiweist. Déi véierzeg-Ketten-Ofdeckung ass de Lotteriemodell an Aktioun: wäit ausernee werfen, hoffen, datt eng eenzeg héichwäerteg Paste eemol pro N Installatiounen lant.

Den Operateur schéngt sech net ëm den "Takedown" ze këmmeren. Néng Versiounen bannent zwou Stonnen ënnert dem selwechte Scope ze publizéieren liest sech wéi e "Publish-and-Burn"-Handle: maximéiert de Registry-Footprint ier d'Takedown-Latenz eriwwer ass, an da gitt weider. Mir hunn näischt observéiert. @jaggle zum Zäitpunkt vum Schreiwen ënner engem neien Ëmfang nei publizéieren, awer mir géifen ähnlech Ëmfang erwaarden (@jaggie, @jongléieren-, @joggle) an den nächste Deeg erschéngen, wann den Operateur nach ëmmer aktiv ass.

Impakt, Trends & wat Verdeedeger maache sollen

 Impakt

D'Quantifizéierung vum Impakt a richtegem Geld ass net méiglech mam aktuellen Datesaz. De Clipper schreift keng Telemetrie an d'Portemonnaien hunn nach keng ersat Iwwerweisungen zum Zäitpunkt vun der Analyse observéiert (eng Nofolleg-Iwwerpréiwung vun den opgezielten Ketten ass op eiser Lëscht). Déi legitim npm:@jongléieren/Gréisst-änneren-Observateur läit am Duerchschnëtt bei gutt siwestellege wöchentlechen Downloads - en Typosquat-Zil mat héijem Traffic - an de béiswëllege Pak war zum Zäitpunkt vun der Verëffentlechung manner wéi 24 Stonnen online, wat d'Populatioun, déi ausgesat ass, limitéiert, awer net op Null setzt.

De Sprengradius, deen et wäert ass ze verfollegen, sinn net direkt Downloads vun @jaggle/resizeobserves — déi sinn wahrscheinlech kleng. Et sinn **transitiv Installatiounen**: en Entwéckler füügt de Pak zu engem Sandbox-Projet bäi, leeft npm installéiert, an dann vergiessen datt den Install-Hook jee gelaf ass. All Maschinn, déi d'Postinstallatioun veraarbecht huet, huet elo en per-user-Clipboard-Hijacker beim automatesche Start, egal ob de Projet nach ëmmer op der Festplack ass. Den Package-Verzeichnis ewechhuelen aus Node_moduler läscht **net** d'Persistenz ewech.

Emerging Mustere

Zwee Tendenzen, déi dës Kampagne exemplifizéieren.

npm als Python-Payload-Liwwerungs-Wrapper. Den npm tarball ass en Installateur mat 4 Zeilen; deen eigentleche Stealer ass Python, deen systemwäit installéiert gouf vun Pip aus dem gebündelten Verzeichnis. Dëst ass näischt Neies - mir hunn NPM-Pakete schonn emol gesinn, wéi Python fale gelooss gouf - awer et gëtt eng däitlech méi heefeg Form a Krypto-Clipper-Kampagnen. De Virdeel fir den Operateur ass zweifach: Python-Zwëschespäicherbibliothéiken (Pyperclip (éischt vun hinnen) si méi propper a méi plattformiwwergräifend wéi d'JavaScript-Equivalenter, an Déi meescht automatiséiert NPM-Scanner gewiichten JavaScript-Dateien a Python staark .py liicht bündelt. De Präis läit doran, datt d'Installatioun vill méi haart ass - e frëschen pip installéieren ass schwéier sech op enger Entwécklermaschinn ze verstoppen, déi normalerweis net pip installéieren während npm installéiert.

Plattform-natiiv Nimm als eenzeg Stealth. Verschidde rezent Clippers a Small-Payload-Déif hunn d'Verschwörung op Code-Niveau komplett zugonschte vu legitim ausgesienden Persistenz-Labels opginn. python3-dbus-Hëllefer, com.apple.python.runtime, an PyRuntimeBroker sinn Léierbuchbeispiller - Nimm, déi engem Verteideger säin A op enger Lëscht vu véierzeg Benotzerservicer iwwerspréngt. Dëst ass eng bëlleg, haltbar Form vu Stealth: den Takedown ass pro Package, awer d'Persistenzdateien iwwerliewen den Takedown, an e Service, deen no enger real ausgesiender Plattformkomponent benannt ass, gëtt duerch näischt anescht wéi en expliziten Audit gebotzt.

Wat d'Verdeedeger maache sollen

  • Audit ~/.config/systemd/user/, ~/Library/LaunchAgents/, a Get-ScheduledTask Ausgab op Entwécklermaschinnen fir d'Entréen, déi an den IOCs opgezielt sinn. Wann den npm-Pak ewechgeholl gëtt, bleiwen dës op der Plaz; si mussen manuell ewechgeholl ginn.
  • Blockéiert Iwwerweisungen op déi opgezielt Portemonnaie-Adressen op de Grenze vun der Corporate-Treasury- a DeFi-Wallet-Verwaltung, wou d'Adress-Allowlisting verfügbar ass.
  • Sich no ~/.config/clipboard-guardian/config.json (an Plattform-Äquivalenten) iwwer d'Entwéckler-Maschinn-Flott. D'Präsenz vun der Datei ass eng héichkonfidenzlech Infektioun, egal wéi eng Packageversioun se geliwwert huet.
  • Sicht node_modules/ no clipboard_guardian/guardian.py a Build-Cache-Snapshots, déi virum Takedown kéinte sinn. Den md5 vun der Datei ass stabil iwwer all iwwerpréifte Versiounen.
  • Spärdatei-PIN @juggle/resize-observer (de legitime Pak), sou datt zukünfteg Installatiounen net op eppes anescht ënner engem eenzege Zeechenfehler opgeléist kënne ginn, besonnesch a Workflows ouni Lockfile wéi npx vun.
  • Behandelt all npm Postinstall, déi PIP Install oprufft wéi héichschwéier am Bau-pipeline Politik. Et gëtt kee legitime Grond firwat en npm-Package Pip bei der Installatioun brauch - Python Tooling verdeelt Python Tooling.
  • Sich no process_iter()-vergläichbare Monitoringdaten fir Prozesser mam Numm python3-dbus-helper, déi pyperclip importéieren — den Ofwäich vun der Verkleedung (D-Bus-Hëllefer, deen eng Zwëschespeicherbibliothéik hält) ass den proppersten Verhalensindikator, deen mir hunn.
  • Portemonnaie-Adressen, déi vun infizéierte Maschinnen agefüügt goufen, rotéieren. En Clipboard-Hijacker kompromittéiert de Wee tëscht enger Portemonnaie-UI an engem Paste-Zil; Adressen, déi während der Infektioun kopéiert goufen, kënnen onopfälleg geännert ginn. Alles, wat während der Infektiounszäit geschéckt gëtt, soll als potenziell falsch geriicht behandelt ginn.

D'Konklusioun: Persistenz iwwerlieft méi laang wéi en Entfernen. D'Registrierung wäert schlussendlech ewechhuelen. @jaggle/resizeobserves an allen néng Versiounen; d'Systemd-Eenheet, den LaunchAgent an déi geplangte Aufgab läschen sech net selwer.

Referenze

sca-tools-software-zesummesetzungsanalyse-tools
Prioritäriséiert, behënnert a séchert Är Softwarerisiken
Kritt Äre gratis Kont.
Kee Kreditkaart erfuerderlech.

Séchert Är Softwareentwécklung a Liwwerung

mat der Xygeni Produkt Suite