Shai hulud - ແພັກເກດ npm - ການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະໜອງ

Shai-Hulud: ຄຳອະທິບາຍກ່ຽວກັບໜອນແພັກເກດ npm

TL; DR

ໃນວັນທີ 14 ກັນຍາ 2025, ນັກຄົ້ນຄວ້າໄດ້ລະບຸວ່າ ໄຊ ຮຸດ, ໜອນທີ່ສືບພັນຕົວເອງໄດ້ຊ່ອນຢູ່ພາຍໃນ npm ແພັກເກັດ, ປ່ຽນການອັບເດດການເພິ່ງພາອາໄສປົກກະຕິໃຫ້ກາຍເປັນຂະໜາດເຕັມ ການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະຫນອງພົບຄັ້ງທຳອິດໃນ @ctrl/tinycolor ແພັກເກດໂດຍ Daniel dos Santos Pereira, Shai-Hulud ເກັບກຳຄວາມລັບ, ກັ່ນຕອງພວກມັນຜ່ານບ່ອນເກັບມ້ຽນ ແລະ ຂະບວນການເຮັດວຽກຂອງ GitHub, ແລະ ເຜີຍແຜ່ຕົວເອງຄືນໃໝ່ໃນທົ່ວທະບຽນໂດຍໃຊ້ຂໍ້ມູນປະຈຳຕົວທີ່ຖືກລັກ. ພາຍໃນສອງສາມມື້, ຈຳນວນແພັກເກດທີ່ຕິດເຊື້ອໄດ້ເພີ່ມຂຶ້ນຈາກຫຼາຍສິບເປັນຫຼາຍຮ້ອຍ, ເຊິ່ງຢືນຢັນວ່າ ໄຊຮູລຸດ ບໍ່ແມ່ນພຽງແຕ່ໂທຣຈັນອີກໂຕໜຶ່ງເທົ່ານັ້ນ ແຕ່ເປັນໜອນທີ່ຖືກອອກແບບມາເພື່ອແຜ່ລາມໂດຍອັດຕະໂນມັດໄປທົ່ວລະບົບນິເວດ npm.

ຜົນກະທົບ: ນັກພັດທະນາ ຫຼື ຜູ້ແລ່ນ CI ໃດໆທີ່ຕິດຕັ້ງແພັກເກດ npm ສາທາລະນະແມ່ນມີຄວາມສ່ຽງ.

ການກະ ທຳ ທັນທີ: ບລັອກລຸ້ນທີ່ຮູ້ຈັກ, ປ່ຽນໄປໃຊ້ການຕິດຕັ້ງແບບ lockfile ເທົ່ານັ້ນ, ໝຸນ npm ແລະໂທເຄັນ GitHub, ກວດສອບຂັ້ນຕອນການເຮັດວຽກ, ແລະຕິດຕາມຕົວຊີ້ວັດການປະນີປະນອມ (IoCs).

ເກີດ​ຫຍັງ​ຂຶ້ນ?

ໄດ້ ການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະໜອງ Shai-Hulud ໃນແພັກເກດ npm ເປັນໜຶ່ງໃນເຫດການທີ່ກໍ່ກວນທີ່ສຸດໃນຄວາມຊົງຈຳທີ່ຜ່ານມາ. ບໍ່ເໝືອນກັບໂທຣຈັນທີ່ໂດດດ່ຽວ, ໜອນໂຕນີ້ປະສົມ ການລັກຂໍ້ມູນປະຈຳຕົວ, ການກັ່ນຕອງອັດຕະໂນມັດ, ແລະ ການສຳເນົາຂໍ້ມູນດ້ວຍຕົນເອງດັ່ງນັ້ນ, ໄລຍະເວລາການຕິດເຊື້ອຈຶ່ງຫຼຸດລົງຈາກຫຼາຍອາທິດເຫຼືອພຽງແຕ່ຊົ່ວໂມງເທົ່ານັ້ນ.

ສຳລັບທີມ DevOps, ບົດຮຽນແມ່ນຈະແຈ້ງ: ຖ້າທຸກໆການຕິດຕັ້ງສາມາດປະຕິບັດລະຫັດໄດ້, ຫຼັງຈາກນັ້ນທຸກໆການອັບເດດການເພິ່ງພາອາໄສແມ່ນຈຸດທີ່ອາດເກີດຂຶ້ນ.

ເວັກເຕີເບື້ອງຕົ້ນທີ່ເປັນໄປໄດ້ ແລະ ຂໍ້ມູນປະຈຳຕົວເປົ້າໝາຍ

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

  • ໄຟລ໌ການຕັ້ງຄ່າ npm ຄື .npmrc, ມັກຈະມີໂທເຄັນການເຜີຍແຜ່.
  • ຕົວແປສະພາບແວດລ້ອມ ແລະ ການຕັ້ງຄ່າດ້ວຍ GitHub PAT ແລະ CI/CD ຄວາມລັບ.
  • ຈຸດສິ້ນສຸດເມຕາເດຕາຂອງຄລາວ (AWS, GCP, Azure) ໃຫ້ຂໍ້ມູນປະຈຳຕົວທີ່ມີອາຍຸສັ້ນສຳລັບການເຄື່ອນໄຫວທາງຂ້າງ.

