RuntimeBroker npm Typosquat Augi Crypto Clipper

RuntimeBroker: npm Typosquat ierīko 40 ķēžu kripto-clipper kā starpoperētājsistēmu “sistēmas izpildlaika palīgu”

TL; DR

2026. gada 21. maijā npm izdevējs jaggle izlaida deviņas versijas (1.0.0 cauri 1.0.8) no @jaggle/resizeobserves aptuveni divu stundu logā.

Pakotne ir likumīgā satura kļūda. @juggle/resize-observer polyfill — plaši izmantota pakotne ar miljoniem lejupielāžu nedēļā —, taču tai nav faktiskas ResizeObserver implementācijas.

Tā vietā, iepakojuma pēcinstalēšanas āķis instalē komplektā iekļauto Python lietderīgo slodzi, reģistrē noturību kā platformai līdzīgu izpildlaika brokeri un izvieto starpplatformu starpliktuves nolaupītāju, kas vērsts pret kriptovalūtas darījumiem.

Linux noturība izpaužas kā python3-dbus-helper, macOS as com.apple.python.runtime, un Windows as PyRuntimeBroker.

Kravnesība nepārtraukti uzrauga starpliktuvi, meklējot maku adreses visā vairāk nekā 40 blokķēdes un klusībā aizstāj kopētās adreses ar uzbrucēja kontrolētiem makiem.

Ļaunprogrammatūra darbojas pilnībā lokāli, bez izejošās C2 infrastruktūras, padarot starpliktuves aizstāšanu par eksfiltrācijas mehānismu.

Primārais IOC ir pats pakotnes nosaukums: @jaggle/resizeobserves — ievērojiet izlaisto patskani vārdā “jaggle” un pievienoto “s” vārdā “resizeobserves”.

Smagums: augsts.

Uzbrukums: kā tas darbojas

npm:@jaggle/resizeobserves neizskatās pēc ļaunprogrammatūras ikdienišķā attēlā npm skats. tā README.md ir burtiska README versija no npm:@juggle/resize-observer — tie paši koda paraugi, tie paši lietošanas norādījumi, tas pats importēt { ResizeObserver } no '@juggle/resize-observer' atsauces viscaur. Plaģiāts ir tik pilnīgs, ka ikviens, uzmetot skatienu dokumentācijai, pieņemtu, ka lasa likumīgās pakotnes dokumentus.

The pack.json, turpretī, ir reti sastopams: nē krātuve lauks, viens tīne ieeja, kas norāda uz bin/clipboard-guardian.js, Un pēc instalēšanas skripts, kas darbojas mezgls npm-install.jsREADME faila “Pamata lietošanas” piemēros ir atsauce uz JavaScript ieviešanu, kas neeksistē nekur tarball failā. Vienīgais JavaScript kods pakotnē ir instalēšanas skripts.

1. posms — npm pēcinstalēšanas palaiž Python lietderīgo slodzi

npm-install.js ir platformas apzinīgs. Tas atrod pip izpildāms pa fiksētu meklēšanas ceļu (/usr/bin/pip3, /usr/local/bin/pip, atgriežoties pie python3 -m pip), instalē komplektā iekļauto Python pakotni no tarball direktorijas un — Linux sistēmā — ielādē xclip or xsell līdz apt-get, Pacman, vai DNF ja neviens no tiem vēl nav klāt:

Izmantošana –break-system-packages ir apzināts: mūsdienu Linux distribūcijas piegādā Python ar iespējotu PEP 668 ārēji pārvaldītās vides marķieri, kas pēc noklusējuma bloķē pip instalēšanu visā vietnē. Instalēšanas skripts piespiedu kārtā veic instalēšanu.

Skripts atbalsta arī sudo. Kad darbojošais uid ir rezultāts sudo npm instalēšana, skripts skan SUDO_LIETOTĀJS un tērē līdzekļus iegūt paroli lai atrastu reāls lietotāja mājas direktorijā un pēc tam savus saglabāšanas failus ieraksta tur, nevis iekšā / RootNoturība attiecas uz katru lietotāju, nevis uz visu sistēmu.

2. posms — noturība vairākās operētājsistēmās ar izpildlaika starpnieku nosaukumiem

