RuntimeBroker npm Typosquat Растения Crypto Clipper

RuntimeBroker: Typosquat, npm, внедрява 40-верижен крипто-клипер като „помощник за изпълнение на системата“ между операционните системи

TL; DR

На 21.05.2026 г. издателят на npm jaggle пусна девет версии (1.0.0 чрез 1.0.8) на @jaggle/resizeobserves в рамките на приблизително два часа.

Пакетът е печатна грешка на легитимното @juggle/resize-observer polyfill — широко използван пакет с милиони седмични изтегляния — но не предлага реална имплементация на ResizeObserver.

Вместо това, пакетът кука след инсталиране инсталира пакетен Python полезен товар, регистрира персистентност като платформено-ориентиран брокер по време на изпълнение и внедрява междуплатформен клипборд хайджакър, насочен към криптовалутни транзакции.

Linux постоянството се проявява като python3-dbus-helper, macOS as com.apple.python.runtime, и Windows as PyRuntimeBroker.

Полезният товар непрекъснато следи клипборда за адреси на портфейли повече от 40 блокчейна и тихомълком замества копираните адреси с портфейли, контролирани от нападателя.

Зловредният софтуер работи изцяло локално, без изходяща C2 инфраструктура, което прави самото заместване в клипборда механизъм за извличане.

Основният IOC е самото име на пакета: @jaggle/resizeobserves — обърнете внимание на изпуснатата гласна в „jaggle“ и добавеното „s“ в „resizeobserves“.

Тежест: висока.

Атаката: Как работи

npm:@jaggle/resizeobserve не изглежда като зловреден софтуер на случаен принцип изглед на npm. Негов README.md е дословният README файл на npm:@juggle/resize-observer — същите примерни кодове, същите инструкции за употреба, същите импортиране на { ResizeObserver } от '@juggle/resize-observer' препратки навсякъде. Плагиатството е толкова пълно, че всеки, който погледне документацията, би предположил, че чете документацията на легитимния пакет.

- package.json, за разлика от това, е рядко: не хранилище поле, едно-единствено кофа за боклук вход, сочещ към bin/clipboard-guardian.jsи след инсталиране скрипт, който се изпълнява възел npm-install.jsПримерите за „Основно използване“ в README файла препращат към JavaScript имплементация, която не съществува никъде в tarball-а. Единственият JavaScript в пакета е инсталационният скрипт.

Етап 1 — npm postinstall зарежда Python полезен товар

npm-install.js е платформено-ориентиран. Той локализира пиукам изпълним файл по фиксиран път за търсене (/usr/bin/pip3, /usr/local/bin/pip, връщайки се към python3 -m pip), инсталира пакета Python от tarball директорията и — в Linux — го изтегля xclip or xsell от ап-да, Pacman или DNF ако нито едно от двете не е налично:

Използването на –пакети-за-счупване-на-системата е умишлено: съвременните Linux дистрибуции доставят Python с активиран маркер за външно управлявана среда на PEP 668, който блокира инсталирането на pip на целия сайт по подразбиране. Инсталационният скрипт принуждава инсталацията да се извърши.

Скриптът е и sudo-aware. Когато изпълняваният uid е резултат от sudo npm инсталиране, гласи сценарият SUDO_USER и се изплаща за парола за getent да намеря реален домашната директория на потребителя, след което записва своите файлове за персистентност там, вместо в / КоренУстойчивостта е за всеки потребител, а не за цялата система.

Етап 2 — Устойчивост между операционни системи под имена на runtime-broker

След инсталирането на Python пакета, скриптът регистрира запис за автоматично стартиране под различно име на всяка операционна система:

  • Linux — потребителска единица на systemd на адрес ~/.config/systemd/user/python3-dbus-helper.serviceУстройството Описание is Помощник за изпълнение на Python D-BusСкриптът също се опитва да го активира чрез systemctl – активиране на потребителя, връщайки се към ръчна символична връзка под по подразбиране.target.wants/ когато systemctl се провали. Ако се изпълнява под sudo, скриптът превключва към sudo -u systemctl –потребителс XDG_RUNTIME_DIR настроено така, че повикването към потребителската шина да работи.
  • macOS — plist файл на LaunchAgent на ~/Библиотека/LaunchAgents/com.apple.python.runtime.plist с RunAtLoad=true намлява KeepAlive=true, след което се зарежда чрез зареждане на launchctl.
  • Windows — планирана задача с име PyRuntimeBroker, задействана от AtLogOn, с ограничение за време на изпълнение нула (т.е. без таймаут), регистрирана чрез PowerShell.