ດັ່ງນັ້ນ, ການລັກຂໍ້ມູນປະຈຳຕົວຈຶ່ງກາຍເປັນຈຸດເລີ່ມຕົ້ນ. ດ້ວຍໂທເຄັນ npm ທີ່ຖືກຕ້ອງ ແລະ ຄວາມລັບ GitHub, Shai-Hulud ສາມາດສຳເນົາດ້ວຍຕົນເອງໃນຫຼາຍໆແພັກເກດ ແລະ ບ່ອນເກັບຂໍ້ມູນໂດຍບໍ່ຕ້ອງໃຊ້ຄວາມພະຍາຍາມຂອງມະນຸດເພີ່ມເຕີມ.

ຜົນກະທົບດ້ານການບໍລິຫານຂອງການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະໜອງ Shai-Hulud

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

  • ການລັກເອົາໂທເຄັນເຜີຍແຜ່ npm ແລະຄວາມລັບ GitHub.
  • ເຜີຍແຜ່ຕົວມັນເອງຄືນໃໝ່ໃນແພັກເກດ npm ອື່ນໆ.
  • ການເພີ່ມຂະບວນການເຮັດວຽກ GitHub Actions ທີ່ເປັນອັນຕະລາຍເພື່ອຄວາມຍືນຍົງ.

ຜູ້ທີ່ໄດ້ຮັບຜົນກະທົບ:

ທີມໃດກໍຕາມທີ່ຕິດຕັ້ງແພັກເກດ npm ສາທາລະນະຈະຖືກເປີດເຜີຍ. ຍິ່ງໄປກວ່ານັ້ນ, ນັກພັດທະນາທີ່ມີໂທເຄັນ npm ຫຼື GitHub ທີ່ເກັບໄວ້ໃນແຄດຈະມີຄວາມສ່ຽງສູງ. ຜູ້ແລ່ນ CI ທີ່ໃຊ້ຄວາມລັບທີ່ມີຂອບເຂດກວ້າງຂວາງກໍ່ມີຄວາມສ່ຽງເຊັ່ນກັນ.

ຄວາມສ່ຽງດ້ານທຸລະກິດ

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

ວິທີການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະໜອງ Shai-Hulud ເຮັດວຽກໃນແພັກເກດ npm

ຈຸດປະສົງຂອງຜູ້ໂຈມຕີ ແລະ ແຮງຈູງໃຈ

ແຄມເປນນີ້ເພີ່ມປະສິດທິພາບສຳລັບສາມຢ່າງຄື:

  • ຈຸດປະສົງ ທຳ ອິດແມ່ນ ລັກຂະໂມຍຂໍ້ມູນປະຈຳຕົວໃນລະດັບໃຫຍ່ ຈາກແລັບທັອບນັກພັດທະນາ ແລະ ຜູ້ແລ່ນ CI. ນີ້ລວມມີໂທເຄັນເຜີຍແຜ່ npm, ໂທເຄັນ GitHub, ແລະ ຂໍ້ມູນປະຈຳຕົວຄລາວ. ໃນຄວາມເປັນຈິງ, ການວິເຄາະຫຼາຍໆຄັ້ງຢືນຢັນການເກັບກ່ຽວຄວາມລັບຢ່າງເປັນລະບົບ, ເຊັ່ນ: ການແລ່ນ TruffleHog ແລະ ການສອບຖາມຈຸດສິ້ນສຸດ metadata ຄລາວ.
  • ຈຸດປະສົງທີສອງແມ່ນເພື່ອ ແຜ່ຂະຫຍາຍໂດຍອັດຕະໂນມັດ ໂດຍການລະເມີດສິດທິໃນການເຜີຍແຜ່ຂອງຜູ້ຮັກສາທີ່ຖືກລະເມີດ. ດັ່ງນັ້ນ, ຈຸດຢືນອັນໜຶ່ງຈຶ່ງຂະຫຍາຍໄປສູ່ຫຼາຍອັນຢ່າງໄວວາ, ເນື່ອງຈາກແພັກເກດອື່ນໆລຸ້ນໃໝ່ທີ່ຕິດເຊື້ອຈະປາກົດຂຶ້ນໂດຍບໍ່ຕ້ອງໃຊ້ຄວາມພະຍາຍາມຂອງມະນຸດເພີ່ມເຕີມ.
  • ຈຸດປະສົງທີສາມແມ່ນເພື່ອ ຍັງຄົງຢູ່ ແລະ ກັ່ນຕອງອອກໄດ້ຢ່າງໜ້າເຊື່ອຖື ຜ່ານໂຄງສ້າງພື້ນຖານ GitHub. ຜູ້ໂຈມຕີສ້າງ repo ສາທາລະນະທີ່ມີຊື່ວ່າ "Shai-Hulud" ດ້ວຍຖານສອງເທົ່າ64 data.json, ແລະນອກຈາກນັ້ນພວກເຂົາຍັງສ້າງຂະບວນການເຮັດວຽກທີ່ຈັດລຳດັບ ${{ toJSON(secrets) }} ແລະໂພສມັນໃສ່ webhook ຄົງທີ່.

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

