เวิร์ม Shai-Hulud ติดเชื้อแพ็กเกจ npm: เจาะลึกเหตุการณ์ห่วงโซ่อุปทาน

การปรับปรุงครั้งล่าสุด: 09/25/2025
  • แพ็กเกจ npm หลายร้อยรายการถูกบุกรุกโดยเวิร์มที่จำลองตัวเองได้ซึ่งมีชื่อว่า Shai-Hulud โดย GitHub ได้ลบเวอร์ชันที่ปนเปื้อนออกไปมากกว่า 500 เวอร์ชัน
  • มัลแวร์ขโมยความลับ (โทเค็น npm, GitHub PAT, คีย์คลาวด์) และเผยแพร่แพ็คเกจที่ติดไวรัสอีกครั้งโดยใช้สิทธิ์การเผยแพร่ของเหยื่อ
  • หลักฐานชี้ให้เห็นถึงการกำหนดเป้าหมายไปที่ Linux และ macOS การละเมิด TruffleHog และเวิร์กโฟลว์ GitHub Actions ที่ขโมยข้อมูล
  • ขั้นตอนทันที: หมุนเวียนโทเค็น ตรวจสอบการอ้างอิงและที่เก็บข้อมูล GitHub บังคับใช้ MFA/2FA และค้นหา IoC รวมถึง bundle.js และการรับส่งข้อมูล webhook.site

การโจมตีหนอน npm ของ Shai-Hulud

สิ่งที่เริ่มต้นจากความกังวลเกี่ยวกับซัพพลายเชนอีกครั้งในโลกของ JavaScript ได้ลุกลามกลายเป็นเหตุการณ์ใหญ่ที่ส่งผลกระทบต่อระบบนิเวศ npm รายงานจากหลายแหล่งยืนยันสายพันธุ์มัลแวร์ที่แพร่กระจายตัวเอง ติดตามเป็น Shai-Huludที่ทำให้ข้อมูลประจำตัวของนักพัฒนาถูกละเมิด เปิดเผยโค้ด และเผยแพร่แพ็กเกจที่ปนเปื้อนซ้ำเพื่อให้การติดเชื้อยังคงดำเนินต่อไป

แม้ว่าจำนวนจะแตกต่างกันไปตามแหล่งที่มา แต่ความเห็นโดยทั่วไปก็ชัดเจน: เรากำลังจัดการกับ ปล่อยสารพิษหลายร้อยครั้งรวมถึงไลบรารีที่ใช้งานกันอย่างแพร่หลายซึ่งมีการดาวน์โหลดหลายล้านครั้งต่อสัปดาห์ GitHub ได้ลบเวอร์ชันที่ถูกบุกรุกออกไปกว่า 500 เวอร์ชันเพื่อหยุดยั้งการแพร่กระจาย และทีมรักษาความปลอดภัยทั่วโลกกำลังเรียกร้องให้นักพัฒนาหมุนเวียนข้อมูลประจำตัวและตรวจสอบในคลังข้อมูลและไปป์ไลน์ของตนเพื่อหาเบาะแสของการบุกรุก

เกิดอะไรขึ้นและเหตุใดจึงสำคัญ

การสอบสวนบ่งชี้ว่าการดำเนินการน่าจะเริ่มต้นด้วย การเก็บเกี่ยวข้อมูลประจำตัวล่อลวงการปลอมแปลง npmกระตุ้นให้ผู้ดูแลระบบ "อัปเดต" การตั้งค่า MFA เมื่อเข้าถึงได้ ผู้ก่อภัยคุกคามจึงปล่อยเวิร์มที่ทำงานหลังการติดตั้ง ค้นหาความลับ และเผยแพร่บิลด์ที่ติดไวรัสซ้ำภายใต้ชื่อเหยื่อ ทำให้ผู้ดูแลระบบที่เชื่อถือได้กลายเป็นตัวขยายสัญญาณการโจมตี

ไชฮูลูดผสมผสานแนวคิดอันตรายสองประการเข้าด้วยกัน: การแพร่กระจายอัตโนมัติและการขโมยความลับมันใช้โทเค็น npm ที่ขโมยมาเพื่อเผยแพร่แพ็กเกจเวอร์ชันใหม่ และใช้ประโยชน์จากโทเค็น GitHub และคีย์คลาวด์ (AWS, GCP, Azure) เพื่อย้ายข้อมูลในแนวขวางและขโมยข้อมูล การจับคู่นี้ช่วยเพิ่มรัศมีการโจมตี ทำให้การประนีประนอมสามารถแพร่กระจายไปยังผู้ใช้ปลายทางจำนวนนับไม่ถ้วนได้