И трите имена са правдоподобни от пръв поглед. python3-dbus-helper следва конвенцията за именуване на легитимната интеграция на Python-D-Bus на Linux настолни компютри. com.apple.python.runtime имитира етикетирането на обратния DNS на Apple за собствените си услуги. PyRuntimeBroker повтаря това на Windows RuntimeBroker.exe — истинска, подписана услуга на Microsoft, която посредничи за заявки за разрешения за UWP приложения. Нито една от тях не е истинска услуга на Apple/Microsoft/Python в този контекст, а защитник, който извършва бързо визуално сканиране systemctl –user list-units or Get-ScheduledTask е малко вероятно да трепне.

Етап 3 — Похитителят на клипборда

Полезният товар на Python, инсталиран на clipboard_guardian/guardian.py, изпълнява безкраен цикъл, който проверява системния клипборд на всеки 400 милисекунди. На всеки такт, той извлича текущото съдържание на клипборда чрез pyperclip.paste() и ги сравнява със списък от над четиридесет предварително компилирани регулярни израза, обхващащи формати на адреси на портфейли за 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 и няколко други, запушени, но празни в конфигурацията по подразбиране (Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin).

Когато се открие съвпадение, скриптът прочита адреса на атакуващия за тази верига от ~/.config/clipboard-guardian/config.json (или неговите еквиваленти на платформата) и презаписва клипборда със заместения текст:

Няма мрежов маяк. Клипърът не се обажда до дома, не регистрира заразени хостове, не извлича нищо. Извличането е самото заместване: когато потребител копира адрес на получател от потребителския интерфейс на портфейла си и го постави в диалогов прозорец за изпращане, поставеният адрес принадлежи на оператора. Средствата се губят в мрежата, прозрачно за потребителя.

Какво е новото тук

Няколко детайла се открояват в сравнение с общия шаблон за крипто-клипер:

1. npm → кросоувър на Python. Повечето крипто-клипъри, които виждаме в npm, са чист JavaScript, често обфускиран с... _0x ротация на масива или оценка(atob(…)) стекове. Този пример използва npm tarball като нищо повече от обвивка за доставка на Python пакет — чист Python — и позволява на pip да обработва инсталирането на зависимости (пайпърклип, псутил, по избор setproctitle) декларирани в пакета pyproject.tomlНяма JavaScript обфускация, която да се преодолее. Самият клипър е обикновен, четим на Python.

2. Етикети за персистентност на Tri-OS, избрани за правдоподобност. Много междуплатформени инсталатори регистрират персистентност под общи имена (услуга за актуализиране, helper.plist). Този пример си прави труда да избере етикети, които наподобяват платформено-ориентираните брокери по време на изпълнение на всяка операционна система. Именуването е единственият опит за скритост – няма руткит, няма скриване на потребителска област, няма обфускация на пътя. Обзалогът е, че защитниците рядко извършват одит ~/.config/systemd/потребител/ и че услуга, наречена python3-dbus-helper няма да се открои в случаен преглед.

3. Прикриването на заглавието на процеса е реално, но антианализът е спящ. Полезният товар на Python дефинира a _процес_на_прикриване() функция, която задава заглавието на процеса чрез setproctitle (Linux/macOS) или SetConsoleTitleW (Windows) — и Основната () го нарича. Така че ps aux ще покаже python3-dbus-helper вместо python3 …/guardian.pyСъщият модул обаче дефинира е_монитор_работи() функция, която изброява известни инструменти за наблюдение на процеси (htop, btop, Диспечер на задачи, Монитор на активността, Process Hacker, Монитор на ресурси, системни монитори на GNOME / KDE / Xfce / MATE и т.н.) — и Основната () никога не го извиква. Цикълът на заместване се изпълнява безусловно, независимо дали потребителят има отворен монитор на процесите. Функцията е мъртъв код в изпратената версия. Най-вероятно е остатък от по-ранна итерация или скеле за функция, която все още не е свързана. Така или иначе, повърхността за анти-анализ на публикувания полезен товар е едно преименуване на заглавие на процес, а не избягване на активен монитор.