ພາຍໃນພາລະຂອງ Shai-Hulud: bundle.js ໃນແພັກເກດ npm

ເຮືອ Shai-Hulud ເປັນ ໃຫຍ່, ລວມເຂົ້າກັບ Webpack ແລະ ຫຍໍ້ລົງຢ່າງຫຼວງຫຼາຍ ໄຟລ໌ JavaScript (bundle.js, ປະມານ 3–3.7 MB) ທີ່ປະຕິບັດຈາກ ຕິດຕັ້ງຫຼັງ ຕິດ ຊຸດ .jsonດັ່ງນັ້ນ, ທຸກໆການຕິດຕັ້ງຈະກະຕຸ້ນ payload ໂດຍອັດຕະໂນມັດ. ການອອກແບບນີ້ເຊື່ອງຕົວລະບຸ, ບີບອັດການໄຫຼຂອງການຄວບຄຸມ, ແລະຍູ້ເຫດຜົນທັງໝົດເຂົ້າໄປໃນສິ່ງປະດິດດຽວທີ່ປະຕິບັດໃນລະຫວ່າງການຕິດຕັ້ງ. ນັກວິເຄາະຢືນຢັນຢ່າງຕໍ່ເນື່ອງກ່ຽວກັບການລວມ Webpack, ຂະໜາດໄຟລ໌ທີ່ຜິດປົກກະຕິ, ແລະການປະຕິບັດໃນເວລາຕິດຕັ້ງ.

ລັກສະນະການປິດບັງ ແລະ ລັກສະນະຕ້ານການວິເຄາະທີ່ທ່ານຈະເຫັນໃນຕົວຢ່າງ:

  • ກຣາຟໂມດູນທີ່ຫຍໍ້ລົງ ດ້ວຍ ID ໂມດູນຕົວເລກ, ຄຳເຫັນທີ່ຫາຍາກ, ແລະ ການໄຫຼວຽນການຄວບຄຸມທີ່ຮາບພຽງ. ຍິ່ງໄປກວ່ານັ້ນ, ໂຄງສ້າງນີ້ເຮັດໃຫ້ການທົບທວນດ້ວຍຕົນເອງຍາກຫຼາຍ.
  • ການເຊື່ອງສະຕຣິງ ຜ່ານຊັ້ນ base64 ແລະຕົວຊ່ວຍໃນການກໍ່ສ້າງ. ຕົວຢ່າງ, ການເຂົ້າລະຫັດ ແລະ ການຖອດລະຫັດ base64 ຊ້ຳໆມັກຈະປາກົດຢູ່ອ້ອມຮອບຂັ້ນຕອນການກັ່ນຕອງ.
  • ການສົ່ງຕໍ່ແບບໄດນາມິກ ໂດຍຜ່ານການ ການປະເມີນ-ຮູບແບບແບບ ແລະ ສ້າງຂຶ້ນໂດຍຟັງຊັນຕ່າງໆ, ດັ່ງນັ້ນຈຶ່ງເຮັດໃຫ້ລະຫັດສາມາດປ່ຽນພຶດຕິກຳໃນເວລາແລ່ນ.
  • ການກັ່ນຕອງລະບົບປະຕິບັດການ ມັກການປະຕິບັດ Linux ແລະ macOS ໂດຍສະເພາະໃນຜູ້ແລ່ນ CI ແລະແລັບທັອບນັກພັດທະນາ.

ຈາກມຸມມອງທີ່ເປັນປະໂຫຍດ, ມັດດັ່ງກ່າວແມ່ນແບບໂມດູນ. ການຂຽນອະທິບາຍໂມດູນສຳລັບການຄົ້ນພົບລະບົບປະຕິບັດການ, ການສະແກນລະບົບໄຟລ໌ ແລະ git secret, ການເຂົ້າເຖິງ cloud SDK, ການດຳເນີນງານ GitHub API, ແລະເຄື່ອງຈັກຂະຫຍາຍພັນທີ່ແກ້ໄຂແພັກເກດອື່ນໆທີ່ຜູ້ຮັກສາເປັນເຈົ້າຂອງ. ໃນຄວາມເປັນຈິງ, StepSecurity ແລະ ReversingLabs ທັງສອງເນັ້ນໜ້າທີ່ທີ່ອັບເດດແພັກເກດໂດຍອັດຕະໂນມັດດ້ວຍ hook ທີ່ເປັນອັນຕະລາຍ.

ການປະຕິບັດເວລາຕິດຕັ້ງໃນ Shai-Hulud: ວິທີທີ່ແພັກເກດ npm ກະຕຸ້ນໜອນ