Pēc Python pakotnes instalēšanas skripts katrā operētājsistēmā reģistrē automātiskās palaišanas ierakstu ar atšķirīgu nosaukumu:

  • Linux — systemd lietotāja vienība vietnē ~/.config/systemd/user/python3-dbus-helper.serviceIekārtas Apraksts is Python D-Bus izpildlaika palīgsSkripts arī mēģina to iespējot, izmantojot systemctl –lietotāja iespējošana, atgriežoties pie manuālas simboliskas saites sadaļā noklusējuma.mērķis.vēlas/ ja systemctl neizdodas. Ja skripts darbojas ar sudo, tas pārslēdzas uz sudo -u systemctl –lietotājs, ar XDG_RUNTIME_DIR iestatīts tā, lai lietotāja kopnes izsaukums darbotos.
  • macOS — LaunchAgent plist vietnē ~/Bibliotēka/LaunchAgents/com.apple.python.runtime.plist ar RunAtLoad=true un KeepAlive=true, pēc tam ielādēts caur launchctl ielāde.
  • Windows — ieplānots uzdevums ar nosaukumu PyRuntimeBroker, kas tiek aktivizēts, izmantojot AtLogOn, ar izpildes laika ierobežojumu nulle (t. i., bez taimauta), reģistrēts, izmantojot PowerShell.

Visi trīs vārdi no pirmā acu uzmetiena ir ticami. python3-dbus-helper ievēro likumīgas Python-D-Bus integrācijas nosaukumu piešķiršanas konvenciju Linux darbvirsmās. com.apple.python.runtime atdarina Apple reversās DNS marķēšanu saviem pakalpojumiem. PyRuntimeBroker atgādina Windows RuntimeBroker.exe — īsts, parakstīts Microsoft pakalpojums, kas nodarbojas ar atļauju pieprasījumu apstrādi UWP lietotnēm. Šajā kontekstā neviens no tiem nav īsts Apple/Microsoft/Python pakalpojums, bet gan aizstāvis, kas veic ātru vizuālu skenēšanu. systemctl –lietotāju saraksta vienības or Get-ScheduledTask maz ticams, ka viņš sarausīsies.

3. posms — starpliktuves nolaupītājs

Python lietderīgā slodze, kas instalēta vietnē clipboard_guardian/guardian.py, ik pēc 400 milisekundēm veic bezgalīgu ciklu, aptaujājot sistēmas starpliktuvi. Katrā tikšķā tas izvelk pašreizējo starpliktuves saturu, izmantojot pyperclip.paste() un pārbauda tos ar vairāk nekā četrdesmit iepriekš kompilētu regulāro izteiksmju sarakstu, kas aptver maka adrešu formātus 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 un vairākiem citiem, kas noklusējuma konfigurācijā ir tukši (Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin).

Kad tiek atrasta atbilstība, skripts nolasa uzbrucēja adresi šai ķēdei no ~/.config/clipboard-guardian/config.json (vai tās platformas ekvivalentus) un pārraksta starpliktuvi ar aizstāto tekstu:

Nav tīkla bākas. Datu sūtīšanas rīks nezvana uz mājām, nereģistrē inficētus resursdatorus un neko neizfiltrē. Datu sūtīšana ir pati aizstāšana: kad lietotājs nokopē saņēmēja adresi no sava maka lietotāja saskarnes un ielīmē to sūtīšanas dialoglodziņā, ielīmētā adrese pieder operatoram. Līdzekļi tiek zaudēti joslas ietvaros, lietotājam caurspīdīgi.

Kas šeit ir jauns?

Salīdzinot ar vispārīgo kriptovalūtu apgriešanas veidni, dažas detaļas izceļas:

1. npm → Python krustojums. Lielākā daļa kriptovalūtu apgriešanas rīku, ko redzam npm, ir tīrs JavaScript, kas bieži tiek maskēts ar _0x masīva rotācija vai eval(atob(…)) steki. Šajā paraugā npm tarball tiek izmantots tikai kā piegādes apvalks Python pakotnei — tīram Python — un tas ļauj pip apstrādāt atkarību instalēšanu (pyperclip, psutil, neobligāti setproctitle) deklarēts komplektā pyproject.tomlNav jāuzvar nekāda JavaScript kodēšanas slēpšana. Pats spraudnis ir vienkāršs, lasāms Python.