4. Вграденото поведение при сливане на конфигурации. npm-install.js записва списъка с портфейли по подразбиране в ~/.config/clipboard-guardian/config.json и, ако вече съществува конфигурационен файл, слива всички ключове, чиято съществуваща стойност е празна. Това означава потребител, който преди това е бил заразен и е частично почистил конфигурацията — например, чрез изпразване на ethereum стойност — ще я попълва отново при всяка следваща инсталация на зловреден пакет. Няма почистване на файла за персистентност в нито един кодов път.

Дата / Час (UTC) събитие
2026-05-21 18:50:32 @jaggle/resizeobserves@1.0.0 публикуван.
2026-05-21 19:55:55 1.0.1 публикувана — първата версия, маркирана чрез външно сканиране.
2026-05-21 19:58:10 1.0.2 публикуван.
2026-05-21 20:05:03 1.0.3 публикуван.
2026-05-21 20:09:24 1.0.4 публикуван.
2026-05-21 20:13:48 1.0.5 публикуван.
2026-05-21 20:41:52 1.0.6 публикуван.
2026-05-21 20:43:56 1.0.7 публикувано — добавя try/catch обвивка около стъпката за писане в конфигурацията на портфейла npm-install.js.
2026-05-21 20:46:15 1.0.8 публикувано — инсталаторът е преименуван npm-install.jsnpm-install.cjs (байтово идентично съдържание).
2026-05-22 Публикувани са присъди и международни наказателни решения. Версиите все още са в регистъра към момента на публикуване (в процес на разработка).

Девет версии за един час и петдесет и шест минути са бързи дори за типослот. Моделът е в съответствие с кампания за публикуване и изгаряне — запълване на системния регистър под един дескриптор, оставяне на откриването да си свърши работата и преминаване към нов дескриптор, след като една версия бъде премахната. Видимите делти в целия регистър са козметични: 1.0.1 е добавен изричен код /usr/bin/pip3пътища в стил -style до списъка за търсене на pip (sudo-съвместимост), 1.0.7 обви записа на конфигурацията на портфейла в try/catch, а 1.0.8 преименува инсталатора от . Js да се .cjs като същевременно запазва байтово идентично съдържание. .cjs преименувайте песни с npm предупреждения за двусмислена резолюция на модулите в пакети без изрично указание "Тип" поле и може да е опит за потискане на шума по време на инсталиране, който би могъл да привлече внимание. Полезният товар на Python — единствената част, която всъщност краде — е непроменен във всичките девет версии.

Индикатори за компромис

Услуги

Екосистема Пакет Версии Статус
NPM @jaggle/resizeobserves 1.0.0 чрез 1.0.8 Актуализирано в момента на публикуване; поискано премахване.

Файлове и хешове

Път бележки
clipboard_guardian/guardian.py
(md5 f7935c2c82bc881288611ab6cd634f17)
Идентично във всичките девет публикувани версии (1.0.0 чрез 1.0.8). Полезният товар на машинката за подстригване.
npm-install.js (1.0.0 – 1.0.7)
npm-install.cjs (1.0.8)
Инсталатор за постоянство; едно и също поведение от край до край. 1.0.7's .js намлява 1.0.8's .cjs са байтово идентични.
~/.config/clipboard-guardian/config.json Конфигурация за постоянство на Linux и пакет портфейл.
~/Library/Application Support/clipboard-guardian/config.json конфигурация за постоянство на macOS и пакет портфейл.
%APPDATA%\clipboard-guardian\config.json Конфигурация за постоянство на Windows и пакет портфейл.
~/.config/systemd/user/python3-dbus-helper.service Устойчивост на автоматично стартиране на Linux.
~/Library/LaunchAgents/com.apple.python.runtime.plist Устойчивост на LaunchAgent на macOS.
~/Library/Logs/com.apple.python.runtime.log macOS stdout/stderr лог за агента.
Scheduled Task PyRuntimeBroker Задача за автоматично стартиране на Windows (AtLogOn, без таймаут).