ການໂຈມຕີເລີ່ມຕົ້ນເມື່ອ ຫຼັງການຕິດຕັ້ງຈະເຮັດວຽກໂຫນດ bundle.js. ໃນຈຸດນີ້, ສະຄຣິບຈະເລີ່ມຕົ້ນ ແລະ ຖອດລະຫັດສະຖານະການເຮັດວຽກໃນໜ່ວຍຄວາມຈຳ, ເຊິ່ງເປັນການກຳນົດຂັ້ນຕອນສຳລັບການເຮັດວຽກຢ່າງເຕັມທີ່ຂອງໜອນ.

ການຄົ້ນພົບ ແລະ ການເກັບກ່ຽວ

  • payload ຈະຖິ້ມ process.env ແລະສະແກນໄຟລ໌ທ້ອງຖິ່ນເພື່ອຊອກຫາຄວາມລັບ entropy ສູງ ແລະຄຳນຳໜ້າໂທເຄັນ. ນອກຈາກນັ້ນ, ມັນຍັງຂະຫຍາຍການຄຸ້ມຄອງໂດຍການໃຊ້ TruffleHog.
  • ມັນສອບຖາມຈຸດສິ້ນສຸດ metadata ຂອງຄລາວເພື່ອເກັບກຳຂໍ້ມູນປະຈຳຕົວທີ່ມີອາຍຸສັ້ນ. ຕົວ​ຢ່າງ, ໂທຫາ 169.254.169.254 ໃນ AWS ຫຼື metadata.google.internal ໃນ GCP ມັກຈະປາກົດຢູ່ໃນເຈົ້າພາບທີ່ຕິດເຊື້ອ.
  • ຜົນສະທ້ອນ, ຂໍ້ມູນປະຈຳຕົວໃດໆທີ່ພົບເຫັນຈະສາມາດໃຊ້ໄດ້ທັນທີເພື່ອເຜີຍແຜ່ແພັກເກດ npm ໃໝ່ ຫຼື ຊຸກຍູ້ຂະບວນການເຮັດວຽກຂອງ GitHub.

Exfiltration

  • ໜອນສ້າງ repo GitHub ໃໝ່ທີ່ມີຊື່ວ່າ ໄຊ ຮຸດ ແລະຂຽນລະຫັດ double base64 data.json ດ້ວຍລາຍລະອຽດຂອງແພລດຟອມ, ສະພາບແວດລ້ອມ dumps, ແລະຄວາມລັບ. ດັ່ງທີ່ເຫັນໄດ້, ພຶດຕິກຳທີ່ດັງນີ້ແມ່ນງ່າຍທີ່ຈະສັງເກດເຫັນຖ້າຜູ້ປ້ອງກັນຮູ້ວ່າຈະຊອກຫາຢູ່ໃສ.
  • ມັນຍັງສ້າງຂະບວນການເຮັດວຽກຂອງ GitHub Actions, ເຊິ່ງມັກຈະຢູ່ໃນສາຂາທີ່ມີຊື່ວ່າ shai-hulud, ທີ່ຈັດລຳດັບ ${{ toJSON(secrets) }} ແລະໂພສຂໍ້ມູນໄປໃສ່ webhook ຄົງທີ່. ຍິ່ງໄປກວ່ານັ້ນ, ຂັ້ນຕອນການເຮັດວຽກນີ້ຈະຍັງຄົງຢູ່ຈົນກວ່າຈະມີຄົນລຶບມັນອອກຢ່າງຫ້າວຫັນ.

ການຂະຫຍາຍພັນ

  • ດ້ວຍໂທເຄັນ npm ໃດໆທີ່ຄົ້ນພົບ, payload ຈະລະບຸແພັກເກດທັງໝົດທີ່ເປັນເຈົ້າຂອງໂດຍຜູ້ຮັກສາທີ່ຖືກໂຈມຕີ. ຫຼັງຈາກນັ້ນ, ມັນຈະດຶງເອົາແຕ່ລະ tarball, ໃສ່ bundle.js ແລະລາຍການຫຼັງການຕິດຕັ້ງ, ແລະເຜີຍແຜ່ແພັກເກດຄືນໃໝ່.
  • ດ້ວຍເຫດນີ້, ກ່ອງທີ່ຕິດເຊື້ອຫຼາຍສິບກ່ອງສາມາດປາກົດພາຍໃນເວລາບໍ່ເທົ່າໃດຊົ່ວໂມງ, ເຊິ່ງເຮັດໃຫ້ລັດສະໝີການລະເບີດທົ່ວລະບົບນິເວດເພີ່ມຂຶ້ນເປັນຈຳນວນຫຼາຍ.

ຄວາມຍືນຍົງ ແລະ ການສຳຜັດ

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

ບັນທຶກການກວດຈັບກະແຈ
ການນໍາໃຊ້ທີ່ຜິດປົກກະຕິນີ້ ${{ toJSON(secrets) }} ໃນຂັ້ນຕອນການເຮັດວຽກ Actions ແມ່ນຫາຍາກ. ເພາະສະນັ້ນ, ທີມງານຄວນປະຕິບັດຕໍ່ມັນເປັນຕົວຊີ້ບອກສັນຍານສູງໃນລະຫວ່າງການລ່າສັດ.