2. Tri-OS noturības etiķetes izvēlētas ticamības dēļ. Daudzi starpplatformu instalētāji reģistrē noturību ar vispārīgiem nosaukumiem (atjauninātājs.pakalpojums, palīgs.plist). Šajā paraugā ir parūpēts izvēlēties etiķetes, kas atgādina platformas iebūvētos izpildlaika brokerus katrā operētājsistēmā. Nosaukumu piešķiršana ir vienīgais mēģinājums rīkoties slepeni — nav ne sakņkopu, ne lietotāju zonas slēpšanas, ne ceļa obfukācijas. Iespējams, ka aizstāvji reti veic auditu. ~/.config/systemd/lietotājs/ un ka pakalpojums ar nosaukumu python3-dbus-helper neizcelsies ikdienišķā apskatā.

3. Procesa nosaukuma maskēšana ir reāla, bet antianalīze snauda. Python lietderīgā slodze definē a _maskēšanas_process() funkcija, kas iestata procesa nosaukumu, izmantojot setproctitle (Linux/macOS) vai SetConsoleTitleW (Windows) — un Galvenais () to sauc. Tātad ps aux rādīs python3-dbus-helper vietā python3 …/guardian.pyTomēr tas pats modulis definē darbojas_monitors() funkcija, kas uzskaita zināmos procesu uzraudzības rīkus (htop, augšpusē, Uzdevumu pārvaldnieks, Aktivitāšu monitors, Procesu hakeris, Resursu monitors, GNOME/KDE/Xfce/MATE sistēmas monitori utt.) — un Galvenais () nekad to neizsauc. Aizvietošanas cikls darbojas bez nosacījumiem neatkarīgi no tā, vai lietotājam ir atvērts procesa monitors. Funkcija piegādātajā versijā ir nedarbojošs kods. Visticamāk, tā ir palieka no agrākas iterācijas vai arī sastatne vēl neinstalētai funkcijai. Jebkurā gadījumā publicētās lietderīgās slodzes antianalīzes virsma ir viena procesa nosaukuma pārdēvēšana, nevis aktīva monitora apiešana.

4. Komplektētās konfigurācijas apvienošanas darbība. npm-install.js ieraksta noklusējuma maku sarakstu ~/.config/clipboard-guardian/config.json un, ja konfigurācijas fails jau pastāv, apvieno visas atslēgas, kuru esošā vērtība ir tukša. Tas nozīmē, ka lietotājs, kurš iepriekš ir bijis inficēts un daļēji iztīrījis konfigurāciju, piemēram, iztukšojot ethereum vērtība — tā tiks atkārtoti aizpildīta katrā nākamajā ļaunprātīgās pakotnes instalēšanas reizē. Nevienā koda ceļā netiek veikta pastāvīgā faila tīrīšana.

Datums/laiks (UTC) notikums
2026-05-21 18:50:32 @jaggle/resizeobserves@1.0.0 publicēts.
2026-05-21 19:55:55 1.0.1 publicēta — pirmā versija atzīmēta ar ārēju skenēšanu.
2026-05-21 19:58:10 1.0.2 publicēts.
2026-05-21 20:05:03 1.0.3 publicēts.
2026-05-21 20:09:24 1.0.4 publicēts.
2026-05-21 20:13:48 1.0.5 publicēts.
2026-05-21 20:41:52 1.0.6 publicēts.
2026-05-21 20:43:56 1.0.7 publicēts — pievieno try/catch apvalks ap wallet-config rakstīšanas soli npm-install.js.
2026-05-21 20:46:15 1.0.8 publicēts — instalētājs pārdēvēts npm-install.jsnpm-install.cjs (baitiem identisks saturs).
2026-05-22 Spriedumi un IOC publicēti. Versijas joprojām ir pieejamas reģistrā publicēšanas laikā (tiek veikta apstrāde).