เป้าหมายดูเหมือนจะเอนเอียงไปทางระบบที่คล้ายกับ Unix การวิเคราะห์ระบุว่าส่วนใหญ่ ตรรกะที่เป็นอันตรายดำเนินการบน Linux และ macOSโดยอ้างอิงจากการตรวจสอบสภาพแวดล้อม แม้ว่าขั้นตอนการค้นพบความลับ (โดยเฉพาะอย่างยิ่งกับ TruffleHog) อาจเกิดขึ้นได้กว้างกว่าก็ตาม การมุ่งเน้นดังกล่าวทำให้ขอบเขตของเวิร์มแคบลง แต่ยังคงเปิดเผยเครื่องของนักพัฒนาจำนวนมาก

แพ็กเกจจากองค์กรที่มีชื่อเสียงหลายแห่งได้รับผลกระทบพร้อมกับโมดูลชุมชนยอดนิยม ในตัวอย่างที่โด่งดังตัวอย่างหนึ่ง @ctrl/tinycolor แพ็กเกจที่ถูกดาวน์โหลดหลายล้านครั้งต่อสัปดาห์ถูกดึงเข้ามาเกี่ยวข้อง แสดงให้เห็นว่าการติดเชื้อสามารถฝังลึกลงไปในกราฟการพึ่งพาได้อย่างไร

ภาพประกอบการประนีประนอมแพ็กเกจ npm

วิธีการทำงานของเวิร์ม (รายละเอียดทางเทคนิค)

เพย์โหลดหลักจะจัดส่งเป็นไฟล์ JavaScript ขนาดใหญ่ โดยทั่วไปจะเรียกว่า Bundle.js (มากกว่า 3 MB ในตัวอย่างที่สังเกต) รันผ่าน postinstall hook ที่เพิ่มลงใน package.json ซึ่งหมายความว่าโค้ดอันตรายจะทำงานโดยอัตโนมัติทันทีหลังจากที่ผู้ใช้ติดตั้งแพ็กเกจจาก npm

ภายใน bundle.js มีโมดูลสำหรับ การโต้ตอบ API ของ GitHub, SDK บนคลาวด์ (AWS/GCP), ตัวช่วยเครือข่าย และรูทีนสำหรับรัน TruffleHog เพื่อค้นหาความลับ สคริปต์จะตรวจสอบระบบปฏิบัติการ ค้นหาโทเค็น npm และตรวจสอบโทเค็น GitHub ที่ถูกต้อง หากไม่พบ ก็จะทำการ bail มิฉะนั้นจะเริ่มการ exfiltration และการทำสำเนาข้อมูล

ความแปลกประหลาดที่น่าสังเกต: แพ็คเกจที่ติดไวรัสบางตัวมีไฟล์เก็บถาวรที่ชื่อว่า แพ็คเกจ.tar แทนที่จะใช้รูปแบบการตั้งชื่อตามปกติ ฟังก์ชันบอกสถานะที่ช่วยให้นักวิจัยสามารถระบุอาร์ทิแฟกต์ที่ถูกบุกรุกได้ นักวิเคราะห์ยังสังเกตเห็นตัวแปรที่ทำหน้าที่เป็น preinstall hook อีกด้วย หนึ่งในกรณีแรกๆ ที่อ้างถึงคือ ngx‑bootstrap 18.1.4ซึ่งอาจใช้เป็นฐานปฏิบัติการเบื้องต้นในการแพร่กระจาย

เมื่อทำงานแล้ว มัลแวร์จะระบุแพ็คเกจที่นักพัฒนาดาวน์โหลดมากที่สุดผ่าน API การค้นหา npm แกะไฟล์ tarball แต่ละไฟล์ออก, ดรอป bundle.js, แทรกคำสั่งหลังการติดตั้ง, เพิ่มเวอร์ชัน และเผยแพร่ซ้ำไปยัง npm ด้วยโทเค็นของเหยื่อ การกระทำนี้ทำให้พอร์ตโฟลิโอของนักพัฒนากลายเป็นช่องทางสำหรับการติดเชื้อเพิ่มเติม

การเปิดเผยความลับและเวิร์กโฟลว์ของ GitHub