ຮູບແບບການເຮັດວຽກທີ່ໄດ້ຮັບການອະນາໄມທີ່ທ່ານຄວນຊອກຫາ

ການນໍາໃຊ້ທີ່ຜິດປົກກະຕິນີ້ to JSON (ຄວາມລັບ) ໃນ Actions ເປັນຕົວຊີ້ບອກສັນຍານສູງໃນເຫດການນີ້.

ລະຫັດປອມການຂະຫຍາຍພັນລະດັບສູງ (ປອດໄພ, ອະທິບາຍ)

ນັກວິເຄາະໄດ້ສັງເກດເຫັນວົງຈອນນີ້ໃນລະດັບໃຫຍ່, ເຊິ່ງອະທິບາຍເຖິງການກະໂດດຢ່າງໄວວາຈາກຫຼາຍສິບຊຸດຫາຫຼາຍຮ້ອຍຊຸດທີ່ຕິດເຊື້ອ.

ເປັນຫຍັງອັນນີ້ຈຶ່ງເປັນໜອນໃນລະບົບນິເວດຊຸດ

ໜອນແມ່ນມັນແວທີ່ແຜ່ລາມດ້ວຍຕົວມັນເອງໂດຍບໍ່ຕ້ອງມີຂັ້ນຕອນການປະຕິບັດການດ້ວຍຕົນເອງໃນທຸກຂັ້ນຕອນ. ໃນລະບົບປະຕິບັດການ, ໜອນມັກຈະໃຊ້ປະໂຫຍດຈາກຊ່ອງໂຫວ່ເຄືອຂ່າຍເພື່ອຍ້າຍຈາກເຄື່ອງໜຶ່ງໄປຫາອີກເຄື່ອງໜຶ່ງ. ໃນທາງກົງກັນຂ້າມ, Shai-Hulud ເຮັດວຽກພາຍໃນ registry npm. ເສັ້ນທາງທີ່ມີປະສິດທິພາບຂອງມັນແມ່ນຜ່ານ ການນຳໃຊ້ຂໍ້ມູນປະຈຳຕົວຄືນໃໝ່.

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

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

ແບບຟອມ "ວິທີການເຮັດວຽກ"

ເພື່ອສະຫຼຸບວົງຈອນຊີວິດຂອງ Shai-Hulud, ນີ້ແມ່ນຂໍ້ບົກຜ່ອງcisແບ່ງຂັ້ນຕອນຫຼັກຂອງມັນອອກເປັນຂັ້ນຕອນຕ່າງໆຄື:

  • ຊຸດທີ່ມີ ຕິດຕັ້ງຫຼັງ ຖືກຕິດຕັ້ງແລ້ວ, ແລະ bundle.js ປະຕິບັດ.
  • payload ຖິ້ມຕົວແປສະພາບແວດລ້ອມ, ສະແກນໄຟລ໌ ແລະ ປະຫວັດ git, ເຮັດວຽກ ເຫັດທຣັບເຟີນຮອກ, ແລະສອບຖາມການບໍລິການ metadata ໃນຄລາວ. ດັ່ງນັ້ນ, ຄວາມລັບໃດໆທີ່ພົບເຫັນຈະເປັນປະໂຫຍດທັນທີ.
  • ການກັ່ນກອງເກີດຂຶ້ນໃນສອງວິທີຄື: ທຳອິດ, ໂດຍການສ້າງ repo ສາທາລະນະທີ່ມີຊື່ວ່າ ໄຊ ຮຸດ ດ້ວຍການເຂົ້າລະຫັດສອງຖານ 64 data.jsonອັນທີສອງ, ໂດຍການສ້າງຂະບວນການເຮັດວຽກ GitHub Actions ທີ່ໂພສ ${{ toJSON(secrets) }} ໄປຫາ webhook.
  • ໂດຍການໃຊ້ໂທເຄັນ npm ທີ່ຖືກລັກ, ໜອນຈະເຜີຍແຜ່ແພັກເກດອື່ນໆທັງໝົດທີ່ເປັນເຈົ້າຂອງໂດຍຜູ້ຮັກສາທີ່ຖືກໂຈມຕີດ້ວຍ hook ທີ່ເປັນອັນຕະລາຍດຽວກັນ. ດ້ວຍວິທີນີ້, ການຕິດເຊື້ອຈະແຜ່ຂະຫຍາຍຢ່າງໄວວາ.
  • ສຸດທ້າຍ, ຜູ້ໂຈມຕີມີຄວາມລັບຫຼາຍຂຶ້ນ, ມີແພັກເກດຫຼາຍຂຶ້ນເພື່ອແຜ່ລາມ, ແລະ ຄວາມທົນທານ ພາຍໃນບັນຊີ ແລະ ບ່ອນເກັບມ້ຽນ GitHub.