Deviņas versijas vienas stundas un piecdesmit sešu minūšu laikā ir ātrs uzdevums pat ar typosquat. Modelis atbilst a publicēšanas un ierakstīšanas kampaņa — pārpludināt reģistru zem viena turiņa, ļaut noteikšanai darboties un pāriet uz jaunu turi, kad ir noņemta viena versija. Redzamās deltas visā izpildes laikā ir kosmētiskas: 1.0.1 versijā pievienots skaidrs /usr/bin/pip3stila ceļi uz pip meklēšanas sarakstu (sudo-compatibility), 1.0.7 ietvēra wallet-config rakstīšanu try/catch, un 1.0.8 pārdēvēja instalētāju no . Js uz .cjs vienlaikus saglabājot tā saturu baitu ziņā identisku. .cjs pārdēvēt celiņus ar npm brīdinājumiem par neskaidru moduļu izšķirtspēju pakotnēs bez skaidra "tips" laukā, un tas varētu būt mēģinājums apspiest instalēšanas laika troksni, kas varētu piesaistīt uzmanību. Python lietderīgā slodze — vienīgā daļa, kas faktiski zog — visās deviņās versijās nav mainīta.

Kompromisa rādītāji

Paketes

Ekosistēma Pakete versijas Status
npm @jaggle/resizeobserves 1.0.0 cauri 1.0.8 Publicēšanas brīdī publicēts; pieprasīta noņemšana.

Faili un jaucējkodas

taka Piezīmes
clipboard_guardian/guardian.py
(md5 f7935c2c82bc881288611ab6cd634f17)
Identisks visās deviņās publicētajās versijās (1.0.0 cauri 1.0.8). Klipera lietderīgā slodze.
npm-install.js (1.0.0 – 1.0.7)
npm-install.cjs (1.0.8)
Noturības instalētājs; tāda pati darbība no sākuma līdz beigām. 1.0.7's .js un 1.0.8's .cjs ir baiti identiski.
~/.config/clipboard-guardian/config.json Linux noturības konfigurācijas un maka komplekts.
~/Library/Application Support/clipboard-guardian/config.json macOS noturības konfigurācijas un maka komplekts.
%APPDATA%\clipboard-guardian\config.json Windows noturības konfigurācijas un maka komplekts.
~/.config/systemd/user/python3-dbus-helper.service Linux automātiskās palaišanas noturība.
~/Library/LaunchAgents/com.apple.python.runtime.plist macOS LaunchAgent noturība.
~/Library/Logs/com.apple.python.runtime.log macOS stdout/stderr žurnāls aģentam.
Scheduled Task PyRuntimeBroker Windows automātiskās palaišanas uzdevums (AtLogOn, bez taimauta).

Uzvedības rādītāji

Signalizēt Apraksts
pip install --break-system-packages no npm pēcinstalēšanas Piespiež instalēt Python visā vietnē, apejot PEP 668 aizsardzību.
apt-get install -y xclip (vai pacman/dnf) Instalē starpliktuves utilītas operētājsistēmā Linux pakotnes instalēšanas laikā.
python3-dbus-helper.service systemd lietotāja vienība Noturība reģistrēta zem ticama izskata izpildlaika palīga nosaukuma.
com.apple.python.runtime LaunchAgent Pastāvības etiķete ārpus likumīgiem Apple sistēmas ceļiem.
PyRuntimeBroker Plānotais uzdevums Viltus Windows izpildlaika brokera noturība bez likumīga instalēšanas avota.
Python process ar nosaukumu python3-dbus-helper importēšana pyperclip un psutil Uzvedības neatbilstība starp parādīto procesa nosaukumu un importētajām bibliotēkām.
Starpliktuve mainās ~0.4 s pēc maka adreses kopēšanas Kriptovalūtas adreses aizstāšanas paraksta uzvedība.

Uzbrucēja maka komplekts (aizstāvju medību saraksts)

Maku saraksts tiek piegādāts cietajā kodā npm-install.js un clipboard_guardian/guardian.pyAizsargprogrammatūras var izmantot šo sarakstu gan kā bloķēšanas sarakstu (uzskatīt jebkuru pārskaitījumu uz šīm adresēm no korporatīvajiem makiem par aizdomīgu), gan kā medību atslēgu (uzskatīt jebkuru no šīm virknēm neautentificētā konfigurācijas failā, būvējuma artefaktā vai izstrādātāja datorā par infekcijas indikatoru).

