Мэдээ

npm экосистемийг хамарсан томоохон халдлага: 400 гаруй багц Shai-Hulud хорхойд өртөж, хөгжүүлэгчдийн токенууд алдагдлаа

TOGTOKHTOGTOKH·2026 оны наймдугаар сарын 6·4 үзсэн·
npm экосистемийг хамарсан томоохон халдлага: 400 гаруй багц Shai-Hulud хорхойд өртөж, хөгжүүлэгчдийн токенууд алдагдлаа

Шинэ аюул: JavaScript экосистемд тохиолдсон томоохон цохилт

Node.js болон JavaScript-ийн нээлттэй эхийн (open-source) экосистем ахин томоохон нийлүүлэлтийн сүлжээний (supply chain) халдлагад өртлөө. Аюулгүй байдлын шинжээчдийн (Microsoft Threat Intelligence, Wiz Research, Socket, Aikido Security) мэдээлснээр ChainDrop буюу Mini Shai-Hulud хэмээх өөрөө өөрийгөө хувилж тардаг аюултай хорхойн (worm) халдлага идэвхтэй явагдаж байна.

Уг халдлага нь долоо хоног бүр 500 саяас дээш (500M+) таталттай keyv, cacheable, cacheable-request, flat-cache, file-entry-cache, cache-manager зэрэг JavaScript-ийн суурь багцуудыг хамарчээ. Эдгээр сангууд нь ихэвчлэн архитектурын гүнзгий хамааралтай (transitive dependencies) байдаг тул хөгжүүлэгч өөрөө шууд суулгаагүй ч eslint эсвэл төрөл бүрийн caching сангаар дамжин таны төсөлд орж ирэх аюултай юм.

ChainDrop болон Mini Shai-Hulud хорхой хэрхэн ажилладаг вэ?

Халдлага эхэндээ "Jaredwray" хэмээх npm болон GitHub зангилаа хариуцагчийн (maintainer) бүртгэл алдагдсанаар эхэлсэн байна. Халдагчид уг бүртгэлийг ашиглан хортой кодуудыг keyv болон cacheable сангуудад шахаж, npm дээр шинэ хувилбар болгон нийтэлжээ.

Хортой кодын техникийн ажиллах дараалал:

  1. npm Lifecycle Hook: Хөгжүүлэгч эсвэл CI/CD сервер npm install тушаал ажиллуулах үед сан бүрэн суулгагдаж дуусахаас өмнө npm-ийн preinstall тохиргоогоор дамжуулан хортой скриптийг (setup.mjs) автоматаар ажиллуулдаг.
  2. Standalone Runtime ба Polymorphic Payload: Уг скрипт нь бие даасан Bun runtime-ийг арын горимд татаж авснаар код нууцлах (polymorphic base91 obfuscation) аргаар хамгаалагдсан Math_Symbol.js гэсэн хоёр дахь шатны хортой кодоор (payload) системд нэвтэрдэг.
  3. Хөгжүүлэгчийн нууц мэдээллийг шүүрэх: Хорхой нь TruffleHog хэрэгслийн зарчмаар хөгжүүлэгчийн төхөөрөмж болон CI/CD орчноос (GitHub Actions, GitLab CI) дараах мэдээллүүдийг хайдаг:
    • Cloud credentials: AWS, GCP, Azure-ийн access key болон secret-үүд.
    • CI/CD & Secret Stores: HashiCorp Vault токенууд, Kubernetes Service Account токенууд.
    • OAuth & OIDC: GitHub Actions OIDC токенууд болон GitHub PAT токенууд.
    • Developer Tokens: npm publishing токенууд болон локал орчны .env файлууд.

Хулгайлсан мэдээллийг шифрлэн HTTPS аюулгүй суваг болон хакеруудын хяналтад байх C2 (Command & Control) сервер рүү илгээдэг. Хэрэв үндсэн C2 сервер блоклогдвол хорхой нь Ethereum smart contract ашиглан динамикаар шинэ C2 домейныг уншиж авдаг байна.

Өөрөө өөрийгөө хувилан халдаах (Self-Propagation) механизм

Уг халдлагын хамгийн аюултай хэсэг нь хорхой өөрөө өөрийгөө дахин түгээдэг тасралтгүй автомат сүлжээ үүсгэсэн явдал юм.