ວິທີການຫຼີກລ່ຽງການໂຈມຕີປະເພດນີ້, ໃນທາງປະຕິບັດ

Shai-Hulud ເປັນສັນຍານເຕືອນ. ໜອນທີ່ລັກໂທເຄັນ ແລະ ເຜີຍແຜ່ຕົວມັນເອງຄືນໃໝ່ບໍ່ແມ່ນຄວາມສ່ຽງໃນອະນາຄົດ, ມັນມີຊີວິດຢູ່ໃນ ລະບົບນິເວດຂອງແພັກເກດ npm ໃນມື້ນີ້. ເພື່ອປ້ອງກັນປະເພດນີ້ ການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະຫນອງ, ທີມງານຕ້ອງການການຄວບຄຸມທີ່ສາມາດຕັ້ງໂປຣແກຣມໄດ້, ອັດຕະໂນມັດ, ແລະ ບັງຄັບໃຊ້ໂດຍກົງໃນ CI/CD pipelineເຫຼົ່ານີ້ແມ່ນການປ້ອງກັນດຽວກັນທີ່ທ່ານສາມາດຈັດຕັ້ງປະຕິບັດໄດ້ແລ້ວ ຊີເກນີ.

ຢຸດສິ່ງປະດິດທີ່ບໍ່ດີຢູ່ປະຕູຮົ້ວ

ທ່ານຄວນສະແກນແພັກເກດ npm ແລະ tarballs ກ່ອນທີ່ພວກມັນຈະໄປເຖິງນັກພັດທະນາ ຫຼື ວຽກ CI. bundle.js ໄຟລ໌, ການຕິດຕັ້ງຫຼັງການຕິດຕັ້ງທີ່ໜ້າສົງໄສ hooks, ແລະເຄື່ອງໝາຍການເຮັດໃຫ້ມົວໝອງທັງໝົດເປັນສັນຍານເຕືອນໄພໃນຕອນຕົ້ນ. ຍິ່ງໄປກວ່ານັ້ນ, ການບັງຄັບໃຊ້ໄລຍະເວລາຜ່ອນຄາຍ ແລະ ລຸ້ນທີ່ຖືກປັກໝຸດໄວ້ໃນ pipelineປ້ອງກັນການປ່ອຍອອກມາໃໝ່ທີ່ບໍ່ໄດ້ຮັບການກວດສອບຈາກການຖືກບໍລິໂພກໂດຍອັດຕະໂນມັດ.

ແຂງ CI/CD ໂດຍຄ່າເລີ່ມຕົ້ນ

Guardrails in CI/CD ແມ່ນມີຄວາມຈຳເປັນ. ພວກເຂົາປະຕິເສດການລວມ ຫຼື ການຕິດຕັ້ງທີ່ແນະນຳສະຄຣິບ ຫຼື ໄບນາຣີໃໝ່. ໃນເວລາດຽວກັນ, ພວກເຂົາບລັອກຂັ້ນຕອນການເຮັດວຽກທີ່ເຮັດໃຫ້ຄວາມລັບເປັນລຳດັບ ຫຼື ພະຍາຍາມໂພສພາຍນອກ. ທີມງານຄວນຮຽກຮ້ອງໃຫ້ມີການຕິດຕັ້ງແບບ lockfile ເທົ່ານັ້ນ (npm ci) ໃນທົ່ວທຸກ pipelineດັ່ງນັ້ນຊຸດການເພິ່ງພາອາໄສຈຶ່ງສາມາດຜະລິດຊ້ຳໄດ້ ແລະ ປອດໄພ.

ຫຼຸດລັດສະໝີການລະເບີດຂອງໂທເຄັນ

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

ເບິ່ງພຶດຕິກຳຂອງໜອນແຕ່ຫົວທີ

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

ແກ້ໄຂຢ່າງວ່ອງໄວໂດຍບໍ່ທຳລາຍການສ້າງ

ຄວາມໄວ ແລະ ຄວາມປອດໄພຕ້ອງໄປຄຽງຄູ່ກັນ. ອັດຕະໂນມັດ pull requests ສາມາດທົດແທນແພັກເກດ npm ທີ່ຖືກລະເມີດດ້ວຍລຸ້ນທີ່ໄດ້ຮັບການກວດສອບແລ້ວ. ນອກຈາກນັ້ນ, ການຟື້ນຟູ ແລະ ການຂູດຮີດ ການວິເຄາະຮັບປະກັນວ່າການຍົກລະດັບຍັງຄົງມີໜ້ອຍທີ່ສຸດ ແລະ ໝັ້ນຄົງ. ສຸດທ້າຍ, ສ້າງ CI runners ທີ່ໄດ້ຮັບຜົນກະທົບຄືນໃໝ່ຈາກຮູບພາບທີ່ສະອາດເມື່ອການສຳຜັດໄດ້ຮັບການຢືນຢັນແລ້ວ, ປ້ອງກັນບໍ່ໃຫ້ການໂຈມຕີແຜ່ລາມໄປຕື່ມອີກ.