Uzbrucēja maka komplekts

ķēde Adrese
Ethereum / BSC 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Ronins (EVM) ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Bitcoin bc1qs2mpls4p0f7fng073gy2rcdgjpf7la4eugpt6y
Bitcoin Cash bitcoincash:qqmvyxxklzp7l3eslxavhc8phl6hprdf25lwc29nlt
Litecoin ltc1qnefc8x59a9cwtqnflt8hmqvezqw4hc7lt3fkqe
dogecoin DNEJmYRZtzyK44tZea4S7wV3otTyRk48Fy
Svītra XtJ7E6mnhPK93Vib29PGQrTmQjhTTqFwbS
Zcash t1d4hcEnBjdh9X6Wb6R2dxqjnxddJ6ocP8M
DigiByte DPmH2dhiGK3hk3A69tZUMz6tHzGFHBzSrH
Monero 42zhAidVhP7QETk83JAspS59ASALSHFio44vmu6MdDCz15cSqtqsG4QVyzY8vTrjGrTEA6zMbWW6Yft1Ynz1xLfCN5FVbXf
Solana DWBAmQLi9gP6mk7UfJfQGYTV1UPK32WekLTqg83q1mc5
TRON TVgEgMemmJABYYnbNr1Wi8bSgADEkdEBt2
TON UQDTSkvwmptU9eG988KgxS3WjnYAZlXgfpJxnz4mhWZAvULr
Ripple r9tj3cMCiqRijNYqNVYNuwKykkQfS8FE4H
Polkadot 1JSkYqXQE4d28HdcmTPhbgCrdiPFTfSHxD67tam16p53oBG
NEAR 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364
Kosmoss cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e
osmoze osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t
Celestia celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5
Injicējošs inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh
Kava kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux
Harmonija one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a
Zeme terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x
Algorands XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI
zvaigžņu GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE
Cardano addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f
MultiverseX erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0
Aptos 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e
Sui 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78
Nano nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn
Filecoin f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui
Tezos tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk
Ergo 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA
Hedera 0.0.10488092

Ķēdes ar regulāro izteiksmju pārklājumu, bet tukšām maku vietām noklusējuma konfigurācijā — Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin, Beacon-Chain BNB — šajā versijā netiek aktīvi aizstātas, bet tiek noteiktas. Uztveriet tās kā uzraudzības tvērumu, nevis aizstāšanas tvērumu.

Atribūcija un motivācija

Kampaņai ir vāja atribūcijas virsma. Mēs neesam spējuši apstiprināt operatora identitāti. Ko mēs varam reģistrēt:

  • Izdevēja metadati. NPM konts žagoties norāda savu e-pastu kā olgascarlet@deltajohnsons.comDomēns deltajohnsons.com neveido korporatīvo identitāti, ko varētu pārbaudīt. NPM kontā netiek rādīta e-pasta verifikācija un nav SCM verifikācija. Nav saistītas publiskas GitHub klātbūtnes.
  • Repozitorija lauks. The pack.json nes nevienu krātuve lauks. Likumīgais npm:@juggle/resize-observer norāda uz īstu GitHub repozitoriju ar tūkstošiem zvaigzņu un aktīvām problēmām. Repozitorija saites neesamība ir ātrākā vizuālā pazīme npm lietotāja saskarnē.
  • README plaģiāts. Pakete README ir likumīga. @juggle/resize-observer README baits pa baitam, ieskaitot importēt piemēri, kas atsaucas @juggle/resize-observer pats (nevis publicēšanas pakotne). Operators pat neuztraucās pārrakstīt importētos failus — izplatīta zīme, ka readme fails tika noņemts, nevis pielāgots.
  • Nav infrastruktūras, uz kuras balstīties. Nav C2 galapunkta, nav DNS meklēšanas, nav IP adreses. Ļaunprātīgā rīcība ir pilnībā iekapsulēta lokālajā izgriezējā un cietkodētajā maka pakotnē. Tas padara uz domēnu vai ASN balstītu pagriešanu nepieejamu. Aizsargiem, kas maina maciņus starp kampaņām, ir jāsalīdzina maciņi ar jebkuru iepriekšēju izgriezēju, kas viņiem ir failā; maka atkārtota izmantošana dažādās pakotnēs ir visvieglāk apstrādājamā starpkampaņu saite.
  • Nosaukuma izvēle. @jaggle/resizeobserves ir par vienu rakstzīmi mazāk nekā @žonglēt un viena atkāpe no labi zināmā resize-observerKombinētais rediģēšanas attālums ir divi glifi. Šī ir apzināta vizuāla sadursme, nevis vispārējs pietupiens.