Поведенчески показатели

Сигнал Описание
pip install --break-system-packages от npm след инсталиране Принуждава инсталирането на Python в целия сайт, заобикаляйки защитите на PEP 668.
apt-get install -y xclip (или pacman/не успях да спечеля) Инсталира помощни програми за клипборда в Linux по време на инсталирането на пакета.
python3-dbus-helper.service потребителска единица systemd Устойчивост, регистрирана под правдоподобно изглеждащо име на помощник по време на изпълнение.
com.apple.python.runtime LaunchAgent Етикет за постоянство извън легитимните системни пътища на Apple.
PyRuntimeBroker Планирана задача Фалшиво постоянство на брокера за изпълнение на Windows без легитимен източник на инсталатора.
Процес на Python, озаглавен python3-dbus-helper вносител pyperclip намлява psutil Несъответствие в поведението между показаното име на процес и импортираните библиотеки.
Клипбордът се променя ~0.4 секунди след копиране на адреса на портфейла Поведение на подписа при заместване на адреси в криптовалута.

Пакет портфейл за атакуващи (списък за лов на защитници)

Списъкът с портфейли се доставя твърдо кодиран npm-install.js намлява clipboard_guardian/guardian.pyЗащитниците могат да използват списъка както като списък с блокирани данни (да третират всеки трансфер към тези адреси от корпоративни портфейли като подозрителен), така и като ключ за търсене (да третират наличието на някой от тези низове в неудостоверен конфигурационен файл, артефакт на компилация или машина на разработчика като индикатор за инфекция).

Пакет портфейл на атакуващ

верига Адрес
Етериум / BSC 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Ронин (EVM) ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Bitcoin bc1qs2mpls4p0f7fng073gy2rcdgjpf7la4eugpt6y
Bitcoin Cash bitcoincash:qqmvyxxklzp7l3eslxavhc8phl6hprdf25lwc29nlt
Litecoin ltc1qnefc8x59a9cwtqnflt8hmqvezqw4hc7lt3fkqe
Dogecoin DNEJmYRZtzyK44tZea4S7wV3otTyRk48Fy
Тире XtJ7E6mnhPK93Vib29PGQrTmQjhTTqFwbS
Zcash t1d4hcEnBjdh9X6Wb6R2dxqjnxddJ6ocP8M
DigiByte DPmH2dhiGK3hk3A69tZUMz6tHzGFHBzSrH
Monero 42zhAidVhP7QETk83JAspS59ASALSHFio44vmu6MdDCz15cSqtqsG4QVyzY8vTrjGrTEA6zMbWW6Yft1Ynz1xLfCN5FVbXf
Солана DWBAmQLi9gP6mk7UfJfQGYTV1UPK32WekLTqg83q1mc5
TRON TVgEgMemmJABYYnbNr1Wi8bSgADEkdEBt2
TON UQDTSkvwmptU9eG988KgxS3WjnYAZlXgfpJxnz4mhWZAvULr
Ripple r9tj3cMCiqRijNYqNVYNuwKykkQfS8FE4H
polkadot 1JSkYqXQE4d28HdcmTPhbgCrdiPFTfSHxD67tam16p53oBG
NEAR 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364
Космос cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e
осмоза osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t
Челестия celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5
Инжективно inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh
Кава kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux
Хармония one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a
Земя terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x
Algorand XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI
звезден GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE
Cardano addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f
MultiverseX erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0
Аптос 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e
Sui 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78
Nano nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn
Filecoin f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui
Tezos tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk
Следователно 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA
Hedera 0.0.10488092