สำหรับการรวบรวมข้อมูลประจำตัว Shai-Hulud จะสแกนหาโทเค็น npm, โทเค็นการเข้าถึงส่วนบุคคลของ GitHub และ คีย์ API คลาวด์ (AWS, GCP, Azure) จากนั้นจึงสร้างที่เก็บข้อมูลสาธารณะของ GitHub ชื่อ 'Shai‑Hulud' ไว้ใต้บัญชีของเหยื่อ โดยคอมมิตไฟล์ข้อมูล (เช่น data.json) ที่มีข้อมูลลับที่ถูกขโมยมา ส่งผลให้ข้อมูลลับเหล่านี้ถูกเปิดเผยต่อสาธารณะ

ในขณะเดียวกัน นักวิจัยได้สังเกตเห็นมุม GitHub Actions ที่มีเล่ห์เหลี่ยม: เวิร์ม สร้างสาขาชื่อ 'shai‑hulud' ข้ามคลังข้อมูลที่เข้าถึงได้และส่งไฟล์เวิร์กโฟลว์ (shai-hulud-workflow.yml) เมื่อถูกเรียกใช้งาน เวิร์กโฟลว์จะรวบรวมข้อมูลลับและส่งไปยังโครงสร้างพื้นฐานของผู้โจมตี บางครั้งหลังจาก การเข้ารหัส Base64 สองครั้ง เพื่อทำให้เนื้อหาระหว่างการขนส่งไม่ชัดเจน

ยังมีหลักฐานของสคริปต์การโยกย้ายที่ โคลนที่เก็บข้อมูลส่วนตัว/ภายใน จากองค์กรที่เหยื่อสามารถเข้าถึงได้ โดยโฮสต์ไว้ในบัญชีผู้ใช้อีกครั้งในรูปแบบมิเรอร์สาธารณะ เป้าหมายดูเหมือนจะเป็นการขโมยซอร์สโค้ดจากโครงการส่วนตัวโดยอัตโนมัติ ซึ่งจะเพิ่มแรงกดดันให้กับองค์กรที่ได้รับผลกระทบ

รายงานหลายฉบับระบุถึงสิ่งประดิษฐ์ของความช่วยเหลือ AI ภายในสคริปต์ bash (ความคิดเห็นและแม้แต่อิโมจิ) ซึ่งชี้ให้เห็นว่าผู้โจมตีอาจใช้ LLM เพื่อเร่งการพัฒนา ของส่วนประกอบการทำงานอัตโนมัติของมัลแวร์

ขอบเขตและแพ็คเกจที่น่าสนใจ

การลบข้อมูลแบบประสานงาน GitHub ถูกลบออก เวอร์ชันที่ถูกบุกรุกมากกว่า 500 รายการ เพื่อหยุดการแพร่กระจายของเวิร์ม แม้ว่าจำนวนที่แท้จริงจะยังคงเปลี่ยนแปลงไป แต่รายการนี้ยังครอบคลุมระบบนิเวศและองค์กรจำนวนมาก โดยมีผลกระทบต่อนักพัฒนาที่อัปเดตในช่วงเวลาที่ใช้งานอยู่