Motivācija, kuras pamatā ir lietderīgās slodzes uzvedība: tīra monetizācija, izmantojot oportūnistisku starpliktuves aizstāšanu. Nav akreditācijas datu vākšanas, nav resursdatora pirkstu nospiedumu noņemšanas, nav vides mainīgo nolasīšanas. Operatoram nerūp, kas ir upuris — viņam rūp, lai upura nākamais pārskaitījums būtu vērsts uz vienu no norādītajām adresēm. Četrdesmit ķēžu pārklājums ir loterijas modelis darbībā: plaši izplatīts, cerams, ka viena augstas vērtības pasta nonāks vienu reizi uz N instalācijām.

Operators, šķiet, neuztraucas par noņemšanu. Deviņu versiju publicēšana divu stundu laikā vienā un tajā pašā darbības jomā nozīmē publicēšanas un ierakstīšanas identifikatoru: maksimāli palielināt reģistra nospiedumu, pirms noņemšanas latentums sasniedz, un pēc tam turpināt. Mēs neesam novērojuši @jaggle atkārtoti publicējot ar jaunu darbības jomu rakstīšanas laikā, taču mēs sagaidām līdzīgus darbības jomas (@jaggie, @juggle-, @joggle) parādīsies tuvākajās dienās, ja operators joprojām ir aktīvs.

Ietekme, tendences un kas aizstāvjiem būtu jādara

 Ietekme

No pašreizējā datu kopuma nav iespējams kvantitatīvi noteikt ietekmi reālā naudā. Apgriešanas rīks neraksta telemetrijas datus, un analīzes robežvērtības brīdī vēl nav novērots, ka maki saņemtu aizvietotus pārskaitījumus (uzskaitīto ķēžu turpmākā pārbaude ir mūsu sarakstā). Leģitīmais npm:@juggle/resize-observer Vidēji nedēļas lejupielāžu skaits ir krietni septiņciparu skaitlis — tas ir typosquat mērķis ar lielu datplūsmu —, un ļaunprātīgā pakotne atklāšanas brīdī bija aktīva mazāk nekā 24 stundas, kas ierobežo inficēto lietotāju skaitu, bet to pilnībā neizslēdz.

Sprādziena rādiuss, kura izsekošanas vērtība nav tiešas lejupielādes @jaggle/resizeobserves — tās, visticamāk, ir mazas. Tās ir **tranzitīvas instalācijas**: izstrādātājs pievieno pakotni smilškastes projektam, palaižot npm instalēt, un pēc tam aizmirstot, ka instalēšanas aizķere vispār ir palaista. Katrai mašīnai, kas apstrādāja pēcinstalēšanu, tagad automātiskās palaišanas laikā ir lietotāja starpliktuves nolaupītājs neatkarīgi no tā, vai projekts joprojām atrodas diskā. Pakotnes direktorija noņemšana no mezgla_moduļi **neatceļ** noturību.

Jauni modeļi

Divas tendences, ko šī kampaņa iemieso.

npm kā Python lietderīgās slodzes piegādes apvalks. npm tarball ir 4 rindu instalētājs; faktiskais zaglis ir Python, ko visā sistēmā instalējis pip no komplektā iekļautās direktorijas. Tas nav nekas jauns — mēs jau iepriekš esam redzējuši, ka npm pakotnes atmet Python —, taču tā kļūst par ievērojami izplatītāku formu kriptoapgriešanas kampaņās. Operatoram ir divējāda priekšrocība: Python starpliktuves bibliotēkas (pyperclip pirmie no tiem) ir tīrāki un vairāk piemēroti dažādām platformām nekā JavaScript ekvivalenti, un vairums automatizēto npm skeneru ļoti novērtē JavaScript failus un Python .py viegli sasien. Izmaksas ir tādas, ka uzstādīšanas vieta rada daudz skaļāku troksni — svaigs pip instalēšana ir grūti noslēpt izstrādātāja datorā, kas parasti to nedara pip instalēšana laikā npm instalēt.