ຕົວຊີ້ວັດຂອງການປະນີປະນອມ (IoCs)

ເມື່ອວິເຄາະ Shai-Hulud, ທີມຄວນສັງເກດເບິ່ງທັງສອງຢ່າງ IoC ຄົງທີ່ ໃນໄຟລ໌ ແລະ IoC ດ້ານພຶດຕິກຳ in pipelines. ສັນຍານເຫຼົ່ານີ້ຮ່ວມກັນຊ່ວຍກວດຫາການຕິດເຊື້ອໄດ້ໄວ ແລະ ຕອບສະໜອງກ່ອນທີ່ແມ່ທ້ອງຈະແຜ່ລາມໄປຕື່ມອີກ.

IoC ຄົງທີ່

ສັງເກດເຫັນການຈັບຄູ່ຂອງ SHA-256 digests ຕໍ່ໄປນີ້ bundle.js ຕົວຢ່າງ:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

ນອກຈາກນັ້ນ, ໃຫ້ສັງເກດເບິ່ງຮູບແບບທີ່ເກີດຂຶ້ນຊ້ຳໆເຫຼົ່ານີ້:

  • A bundle.js ຢູ່ທີ່ຮາກແພັກເກດ.
  • "postinstall": "node bundle.js" ພາຍໃນ package.json.
  • ບ່ອນເກັບມ້ຽນທີ່ມີຊື່ ໄຊ ຮຸດ.
  • ຂັ້ນຕອນການເຮັດວຽກ GitHub ປະກອບມີ ${{ toJSON(secrets) }}.

IoCs ດ້ານພຶດຕິກຳ

ນອກເໜືອໄປຈາກລາຍເຊັນໄຟລ໌, ກິດຈະກຳຂອງໜອນຈະເປີດເຜີຍຕົວມັນເອງຜ່ານພຶດຕິກຳ. ຕົວຢ່າງ:

  • ການລະເບີດຂອງ npm ຢ່າງກະທັນຫັນເຜີຍແຜ່ເຫດການຈາກຜູ້ຮັກສາຄົນໜຶ່ງ.
  • ຂັ້ນຕອນການເຮັດວຽກໃໝ່ທີ່ສົ່ງຂໍ້ມູນໄປຫາຈຸດສິ້ນສຸດພາຍນອກ.
  • ຄຳຮ້ອງຂໍ POST ຂາອອກຖືກກະຕຸ້ນຈາກຜູ້ແລ່ນ CI.
  • repos ສາທາລະນະທີ່ສ້າງຂຶ້ນບໍ່ດົນມານີ້ດ້ວຍ blobs ທີ່ຖືກເຂົ້າລະຫັດ.

ການລ່າສັດໄວ

ສະຫຼຸບ: ບົດຮຽນຈາກ Shai-Hulud

ໄດ້ ການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະໜອງ Shai-Hulud ໃນຊຸດ npm ສະແດງໃຫ້ເຫັນວ່າລະບົບຕ່ອງໂສ້ການສະໜອງຊອບແວໃນປະຈຸບັນນີ້ມີຄວາມບອບບາງແນວໃດ. ໜອນໂຕນີ້ເຮັດຫຼາຍກວ່າການເພີ່ມລະຫັດທີ່ເປັນອັນຕະລາຍ. ມັນໄດ້ລັກໂທເຄັນ, ສົ່ງຂໍ້ມູນອອກ, ແລະຫຼັງຈາກນັ້ນເຜີຍແຜ່ຕົວມັນເອງຄືນໃໝ່ໂດຍອັດຕະໂນມັດ. ເນື່ອງຈາກສິ່ງນີ້, ການໂຈມຕີຈຶ່ງແຜ່ລາມອອກໄປພາຍໃນຊົ່ວໂມງແທນທີ່ຈະເປັນອາທິດ.

ສຳລັບນັກພັດທະນາ ແລະ ທີມງານ DevOps, ບົດຮຽນແມ່ນຈະແຈ້ງ:

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

ດັ່ງນັ້ນ, ການຢຸດການໂຈມຕີເຊັ່ນ Shai-Hulud ຕ້ອງການການຄວບຄຸມທີ່ເປັນອັດຕະໂນມັດ ແລະ ງ່າຍຕໍ່ການບັງຄັບໃຊ້. ທີມງານຄວນສະແກນແພັກເກດ npm ກ່ອນການຕິດຕັ້ງ, ໃຊ້ການສ້າງໄຟລ໌ລັອກ, ກວດຫາກິດຈະກຳການເຜີຍແຜ່ທີ່ແປກປະຫຼາດ, ແລະ ຮັກສາໂທເຄັນໃຫ້ສັ້ນລົງ. ຂັ້ນຕອນເຫຼົ່ານີ້ບໍ່ແມ່ນທາງເລືອກອີກຕໍ່ໄປ. ແທນທີ່ຈະ, ພວກມັນແມ່ນພື້ນຖານຂອງຄວາມຢືດຢຸ່ນໃນຍຸກສະໄໝໃໝ່. pipelines.