ในบรรดาแพ็คเกจและเนมสเปซที่ถูกอ้างถึงบ่อยครั้ง: @ctrl/tinycolor (ดาวน์โหลดหลายล้านครั้งต่อสัปดาห์) หลาย @crowdstrike/* ส่วนประกอบ (เช่น commitlint และไลบรารี UI) และโมดูลชุมชนมากมายรวมถึง ngx‑bootstrap, ng2‑อัปโหลดไฟล์, ngx-toastrและอื่นๆ CrowdStrike ระบุว่าแพลตฟอร์มหลักของตนไม่ได้รับผลกระทบและ กุญแจถูกหมุนอย่างรวดเร็ว หลังจากตรวจพบรายการอันตรายในทะเบียนสาธารณะ

  • ตัวอย่างที่เชื่อมโยงกับคลื่น: @ctrl/tinycolor; @crowdstrike/commitlint; @crowdstrike/foundry‑js; @crowdstrike/glide‑core; ngx‑bootstrap; ng2‑file‑upload; ngx‑toastr; @nativescript‑community/*; @teselagen/*; @things‑factory/*; และอื่นๆ
  • นักวิจัยยังได้เห็น เวอร์ชันที่เป็นอันตรายหลายเวอร์ชันต่อแพ็คเกจ ในบางกรณี อาจเกิดจากเวิร์มแพร่กระจายไปยังบัญชีผู้ดูแลระบบหลายบัญชีภายในโครงการเดียวกัน

การตอบสนองของแพลตฟอร์มและการเปลี่ยนแปลงด้านความปลอดภัย

การดำเนินการทันทีของ GitHub รวมถึง การล้างแพ็คเกจที่ทราบว่ามีปัญหา จาก npm และการบล็อกการอัปโหลดที่ตรงกับตัวบ่งชี้การประนีประนอม (IoC) บริษัทกำลังดำเนินการควบคุมการเผยแพร่ที่เข้มงวดยิ่งขึ้น ได้แก่ 2FA บังคับสำหรับการเผยแพร่ในท้องถิ่น โทเค็นแบบละเอียดที่มีอายุสั้นลง (เช่น เจ็ดวัน) และการนำ สำนักพิมพ์ที่เชื่อถือได้ เพื่อลดการพึ่งพาความลับที่เก็บไว้เป็นเวลานาน

การเปลี่ยนแปลงที่กำลังจะเกิดขึ้นจะทำให้โทเค็นคลาสสิกแบบเก่าและ 2FA ที่ใช้ TOTP กลายเป็นสิ่งที่ล้าสมัยสำหรับการเผยแพร่ ค่าเริ่มต้นไม่อนุญาตให้เผยแพร่โทเค็นและขยายผู้ให้บริการสำหรับ Trusted Publishing GitHub ได้ส่งสัญญาณถึงการเปิดตัวอย่างค่อยเป็นค่อยไปพร้อมเอกสารประกอบและคู่มือการโยกย้าย โดยตระหนักว่าเวิร์กโฟลว์บางส่วนจำเป็นต้องมีการปรับปรุง

ทีมข่าวกรองภัยคุกคามและการตอบสนองต่อเหตุการณ์ทั่วทั้งอุตสาหกรรม (รวมถึง Unit 42, Kaspersky, Trend Micro และอื่นๆ) ได้ ออกคำแนะนำและการตรวจจับ ในขณะที่แบ่งปัน IoC กับเพื่อนและพันธมิตรเพื่อเร่งการอัปเดตการป้องกัน

วิธีลดความเสี่ยงในตอนนี้

ดำเนินการอย่างรวดเร็วภายใต้สมมติฐานที่ว่าเครื่องนักพัฒนาใดๆ ที่ติดตั้งแพ็กเกจ npm เมื่อเร็ว ๆ นี้อาจมีข้อมูลลับรั่วไหล สิ่งสำคัญคือ มีการละเมิดข้อมูลประจำตัวหยุดการคงอยู่ และกำจัดการอ้างอิงที่ปนเปื้อนจากเชนการสร้าง

  • หมุนเวียนโทเค็น npm, คีย์ GitHub PATs/SSH และข้อมูลประจำตัวคลาวด์ (AWS/GCP/Azure) ทันที พิจารณาว่าความลับทั้งหมดที่อยู่ในโฮสต์นักพัฒนาถูกบุกรุก
  • ตรวจสอบการอ้างอิงผ่าน package‑lock.json/yarn.lock ลบหรือปักหมุดออกจากเวอร์ชันที่ทราบว่าถูกบุกรุก ติดตั้งใหม่จากแหล่งที่สะอาด
  • บังคับใช้ MFA/2FA ทั่วทั้ง GitHub และ npm ย้ายไปที่ Trusted Publishing หากเป็นไปได้ เพื่อตัดโทเค็นที่มีอายุยืนยาวออกจากลูป
  • ตรวจสอบ GitHub เพื่อค้นหาที่เก็บสาธารณะที่ไม่คาดคิดชื่อ 'Shai‑Hulud' สาขาหรือเวิร์กโฟลว์ที่ไม่คุ้นเคย และการทำงานของการดำเนินการที่ผิดปกติ
  • เสริมความแข็งแกร่ง CI/CD ด้วย RBAC ที่มีสิทธิ์น้อยที่สุด การลงนาม/ตรวจสอบอาร์ทิแฟกต์ และการสแกน SCA อย่างต่อเนื่อง ปฏิบัติ การบริโภคโอเพนซอร์สเป็นความเสี่ยงที่ได้รับการจัดการ.

เคล็ดลับการล่าภัยคุกคาม (การตรวจสอบสัญญาณสูง)

มองหาการเชื่อมต่อขาออกไปยัง เว็บฮุค.ไซต์ โดเมน โดยเฉพาะ URI ที่ตรวจพบในรายงานหลายฉบับ บนจุดสิ้นสุด ให้ค้นหาการมีอยู่ของ Bundle.js ในไดเร็กทอรีชั่วคราวหรือแพ็คเกจและสำหรับไฟล์ GitHub Actions ที่ชื่อ shai-hulud-workflow.yml.

  • การส่งข้อมูลทางเครือข่าย: บันทึก DNS/URL ที่ประกอบด้วย webhook.site ระบุเส้นทางเฉพาะ bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7 หากพบเห็น
  • การส่งข้อมูลทางไกลของไฟล์: การสร้างหรือการดำเนินการของ bundle.js; การมีอยู่ของ shai‑hulud‑workflow.yml บนโฮสต์นักพัฒนา Linux/macOS
  • การวัดระยะไกลของกระบวนการ: การเรียกใช้ TruffleHog ในกรณีที่ไม่ได้คาดหวัง (หมายเหตุ การใช้งานที่ถูกต้องตามกฎหมายอาจมีอยู่ในองค์กรบางแห่ง)

ตัวชี้วัดการประนีประนอม (IoCs)

เบาะแสของไฟล์และสตริงที่พบเห็นระหว่างการสืบสวน ได้แก่ Bundle.js และ shai-hulud-workflow.ymlโดยมีสตริงตัวอักษร 'shai‑hulud' ปรากฏในสาขา ที่เก็บข้อมูล และเวิร์กโฟลว์

  • ไฟล์: bundle.js; shai‑hulud‑workflow.yml
  • สตริง: shai‑hulud; package.tar
  • Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
  • เครือข่าย: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (พบตัวแปรและเส้นทางย่อย)

ไทม์ไลน์และการวิเคราะห์อย่างต่อเนื่อง

รายงานระบุว่าการค้นพบเบื้องต้นเกิดขึ้นในช่วงกลางเดือนกันยายน พ.ศ. 2025 โดยมี มาตรการควบคุมสูงสุดรอบวันที่ 16–19 กันยายนตั้งแต่นั้นมา GitHub และผู้จำหน่ายหลายรายก็ได้อัปเดตการป้องกัน การตรวจจับ และคำแนะนำแล้ว คาดว่าจะพบผลลัพธ์ย้อนหลังเพิ่มเติมเมื่อองค์กรต่างๆ เสร็จสิ้นการตรวจสอบเหตุการณ์และขยายรายชื่อเวอร์ชันที่ได้รับผลกระทบ

มีหลักฐานบางอย่างบ่งชี้ว่าเหตุการณ์ดังกล่าว สร้างขึ้นจากการรั่วไหลของความลับก่อนหน้านี้ซึ่งเน้นย้ำว่าโทเค็นที่มีอายุยืนยาวและข้อมูลรับรองที่แคชไว้สามารถกระตุ้นให้เกิดการบุกรุกครั้งใหม่ได้ในหลายเดือนต่อมา สิ่งนี้ควรสนับสนุนความพยายามในการลดอายุการใช้งานของโทเค็นและนำรูปแบบการเผยแพร่มาใช้ ลดการแพร่กระจายความลับให้เหลือน้อยที่สุด.

รายงานทุกฉบับไม่ได้สอดคล้องกับยอดรวมที่แน่นอนหรือแพ็คเกจแรกในห่วงโซ่ แต่ภาพรวมจะสอดคล้องกัน: หนอน npm ที่จำลองตัวเองได้ ที่ใช้ความไว้วางใจของนักพัฒนาเป็นอาวุธและสิทธิ์ในการเผยแพร่อัตโนมัติเพื่อปรับขนาดอย่างรวดเร็ว ซึ่งเร็วกว่าที่หลายๆ ทีมจะตรวจพบได้จากการตรวจสอบด้วยตนเองเพียงอย่างเดียว

เหตุการณ์นี้แสดงให้เห็นว่าท่อส่งน้ำสมัยใหม่สามารถกลายเป็นทางหลวงสำหรับมัลแวร์ได้อย่างรวดเร็วเพียงใด การตรวจสอบความถูกต้องที่เข้มงวดยิ่งขึ้นการลบโทเค็นที่มีอายุยืนยาวออกจากเส้นทาง การทำให้ CI/CD แข็งแกร่งขึ้น และการตามล่า IoC อย่างเข้มข้น องค์กรต่างๆ สามารถควบคุมการเปิดเผยข้อมูลได้ในปัจจุบัน และทำให้การดำเนินการในระลอกต่อไปยากขึ้นมาก

กระทู้ที่เกี่ยวข้อง: