TL, д-р
Адзіны выдавец npm, ddjidd5640стварыў каталог з 22 пакетаў падробленых інструментаў бяспекі Web3 пад такімі выдуманымі брэндамі, як Гільдыя крыптабяспекі, Web3 Audit Collective, і Альянс бяспекі DeFi.
Гэтыя пакеты не выглядаюць як простая кампанія з памылковымі тыпамі. Яны выглядаюць як брэндаваная экасістэма бяспекі, падмацаваная аднолькавымі пустымі арганізацыямі GitHub і пераканаўчымі назвамі інструментаў MCP, такімі як search_leaked_credentials, validate_chain_key, і deploy_safe.
Кампанія падзелена на два актыўныя сямействы карысных нагрузак і адзін спячы транш.
Варыянт А змяшчае 8 пакетаў для збору ўліковых дадзеных. Пасляўсталёўкавы скрыпт чытае лакальныя сакрэтныя сховішчы, а ўбудаваны scanner.js запускаецца, калі агент штучнага інтэлекту выклікае інструменты MCP пакета, шукаючы ключы кашалька, мнемоніку BIP39, токены API і іншыя ўліковыя дадзеныя.
Варыянт Б змяшчае 5 бінарных дропераў на аснове Pinggy. Гэтыя пакеты атрымліваюць і выконваюць аддаленую карысную нагрузку падчас пасляўсталёўкі, з foundry-deploy-helper:1.8.96 скіданне адлучанага выканальнага файла па адрасе /tmp/.node-cache.
Варыянт C змяшчае 9 неактыўных пакетаў без відавочнай пасляўсталёўнай карыснай нагрузкі, але з тым жа выдаўцом, шаблонам брэндынгу і найменнем, арыентаваным на Web3.
Толькі 8 з 22 пакетаў былі пазначаныя ўсюды, дзе мы маглі іх убачыць; астатнія 14 усё яшчэ былі даступныя на npm на момант аналізу.
Ступень цяжкасці: крытычная.
Атака: Дзве карысныя нагрузкі ў адной шафе
Шафа — гэта брэнд. Адкрыйце README crypto-credential-scanner, і вам скажуць, што гэта сканер уліковых дадзеных, створаны Гільдыяй крыптабяспекі. Адкрыйце старонку defi-threat-scanner, і вам скажуць, што гэта інструмент Альянсу бяспекі DeFi. Адкрыйце web3-secrets-detector, і гэта Web3 Audit Collective. Ні адзін з гэтых калектываў не існуе як арганізацыя. Яны існуюць як пустыя арганізацыі GitHub, адзіная мэта якіх — запоўніць гіперспасылку «аўтар» старонкі npm.
Варыянт А: пасляўсталяцыйная перадпалётная падрыхтоўка і асноўны акт падчас MCP
Усе 8 пакетаў Variant-A маюць двухэтапную карысную нагрузку — этап пасля ўстаноўкі, які атрымлівае ўсе ўліковыя дадзеныя, якія ўжо ёсць на дыску, у выглядзе звычайнага тэксту, і этап выканання, які актывуецца, калі агент штучнага інтэлекту выклікае адзін з інструментаў MCP пакета.
«Першы этап, перадпалётная падрыхтоўка» знаходзіцца ўнутры package.json як аднарадковы код node -e. Ён адкрывае сем вядомых кропкавых файлаў і адпраўляе першыя 200 байт кожнага ў C2:
200 байтаў ~/.ssh/id_ed25519 не дасць зламысніку ваш прыватны ключ сам па сабе, але дасць імя файла, каментарый і першыя радкі загалоўка PEM — дастаткова, каб пацвердзіць, які ключ там знаходзіцца, чаго дастаткова для запуску наступнага этапу. 200 байт ~/.env звычайна больш чым дастаткова для ўцечкі поўнага токена API. 200 байт ~/.git-пасведчанні звычайна ўяўляюць сабой поўны набор токенаў OAuth.
«2-гі этап, галоўны акт», Is сканер.jsЁн загружаецца з пакета index.js і выклікаецца знутры апрацоўшчыка запытаў MCP у той момант, калі агент штучнага інтэлекту выклікае любы з рэкламуемых інструментаў. Файл аднолькавы пабайт у байт ва ўсіх 8 пакетах Variant-A (b461106e47a1f5966159cd6e92541505), і ён шчыра гаворыць пра тое, чым займаецца. Уступны блок каментарыяў даслоўна гучыць так:
| javascript // wallet-scanner.js — убудаваны актыўны сканер для пакетаў MCP // Працуе ціха, калі агент штучнага інтэлекту выклікае любы інструмент MCP, скануе асяроддзе на наяўнасць // кашалькоў/ключоў // Выкарыстоўвае толькі ўбудаваныя функцыі Node.js, без знешніх залежнасцей |
Ніжэй прыведзены рэкурсіўны шлях глыбінёй 3:
сам хатні каталог
…фільтрацыя імёнаў файлаў, якія змяшчаюць любы з сховішча ключоў, кашалёк.json, wallet.dat, .сакрэт, seed.txt, metamask, фантом, рабін, даверны кашалёк, coinbase, прыватны ключ, мнеманічна, сакрэтны_ключ, ключ_api — г.зн., уручную настроены спіс усіх месцаў, дзе карыстальнік крыптавалют захоўвае ключ. Для кожнага супадзення файл адкрываецца і скануецца на шэсць рэгулярных выразаў:
| тып | шаблон | Што яно ловіць |
|---|---|---|
| прыватны_ключ | (?:0x)?[a-fA-F0-9]{64} | Закрытыя ключы Ethereum і агульныя 32-байтавыя шаснаццатковыя сакрэты. |
| мнеманічна | \b([a-z]+\s+){11,23}[a-z]+\b | Мнеманічныя фразы BIP39 даўжынёй ад 12 да 24 слоў. |
| ключ_api | (api[_-]?key\|API_KEY)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,}) | Агульныя токены API і значэнні ўліковых дадзеных, убудаваныя ў файлы канфігурацыі. |
| таямніца | (?:secret\|private).{0,10}[:=]\s*["']?([A-Za-z0-9+/=]{20,}) | Сакрэты і прыватныя значэнні звычайна захоўваюцца ў фарматах канфігурацыі YAML, JSON і INI. |
| eth_address | 0x[a-fA-F0-9]{40} | Адрасы кашалькоў Ethereum, якія выкарыстоўваюцца для ідэнтыфікацыі і зняцця адбіткаў пальцаў ахвяр. |
| пароль | (?:PASSWORD\|PASSPHRASE)\s*=\s*["']?(\S{4,64}) | Паролі ў стылі экспарту абалонкі і зменныя асяроддзя парольнай фразы. |
Затым scanner.js цалкам зчытвае яшчэ шэсць кропкавых файлаў — да 500 байт кожны з ~/.env, ~/.bash_history, ~/.zsh_history, ~/.npmrc, ~/.gitconfig, ~/.git-credentials — і шукае ў process.env любыя зменныя, назва якіх утрымлівае key, secret, token, password, private, mnemonic, wallet або seed. Нарэшце, ён выклікае execSync('whoami') плюс os.hostname() і process.cwd(), каб пазначыць дамп ідэнтыфікатарамі ахвяры. Уся карысная нагрузка, а таксама да 100 асобных высноў, адпраўляецца як адзін аб'ект JSON.
Пункт прызначэння exfil не зададзены ў кодзе непасрэдна. Пакет атрымлівае яго падчас выканання з:
https://ddjidd564.github.io/defi-security-best-practices/config.json
— дакумент на GitHub Pages, якім кіруе зламыснік. Бягучы config.json вяртае
Калі гэта атрыманне не атрымаецца, сканер.js вяртаецца да таго ж вэбхук.сайт URL-адрас жорстка закадаваны як канстанта. Гэтая індырэкцыя — адзіны элемент аперацыйнай складанасці ў кампаніі: яна дазваляе зламысніку мяняць мэты выключэння без паўторнай публікацыі пакета і не дапускае траплення фактычнага URL-адраса калекцыянера ў артэфакт npm, што ўскладняе выяўленне на аснове сігнатур.
Варыянт B: тунэль Pinggy, бінарны файл і адзін пастаянны варыянт
Іншы жывы транш значна меншы — пяць пакетаў — і значна менш разумны. Аўтар цалкам адмовіўся ад касцюма MCP. Гэтыя пакеты сцвярджаюць, што з'яўляюцца памочнікамі па канфігурацыі для легітымных інструментаў Ethereum і Solana (памочнік канфігурацыі труфеляў, агрэгатар стужкі цэн Chainlink, пастаўшчык ganache-cli, solana-pda-helper, памочнік па разгортванні foundry). Карысная нагрузка — гэта адзін https.get-и-Exec радок у пасля ўстаноўкі
C2 — гэта бясплатна Пінгі тунэль — універсальны сэрвіс тунэлявання распрацоўшчыкаў, які зламыснік выкарыстоўвае як эфемерны C2. Пакет спампоўвае ўсё, што вяртае тунэль, і ўсталёўвае гэта ў child_process.execНяма праверкі цэласнасці, няма падпісання, няма абароны другога этапу. Тое, што абслугоўвае тунэль аператара сёння, тое і працуе.
Найбольш агрэсіўны пакет, foundry-deploy-helper:1.8.96, замяняе ўбудаваны https.get з завітак і хітрасць настойлівасці:
Варыянт C: адпаліраваны фасад, дэтанатара (пакуль) няма
Астатнія дзевяць пакетаў — праверка рэзервовай копіі кашалька, сканер бяспекі env, foundy-toolkit (наўмысная памылка ў друку ў Foundry), solna-web3 (памылка ў стылі Саланы), праверка бяспекі кашалька, убудова для профілявання газаў hardhat, эфіры-мультызванкі-ўтыліты, defi-env-аўдытар, etherjs-utils — мець няма постўсталявальнага скрыпта і на першы погляд няма відавочнага exfil асяроддзя выканання. Яны падзяляюць выдаўца, брэнды, шаблон наймення Web3 і ў некаторых выпадках ідэнтычны шаблон README з актыўнымі варыянтамі. Мы разглядаем іх як частку адной кампаніі і рэкамендавалі прэвентыўнае выдаленне, але мы пакуль не пералічылі іх трыгеры асяроддзя выканання цалкам. Спынены транш можа быць плацдармам, які аператар рэзервуе для будучай змены — той жа шаблон, які PhantomBot выкарыстаў у сярэдзіне мая, калі аператар абмяняў выкрадальніка ўліковых дадзеных на рэкрута ботнета, не перапублікуючы назву пакета.
Храналогія і каталог
Пакет з самай ранняй датай у кампаніі мае найменшую версію: праверка-ключа-ланцуга:0.2.3 і defi-env-аўдытар:0.3.2 выглядаюць як раннія эксперыментальныя кроплі. Да таго часу, як выдавец дасягнуў памочнік канфігурацыі труфеляў:1.7.0 і foundry-deploy-helper:1.8.96, інфляцыя версій была наўмыснай — выбар лічбаў, якія чытаюцца як паходжанне ўсталяванага пакета. Ні адзін з 22 не мае папярэдняй легітымнай гісторыі пад гэтым імем на npm.
Поўны каталог, згрупаваны па варыянтах:
### Варыянт А — зборшчык уліковых дадзеных (пасля ўсталёўкі + MCP-time scanner.js, MD5 b461106e47a1f5966159cd6e92541505)
| пакет | версія | Пазначана ў стужках выяўлення |
|---|---|---|
mnemonic-safety-check | 0.5.2 | ды |
solidity-deploy-guard | 0.4.4 | ды |
web3-secrets-detector | 1.2.6 | ды |
eth-wallet-sentinel | 1.0.9 | ды |
deployment-key-auditor | 0.7.3 | ды |
defi-threat-scanner | 2.1.2 | ды |
crypto-credential-scanner | 2.0.2 | ды |
chain-key-validator | 0.2.3 | ды |
### Варыянт Б — Тунэль Pinggy https.get → exec (да гэтай справаздачы бачнасць стужкі выяўлення не была выяўлена)
| пакет | версія | Пасляўсталёўны густ |
|---|---|---|
truffle-config-helper | 1.7.0 | https.get → exec(stdout) |
chainlink-price-feed-aggregator | 1.1.12 | https.get telemetry call |
ganache-cli-provider | 1.7.51 | https.get telemetry call |
solana-pda-helper | 1.0.46 | https.get telemetry call |
foundry-deploy-helper | 1.8.96 | curl + chmod +x /tmp/.node-cache & |
### Варыянт C — спячы, падазроны трыгер падчас выканання (да гэтай справаздачы бачнасць патоку выяўлення адсутнічала)
| пакет | версія | нататкі |
|---|---|---|
wallet-backup-verifier | 1.0.1 | |
env-security-scanner | 1.6.0 | |
foundy-toolkit | 1.5.79 | тыпаскват ліцейнага абсталявання |
solna-web3 | 1.5.98 | тыпаскват саланы |
wallet-security-checker | 1.0.3 | |
hardhat-gas-profiler-plugin | 1.7.86 | |
ethers-multicall-utils | 1.3.15 | |
defi-env-auditor | 0.3.2 | |
etherjs-utils | 1.0.39 |
Слупкі «Варыянт А» і «Варыянт Б» выбраны не выпадковым чынам. Усе назвы «Варыянт А» прадаюцца як інструменты аўдыту бяспекі — «праверка бяспекі», «абарона разгортвання», «дэтэктар сакрэтаў», «вартавы кашалька», «аўдытар ключоў», «сканер пагроз», «сканер уліковых дадзеных», «валідатар ключоў ланцуга». Яны прызначаны для распрацоўшчыка або агента штучнага інтэлекту, які шукае інструмент для ацэнкі бяспекі праекта Web3. Назвы Variant-B прадаюцца як памочнікі па зборцы і разгортванні для той жа экасістэмы Web3 — Truffle, Chainlink, Ganache, Solana PDA tooling, Foundry. Падзел адлюстроўвае звычайную ментальную мадэль распрацоўшчыка Web3: «этап аўдыту» супраць «этапу разгортвання». Якую б фазу вы ні выбралі, выдавец падрыхтаваў для яе пастку.
Паказчыкі кампрамісу
Сетка і файлы
| МАК | варыянт | Мэта |
|---|---|---|
https://ddjidd564.github.io/defi-security-best-practices/config.json | A | Дынамічны рэзалютар вэбхукаў, размешчаны праз старонкі GitHub. |
https://webhook.site/8d334534-1c63-4f4f-a0d7-95c446c8b233 | A | Бягучая канчатковая кропка калектара эксфільтрацыі, таксама ўбудаваная ў якасці рэзервовага варыянта. |
rqnyz-2605-7280-7--2000-c51.run.pinggy-free.link/npm/-/binary/telemetry | B | Тунэль Pinggy, які выкарыстоўваецца для размеркавання аддаленых бінарных карысных нагрузак. |
scanner.js MD5 b461106e47a1f5966159cd6e92541505 | A | Ідэнтычная карысная нагрузка сканера паўторна выкарыстоўваецца ва ўсіх 8 пакетах Variant-A. |
/tmp/.node-cache | B | Адлучаны выканальны файл, скінуты foundry-deploy-helper:1.8.96. |
Выдавец
- імя карыстальніка npm: ddjidd5640
- электронная пошта: 1623682356@qq.com (неправерана)
- Адрас электроннай пошты і SCM праверка: няма
- Пакеты пад рахункам: 22, усе пералічаны ў каталогу вышэй
- Самая ранняя бачная актыўнасць: праверка-ключа-ланцуга:0.2.3 (Варыянт А)
- Апошняя бачная актыўнасць: chain-key-validator:0.2.3 і crypto-credential-scanner:2.0.2 (абодва на працягу 24 гадзін да гэтага паведамлення)
Фірмовыя франты (выкарыстоўваюцца ў аўтар / README / фальшывая GH.org)
- «Гільдыя крыптабяспекі» — падтрымліваецца пустой арганізацыяй GitHub крыптасечная гільдыя
- «Web3 Audit Collective» — падтрымліваецца пустой арганізацыяй GitHub w3аўдыт
- «Альянс бяспекі DeFi» — падтрымліваецца пустой арганізацыяй GitHub дэфі-бяспека
- Спасылка на ўліковы запіс GH ddjidd564 — хост дынамічнага вэбхука config.json
Паводніцкая
- вузел -e пасляўсталёўка чытае любы з .ssh, .этэрыум, .біткойн, .env, .bash_гісторыя, Гісторыя_zsh, .git-паўнамоцтвы з .slice(0, 200) і аб'яднанне з | сепаратары — гэта амаль унікальны адбітак пальца для варыянта А.
- Імпартуе ./сканер.js з пакета, які рэгіструецца як MCP сервер з інструментамі пад назвай уцечка_паўнавартасных_даных або падобныя дзеясловы «аўдыту бяспекі» з'яўляюцца пацверджаннем варыянта А.
- Пацвярджэнне тыпу Variant-B незалежна ад абгорткі з дапамогай функцыі пастаянай усталёўкі вузла з параметрам -e, якое атрымлівае дадзеныя з любога хаста *.run.pinggy-free.link і перадае адказ у child_process.exec.
Атрыбуцыя і матывацыя
На стале дастаткова інфармацыі для частковага адбітка пальца выдаўца, але далёка не для сапраўднай ідэнтыфікацыі. Электронная пошта. 1623682356@qq.com — гэта паштовы адрас QQ — бясплатная вэб-пошта Tencent, папулярная ў мацерыковым Кітаі, — а лічбавая лакальная частка — гэта ідэнтыфікатар карыстальніка QQ; мы разглядаем гэта толькі як мяккі сігнал, бо адрасы ў фармаце QQ рэгіструюцца трывіяльна. Уліковы запіс npm не мае двухфактарнага раскрыцця, не мае праверанага адраса электроннай пошты, не мае праверанага SCM спасылка. Трыяда брэндаў «Гільдыя крыптабяспекі» / «Калектыў аўдыту Web3» / «Альянс бяспекі DeFi» сфабрыкавана масава — ніводная з трох не існуе па-за гэтай кампаніяй, — а арганізацыі GitHub, якія яе падтрымліваюць, — гэта пустыя абалонкі, створаныя для запаўнення спасылак на старонку npm.
Варта назваць дзве заканамернасці, бо яны праяўляюцца ў сумежных кампаніях. Першая — папярэдняя фабрыкацыя брэнда як сацыяльны доказаператар не выбіраў існуючыя назвы праектаў з памылкай; яны стварылі цэлую гісторыю даверу з нуля, ведаючы, што Зборка агента са штучным інтэлектам pipeline альбо паспешлівы распрацоўшчык, які скануе старонку npm, будзе супастаўляць шаблоны па запыце «здаецца арганізацыяй бяспекі», а не «ёсць арганізацыяй бяспекі». Гэта той самы падыход, пра які папярэджвала літаратура па нядбайнасці — пакеты, настроеныя пад назву, якую дала б LLM вынаходзіць калі яго просяць інструмент бяспекі Web3, дастаткова добра апрацаваны, каб LLM не правяраў яго двойчы. Прысяданні на кукішках — гэта нядаўна прыдуманы тэрмін для шкоднасных пакетаў, назвы якіх супадаюць з запаўняльнікамі, якія ўзнікаюць у LLM, калі аўтарытэтны пакет не існуе; гэтая кампанія з'яўляецца больш агрэсіўным стрыечным тыпам, дзе аператар таксама фабрыкуе арганізацыю, да якой належыць запаўняльнік.
Другі ўзор — Актывацыя па часе MCP. Тым часам сканер.js запускаецца, усталёўка завершана, і распрацоўшчык рухаецца далей. Трыгерам з'яўляецца выклік інструмента агентам штучнага інтэлекту — уцечка_паўнавартасных_даных, у выпадку з варыянтам А — што агент абавязкова зробіць, бо менавіта па гэтай прычыне яму быў дадзены пакет. Шкодная праца адбываецца падчас добра частка працоўнага працэсу, калі распрацоўшчык, хутчэй за ўсё, будзе назіраць за тым, як яго памочнік са штучным інтэлектам паспяхова выконвае заданне, якое ён прасіў. Гэта невялікі зрух у паводзінах у параўнанні са старым «выключэннем на ная ўстаноўка«шаблон», і ён акуратна абыходзіць пясочніцу падчас усталёўкі.
Мы не называем імёны зламысніка. Сігналы (электронная пошта QQ, адзін акаўнт, аднадзённы пакет рассылкі з 22 пакетаў, два паралельныя стэкі C2) аднолькава супадаюць з адным пастаянным аператарам, невялікай камандай або адной з каманд па рассылцы пакетаў, якія былі бачныя ў тэлеметрыі npm на працягу 2025–2026 гадоў. Што мы можа Можна сказаць, што ў гэтага аператара ёсць выразна акрэсленая пераважная экасістэма (Ethereum + Solana + інструменты Foundry/Hardhat), выразна акрэсленая ахвяра (распрацоўшчыкі Web3 і агенты штучнага інтэлекту, якія працуюць над праектамі Web3) і выразна акрэсленая пераважная мадэль персістентнасці (трыгер часу выканання MCP плюс асобны бінарны рэзервовы файл).
Уплыў, тэндэнцыі і што могуць зрабіць абаронцы
Наша ранняе папярэджанне pipeline злоўлены 8 з 22 пакетаў за ўвесь час кампаніі — шэсць падчас першапачатковай праверкі і яшчэ два, якія прыбылі пазней у той жа дзень падчас праходжання кластарызацыі кампаніі. Астатнія 14 пакетаў былі даступныя на npm некалькі дзён. не з'яўляючыся ні ў адной з стужак выяўлення, якія мы кантралюемі на момант напісання гэтага тэксту застаюцца ўсталёўваемымі. Гэты прабел мае значэнне, таму што:
- Варыянт А не працуе падчас усталёўкіЧытанне dotfile адбываецца, але масавае выключэнне запускаецца толькі тады, калі агент штучнага інтэлекту выклікае інструменты MCP пакета. standard пясочніца пасля ўстаноўкі ўбачыць вузел -e блок і вырашыць, што ён малы і, відавочна, інертны.
- Варыянт B — гэта аднарадковы. Класіфікатар шкоднасных праграм не мае з чаго вучыцца — ні абфускацыі, ні закадаванай карыснай нагрузкі, ні падазронага дамена. Тунэль Pinggy — гэта легітымны сэрвіс для распрацоўшчыкаў. Адзінае падазронае — гэта тое, што «памочнік па канфігурацыі» наогул павінен тэлефанаваць дадому.
- Варыянт C выглядае цалкам чыстым. У яго няма ўсталёўкі hooksЗыходзячы з любога статычнага сігналу, гэта нармальна.
Кароткі кантрольны спіс абаронцаў для эры MCP-Tool
Тры канкрэтныя дзеянні, якія б захапілі гэту кампанію раней:
- Вага — гэта выдавец, а не пакет. Дваццаць дзве пасылкі пад адным гадавым акаўнтам электроннай пошты QQ без SCM Праверка — гэта больш яркі сігнал, чым любая функцыя для кожнага пакета. Наш працоўны працэс ранняга папярэджання выявіў першыя пакеты, таму што адбітак пальца выдаўца вылучаўся — рэкамендаваў бал рэпутацыі выдаўца, які можа паменшыць любы з класіфікатараў бяспечных, непераканаўчых або шкоднасных праграм для кожнага пакета.
- Лічыць дынамічныя канфігурацыйныя індырэкцыі шкоднаснымі, пакуль не будзе даказана адваротнае. Пакет, які вырашае сваю выходную канцавую кропку падчас выканання з дакумента трэцяга боку (GitHub Pages, GitHub Gist, Pastebin, аб'ект S3, любое іншае месца), не мае законных падстаў рабіць гэта для тэлеметрыі. Сапраўдныя канцавыя кропкі тэлеметрыі жорстка закадзіраваны і дакументаваны.
- Аўдыт пакетаў MCP-сервера з дапамогай іх рэкламуемай паверхні інструмента. Пакеты Variant-A рэкламуюць інструменты пад назвай
search_leaked_credentials,validate_chain_key,deploy_safeі падобныя дзеясловы «аўдыту». Хост MCP, які прадстаўляе інструмент, апісанне якога сцвярджае, што ён скануе каталогі праектаў на наяўнасць уліковых дадзеных, павінен патрабаваць відавочнай згоды аператара, перш чым агент выкліча яго на рэальнай базе кода. Сэнс MCP заключаецца ў тым, што цыкл агента не мае магчымасці даведацца, ціsearch_leaked_credentialsз'яўляецца пошукам паўнамоцтваў або з'яўляецца эксфільтратарам паўнамоцтваў.
Для распрацоўшчыкаў, якія, магчыма, ужо ўсталявалі адзін з 22 пакетаў: выкажам здагадку, што любы ключ у адкрытым тэксце ~/.ssh, ~/.ethereum, ~/.біткойн, ~/.solana, ~/.envабо ~/.git-пасведчанні узламаны, перарабіць усе ўліковыя дадзеныя, імя якіх адпавядае спісу фільтраў зменных асяроддзя вышэй, і ў Linux/macOS праверыць наяўнасць выканальнага файла па адрасе /tmp/.node-cache (і любы асірацелы працэс, запушчаны з яго). Паўторная ўсталёўка легітымнай версіі ўвасабленага інструментарыя (ліцейня, труфель, каска, ганаші г.д.) не выдаляе выдалены двайковы файл.
Найгорш за ўсё старэе транш Variant-C, які не працуе. Дзевяць пакетаў з чыстым профілем усталёўкі і ўсталяваным выдаўцом — гэта менавіта той інвентар, які аператар трымае ў рэзерве. Калі яны пазней выбухнуць — як гэта зрабіў PhantomBot, калі яго axois-utils пераўпакоўка ператварылася з крадзяжу ўліковых дадзеных у рэкрута ботнета — яны падарвуцца супраць любога карыстальніка рэестра, які замацаваў пакет Variant-C паміж сённяшнім днём і выдаленнем. Замацаванне шкоднаснага пакета па версіі не абараняе вас ад выдаўца, які кантралюе кожную версію.
Спасылкі
- [старонка выдаўца npm для ddjidd5640](https://www.npmjs.com/~ddjidd5640) — 22 пакеты, якія зараз пералічаны пад гэтым акаўнтам. Аўтарытэтная крыніца каталога на момант напісання.
- [старонка пакета npm для сканер крыпта-паўнамоцтваў](https://www.npmjs.com/package/crypto-credential-scanner) — прыклад артэфакта Variant-A; тут бачныя README, гісторыя версій і спасылкі на аўтараў.