ທີ່ Xygeni, ພວກເຮົາເຫັນວ່າການໂຈມຕີລະບົບຕ່ອງໂສ້ການສະໜອງ Shai-Hulud ເປັນຄຳເຕືອນສຳລັບລະບົບນິເວດແຫຼ່ງເປີດທັງໝົດ. ວິທີການທີ່ຍືນຍົງໃນການກ້າວໄປຂ້າງໜ້າແມ່ນການນຳເອົາຄວາມປອດໄພຂອງລະບົບຕ່ອງໂສ້ການສະໜອງເຂົ້າມາໃນຂະບວນການພັດທະນາໂດຍກົງ, ໃນຈຸດທີ່ລະຫັດ, ແພັກເກດ npm, ແລະ pipelineເຊື່ອມຕໍ່.

ຂ້າງລຸ່ມນີ້ແມ່ນລາຍຊື່ເຕັມຂອງແພັກເກດ npm ແລະລຸ້ນຕ່າງໆທີ່ລາຍງານວ່າຖືກໂຈມຕີໃນ Shai-Hulud. ໃຊ້ມັນເພື່ອກວດສອບໄຟລ໌ລັອກ, ທະບຽນ ແລະ CI ຂອງທ່ານ pipelines ສຳລັບການສຳຜັດ.

ລາຍຊື່ແພັກເກດທີ່ຖືກລະເມີດ

📦 ຕົວຢ່າງຂອງແພັກເກດ npm ທີ່ຖືກທຳລາຍ

ຊື່ແພັກເກດ Version Publish Date
ເຄື່ອງຈັກກົດລະບຽບ json-simplified0.2.12025-09-14T17:58:51.203Z
ນັກບິນອາກາດ0.8.82025-09-14T18:35:07.600Z
ກຣາຟຄວາມຮູ້ mcp1.2.12025-09-14T18:35:09.494Z
ຜ້າຫົ່ມບິນ0.3.12025-09-14T18:35:09.521Z
ປະຕູໂດດ0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/ໜ້າຕ່າງການໂທກັບຄືນ1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/ຕາຕະລາງປະຕິກິລິຍາ6.10.202025-09-14T20:37:08.597Z
@hestjs/ສາທິດ0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/ການກວດສອບຄວາມຖືກຕ້ອງ0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ ເບິ່ງລາຍຊື່ເຕັມຂອງແພັກເກດທີ່ຖືກລະເມີດ
ຊື່ແພັກເກດ Version Publish Date
ເຄື່ອງຈັກກົດລະບຽບ json-simplified0.2.12025-09-14T17:58:51.203Z
ນັກບິນອາກາດ0.8.82025-09-14T18:35:07.600Z
ກຣາຟຄວາມຮູ້ mcp1.2.12025-09-14T18:35:09.494Z
ຜ້າຫົ່ມບິນ0.3.12025-09-14T18:35:09.521Z
ປະຕູໂດດ0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/ໜ້າຕ່າງການໂທກັບຄືນ1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/ຕາຕະລາງປະຕິກິລິຍາ6.10.202025-09-14T20:37:08.597Z
@hestjs/ສາທິດ0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/ການກວດສອບຄວາມຖືກຕ້ອງ0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/scalar0.1.72025-09-14T20:45:56.386Z
ອັບໂຫຼດໄຟລ໌ ng27.0.32025-09-15T02:44:29.555Z
ຕົວຈັດການການແຈ້ງເຕືອນຂອງຕົວເກັບປະຈຸ0.0.22025-09-15T04:54:48.431Z
ຕົວເກັບປະຈຸ-ປລັກອິນ-ໂວນຈ໌1.0.22025-09-15T04:54:48.501Z
ຕົວເກັບປະຈຸ-ປລັກອິນ-ແອັບສຸຂະພາບ0.0.22025-09-15T04:54:48.704Z
ການອະນຸຍາດຂອງຕົວເກັບປະຈຸໄຟຟ້າ ແລະ ຕົວເກັບປະຈຸໄຟຟ້າ0.0.42025-09-15T04:54:48.753Z
ຊຸດໂທ voip1.0.22025-09-15T04:54:49.223Z
ຕົວເກັບປະຈຸ-ປລັກອິນ-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/common2.0.222025-09-15T05:21:15.411Z
@art-ws/config-eslint2.0.42025-09-15T05:21:17.199Z
ngx-ws1.1.52025-09-15T05:21:17.514Z
@art-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/http-server2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@ສິລະປະ-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-context2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
ເຄື່ອງມືວິເຄາະອົງປະກອບຊອບແວ SCA
ຈັດລຳດັບຄວາມສຳຄັນ, ແກ້ໄຂ ແລະ ຮັກສາຄວາມສ່ຽງດ້ານຊອບແວຂອງທ່ານໃຫ້ປອດໄພ
ຮັບບັນຊີຟຣີຂອງທ່ານ.
ບໍ່ຕ້ອງມີບັດເຄດິດ.

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

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