Вериги с покритие на регулярни изрази, но с празни слотове за портфейли в конфигурацията по подразбиране — Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin, Beacon-Chain BNB — не се заместват активно в тази компилация, но се откриват. Третирайте ги като обхват за наблюдение, а не като обхват за заместване.

Атрибуция и мотивация

Кампанията предлага тънка повърхност за атрибуция. Не успяхме да потвърдим самоличността на оператора. Какво можем да запишем:

  • Метаданни на издателя. NPM акаунтът дрънкам посочва имейла си като olgascarlet@deltajohnsons.comДомейнът deltajohnsons.com не се свързва с корпоративна идентичност, която можем да потвърдим. NPM акаунтът не показва потвърждение по имейл и не SCM проверка. Няма свързано публично присъствие в GitHub.
  • Поле за хранилище. - package.json не носи хранилище поле. Легитимният npm:@juggle/resize-observer сочи към истинско хранилище на GitHub с хиляди звезди и активни задачи. Липсата на връзка към хранилище е най-бързият визуален признак в потребителския интерфейс на npm.
  • Плагиатство в README. Пакетът README е легитимният @juggle/resize-observer README байт по байт, включително внос примери, които препращат @juggle/resize-observer самия пакет (не пакета за публикуване). Операторът дори не си е направил труда да пренапише импортираните файлове — често срещан сигнал, че readme файлът е бил премахнат, а не адаптиран.
  • Няма инфраструктура, на която да се разчита. Няма C2 крайна точка, няма DNS търсене, няма IP адрес. Злонамереното поведение е напълно капсулирано в локалния клипър плюс твърдо кодирания пакет портфейли. Това прави базираното на домейн или ASN превключване недостъпно. Защитниците, които превключват между кампании, трябва да съпоставят хеш данните на портфейлите с всеки предишен клипър, който имат във файла; повторното използване на портфейл в различни пакети е най-лесно проследимата връзка между кампании.
  • Избор на именуване. @jaggle/resizeobserve е с един символ по-различно от @жонглирай и с една интонация разстояние от добре познатото наблюдател на преоразмеряванеКомбинираното разстояние за редактиране е два глифа. Това е умишлен визуален сблъсък, а не общо клекване.

Мотивация, основана на поведението на полезния товар: чиста монетизация чрез опортюнистично заместване на клипборда. Няма събиране на идентификационни данни, няма снемане на пръстови отпечатъци на хоста, няма четене на променливи на средата. Операторът не се интересува коя е жертвата - той се интересува, че следващото прехвърляне на жертвата сочи към един от изброените адреси. Покритието с четиридесет вериги е лотарийният модел в действие: хвърляй широко, надявай се, че един висококачествен пасат ще се приземи веднъж на N инсталации.

Операторът изглежда не се интересува от премахването. Публикуването на девет версии в рамките на два часа под един и същ обхват се чете като дескриптор за публикуване и записване: максимизирайте отпечатъка в системния регистър, преди латентността за премахване да се увеличи, след което продължете напред. Не сме наблюдавали @jaggle препубликуване под нов обхват към момента на писане, но бихме очаквали подобни обхвати (@джаги, @жонглирам-, @джогъл) да се появи през следващите дни, ако операторът е все още активен.

Въздействие, тенденции и какво трябва да правят защитниците

 Въздействие

Количественото определяне на въздействието в реални пари не е възможно от текущия набор от данни. Клипърът не записва телеметрия и портфейлите все още не са наблюдавани да получават заместващи преводи към крайния срок за анализ (последващо проучване на изброените вериги е в нашия списък). Легитимните npm:@juggle/resize-observer средно достига седемцифрени седмични изтегляния - цел с висок трафик, грешна типография - и злонамереният пакет е бил активен по-малко от 24 часа към момента на разкриването, което ограничава изложената популация, но не я нулира.