Platformām raksturīgi nosaukumi kā vienīgā slepenā iespēja. Vairāki neseni izstrādātāji un mazas slodzes zagļi ir pilnībā atteikušies no koda līmeņa obfuskācijas par labu likumīgi izskatīgām noturības etiķetēm. python3-dbus-helper, com.apple.python.runtime, un PyRuntimeBroker ir mācību grāmatas piemēri — vārdi, kurus aizstāvja acs izlaidīs četrdesmit lietotāju pakalpojumu sarakstā. Šī ir lēta un izturīga slepenības forma: noņemšana notiek katrā pakotnē, taču saglabāšanas faili paliek spēkā pēc noņemšanas, un pakalpojums, kas nosaukts pēc reāli izskatīga platformas komponenta, netiks iztīrīts ne ar ko citu, kā vien ar skaidru auditu.

Kas aizstāvjiem būtu jādara

  • Auditēt ~/.config/systemd/user/, ~/Library/LaunchAgents/ un Get-ScheduledTask produkcija izstrādātāju datoros ierakstiem, kas uzskaitīti IOC. Noņemot npm pakotni, tie paliek savās vietās; tie ir jānoņem manuāli.
  • Bloķēt pārskaitījumus uz norādītajām maku adresēm korporatīvo un valsts kases, kā arī DeFi maku robežās, kur ir pieejama adrešu atļauju sarastīšana.
  • Meklējiet ~/.config/clipboard-guardian/config.json (un platformas ekvivalentiem) visā izstrādātāju iekārtu parkā. Faila klātbūtne ir augstas ticamības infekcija neatkarīgi no tā, kura pakotnes versija to piegādāja.
  • Meklēt clipboard_guardian/guardian.py failā node_modules/ kešatmiņas momentuzņēmumos, kas varētu būt izveidoti pirms noņemšanas. Faila md5 ir stabils visās pārskatītajās versijās.
  • Lockfile-pin @juggle/resize-observer (likumīgā pakotne), lai turpmākās instalācijas nevarētu atrisināt neko citu vienas rakstzīmes kļūdas dēļ, īpaši darbplūsmās bez bloķēšanas failiem, piemēram, NPX.
  • Apstrādāt jebkuru npm pēcinstalēšanu, kas izsauc pip instalēšanu kā ļoti nopietns būvniecībāpipeline politika. Nav pamatota iemesla, kāpēc npm pakotnei instalēšanas laikā būtu nepieciešams pip — Python rīki izplata Python rīkus.
  • Meklēt process_iter()-salīdzināmos uzraudzības datos procesiem ar nosaukumu python3-dbus-helper, kas importē pyperclip — maskēšanas neatbilstība (D-Bus palīgs, kurā atrodas starpliktuves bibliotēka) ir tīrākais uzvedības indikators, kāds mums ir.
  • Rotēt no inficētām iekārtām ielīmētām maku adresēm. Starpliktuves nolaupītājs apdraud ceļu starp maka lietotāja saskarni un ielīmēšanas mērķi; inficēšanas laikā kopētās adreses var tikt nemanāmi mainītas. Viss, kas nosūtīts inficēšanas laikā, jāuzskata par potenciāli nepareizi novirzītu.

Secinājums: noturība pārsniedz dzēšanas ilgumu. Reģistrs galu galā noņems @jaggle/resizeobserves visās deviņās versijās; systemd vienība, LaunchAgent un Scheduled Task paši sevi nenoņems.

Atsauces

sca-tools-software-composition-analysis-tools
Prioritizējiet, novērsiet un aizsargājiet savus programmatūras riskus
Iegūstiet savu bezmaksas kontu.
Nepieciešama kredītkarte.

Nodrošiniet programmatūras izstrādi un piegādi

ar Xygeni produktu komplektu