Хорхой хөгжүүлэгчийн системээс npm publishing токенийг олмогц:

  • Тухайн токеноор нийтэлж болох бүх npm багцуудыг жагсаан шүүдэг.
  • Хамгийн сүүлийн хувилбарын tarball-ийг татаж аваад, дотор нь хортой скрипт болон preinstall hook-ийг автоматаар суулгана.
  • Хувилбарын дугаарыг (patch version) нэгээр нэмэгдүүлэн, npm-ийн OIDC Trusted Publishing ашиглан автоматаар дахин нийтэлдэг (republish).

Энэхүү механизмын улмаас сүүлийн хоёр хоногт 400 гаруй бие даасан npm багц болон 2200 гаруй хортой хувилбар сүлжээнд таран халдварлажээ. Мөн хулгайлсан GitHub токеноор хөгжүүлэгчийн Claude болон Visual Studio Code-ийн тохиргооны файлууд руу кодууд шахаж, IDE болон репозиторийн түвшинд persistence (байнгын ажиллагаа) үүсгэж байсан нь тогтоогдсон.

Хөгжүүлэгчид болон DevOps инженерүүд юу хийх ёстой вэ?

Хэрэв та Node.js, TypeScript, React, Next.js, Express эсвэл бусад JavaScript технологийн стекийг ашигладаг бол дараах хамгаалалтын алхмуудыг нэн даруй авна уу:

1. Хамаарлын файлуудаа (Lockfiles) аудиталж шалгах

package-lock.json, pnpm-lock.yaml, эсвэл yarn.lock файлуудаасаа keyv, cacheable, flat-cache, file-entry-cache, cache-manager сангуудын хувилбаруудыг шалгана уу. npx socket audit эсвэл Aikido, Snyk зэрэг аюулгүй байдлын сканеруудаар төслийн хамаарлыг шалгуулж, сэжигтэй хувилбаруудыг хасах хэрэгтэй.

2. Lifecycle скриптүүдийг хязгаарлах

Тодорхойгүй сангуудын скриптийг систем дээр автоматаар ажиллуулахгүй байхын тулд дараах тохиргоог хийнэ үү:

# npm дээр lifecycle скриптүүдийг глобалаар хориглох
npm config set ignore-scripts true

# Төсөл дээр суулгац хийхдээ скриптийг алгасах
npm install --ignore-scripts

Мөн .npmrc файлд strict-allow-scripts=true тохиргоог нэмснээр зөвшөөрөгдөөгүй скриптүүд ажиллахаас сэргийлнэ.

3. Токен ба Нууц үгүүдийг хүчингүй болгох (Revoke & Rotate)

Сэжигтэй багц суулгасан эсвэл CI/CD орчин өртсөн байж болзошгүй бол:

  • npm болон GitHub PAT (Personal Access Token) токенуудыг нэн даруй цуцалж (revoke), шинэчил.
  • Системд ашиглагдаж байсан AWS/GCP/Azure access key, Kubernetes Service Account токенууд болон Vault secrets-ийг нэн даруй шинэчлэх (rotate) шаардлагатай.

4. CI/CD болон Workstation аудитыг хийх

CI/CD runner дээр ignore-scripts эсвэл strict allow-list бодлого ажиллуулж, build хийх орчныг хязгаарлагдмал санбокс (sandboxed execution environment) дотор ажиллуулах нь нийлүүлэлтийн сүлжээний халдлагаас хамгаалах хамгийн үр дүнтэй арга юм.

Дүгнэлт

ChainDrop / Mini Shai-Hulud халдлага нь орчин үеийн программ хөгжүүлэлтэд package manager болон CI/CD автоматаар ажилладаг экосистем хэр эмзэг болохыг санууллаа. Хөгжүүлэгчдийн баг заавал Zero-Trust зарчмыг зөвхөн продакшн системд бус, өөрсдийн local development environment болон CI/CD pipelines дээр нэвтрүүлэх хэрэгтэй байна.

Эх сурвалж: Microsoft Security Blog, SC Media, Wiz Research, Developer Tech News.

Сэтгэгдэл

Ачаалж байна...