Радиусът на взрива, който си струва да се следи, не е директно изтегляне на @jaggle/resizeobserve — вероятно са малки. Става въпрос за **транзитивни инсталации**: разработчик добавя пакета към sandbox проект, изпълнявайки npm инсталиране...и след това забравяне дали инсталационната кука някога е била изпълнена. Всяка машина, която е обработила слединсталационната операция, сега има похитител на клипборда при автоматично стартиране за всеки потребител, независимо дали проектът все още е на диска. Премахване на директорията на пакета от... модули_възел **не** премахва постоянството.

Възникващи модели

Две тенденции, които тази кампания илюстрира.

npm като обвивка за доставяне на полезен товар на Python. npm tarball е инсталатор от 4 реда; действителният stealer е Python, инсталиран в цялата система от пиукам от пакетната директория. Това не е новост — виждали сме npm пакети да премахват Python и преди — но се превръща в значително по-често срещана форма в крипто-клипър кампаниите. Предимството за оператора е двойно: Python клипборд библиотеки (пайпърклип първи сред тях) са по-чисти и по-платформени от еквивалентите на JavaScript и Повечето автоматизирани npm скенери натоварват JavaScript файловете и Python. .py леко се свръзва. Цената е, че инсталационният отпечатък е много по-шумен - нов pip инсталиране е трудно да се скрие на машина на разработчик, която обикновено не го прави pip инсталиране по време на npm инсталиране.

Платформено-ориентирани имена като единствената стелт технология. Няколко скорошни инструменти за подрязване и кражба на малък полезен товар изцяло се отказаха от обфускацията на ниво код в полза на легитимно изглеждащи етикети за персистентност. python3-dbus-helper, com.apple.python.runtime, и PyRuntimeBroker са учебникарски примери — имена, които един защитник би пропуснал в списък с четиридесет потребителски услуги. Това е евтина, издръжлива форма на скритост: премахването е за всеки пакет, но файловете за съхранение оцеляват след премахването, а услуга, кръстена на реално изглеждащ компонент на платформата, няма да бъде почистена от нищо друго освен от изричен одит.

Какво трябва да направят защитниците

  • Одит ~/.config/systemd/user/, ~/Library/LaunchAgents/ и Get-ScheduledTask продукция на машините на разработчиците за записите, изброени в IOC. Премахването на npm пакета ги оставя на място; те трябва да бъдат премахнати ръчно.
  • Блокиране на преводи към посочените адреси на портфейли на границите между корпоративния сектор, финансовия отдел и DeFi портфейла, където е наличен списък с разрешени адреси.
  • Търсете ~/.config/clipboard-guardian/config.json (и еквиваленти на платформата) в целия парк от машини на разработчика. Наличието на файла е високодостоверна инфекция, независимо от коя версия на пакета го е доставила.
  • Търсене в node_modules/ за clipboard_guardian/guardian.py в моментни снимки на кеша за изграждане, които може да са предшествали премахването. MD5 файлът е стабилен във всички рецензирани версии.
  • Заключване на заключен файл @juggle/resize-observer (легитимният пакет), така че бъдещите инсталации да не могат да се разрешат с нищо друго при едносимволен печат, особено в работни потоци без lockfile като npx.
  • Третиране на всяко извикване на pip install от npm след инсталиране като с висока степен на тежест в строеж-pipeline политика. Няма основателна причина npm пакет да се нуждае от pip по време на инсталиране — Python tooling разпространява Python tooling.
  • Търсене на данни за мониторинг, сравними с process_iter(), за процеси с име python3-dbus-helper, които импортират pyperclip — несъответствието в маскировката (D-Bus помощникът, съхраняващ библиотека от клипборда) е най-чистият поведенчески индикатор, който имаме.
  • Ротирайте адресите на портфейли, поставени от заразени машини. Похитител на клипборда компрометира пътя между потребителския интерфейс на портфейла и целта за поставяне; адресите, копирани по време на заразяването, могат да бъдат променени незабелязано. Всичко, изпратено по време на прозореца за заразяване, трябва да се третира като потенциално погрешно насочено.

Изводът: постоянството надживява премахването. Регистърът в крайна сметка ще премахне @jaggle/resizeobserve Във всичките девет версии; модулът systemd, LaunchAgent и Scheduled Task няма да се премахнат сами.

Източници

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni