การโจมตี supply chain ที่ซับซ้อนได้เข้าโจมตีระบบนิเวศ NPM โดยส่งผลกระทบต่อแพ็กเกจกว่า 180 รายการด้วยมัลแวร์ที่สามารถจำลองตัวเองได้และแพร่กระจายเหมือนหนอนดิจิทัล การโจมตีครั้งนี้ได้รับการตั้งชื่อว่า Shai Hulud ตามชื่อหนอนทรายยักษ์จากซีรีส์ Dune และถือเป็นหนึ่งในการโจมตีที่กว้างขวางที่สุดต่อ repository แพ็กเกจ JavaScript จนถึงปัจจุบัน
สстатิสติการโจมตี:
- แพ็กเกจที่ถูกบุกรุก: มากกว่า 180 แพ็กเกจ
- ขนาดมัลแวร์: 3.6MB minified bundle
- ระบบเป้าหมาย: Linux และ macOS (ยกเว้น Windows โดยเจตนา)
- วิธีการโจมตี: การขโมย authentication token ของ NPM และการเผยแพร่แพ็กเกจแบบอัตโนมัติ
การออกแบบมัลแวร์ที่แพร่กระจายตัวเอง
มัลแวร์ทำงานในรูปแบบของหนอนที่สามารถจำลองตัวเองได้และแพร่กระจายไปยังแพ็กเกจใหม่โดยอัตโนมัติเมื่อได้รับการเข้าถึงระบบของนักพัฒนา เมื่อติดตั้งแล้ว โค้ดที่เป็นอันตรายจะค้นหา token การยืนยันตัวตนของ NPM และใช้มันในการเผยแพร่เวอร์ชันที่ติดเชื้อของแพ็กเกจอื่นๆ ที่นักพัฒนาดูแลอยู่ สิ่งนี้สร้างผลกระทบแบบขั้นบันไดที่แต่ละแพ็กเกจที่ถูกโจมตีกลายเป็นจุดเริ่มต้นสำหรับการติดเชื้อเพิ่มเติม
การโจมตีมุ่งเป้าไปที่ระบบ Linux และ macOS โดยเฉพาะ และจงใจข้าม Windows environments มัลแวร์รวมถึง bundle ขนาด 3.6MB ที่ถูก minified แล้วซึ่งจัดการกับการขโมย credential การสำรวจระบบ และการแพร่กระจายอัตโนมัติไปยังแพ็กเกจใหม่
การเก็บเกี่ยว Credential ของนักพัฒนา
นอกจากการแพร่กระจายผ่านระบบนิเวศ NPM แล้ว มัลแวร์ยังค้นหา credential ที่ละเอียดอ่อนที่เก็บไว้ในระบบที่ติดเชื้ออย่างแข็งขัน มันมุ่งเป้าไปที่ AWS access keys, GitHub tokens และวัสดุการยืนยันตัวตนอื่นๆ ที่อาจให้การเข้าถึง cloud infrastructure และ source code repositories แนวทางที่มีจุดประสงค์คู่นี้ทำให้การโจมตีอันตรายเป็นพิเศษ เนื่องจากอาจนำไปสู่การโจมตีระบบที่กว้างขวางกว่าเพียงแค่ package repositories
การโจมตีแสดงให้เห็นว่าภัยคุกคาม supply chain สมัยใหม่ได้วิวัฒนาการจากการฉีด code อย่างง่ายไปสู่การดำเนินการเก็บเกี่ยว credential ที่ซับซ้อนซึ่งสามารถคงอยู่ข้ามหลายระบบและบริการได้
ตัวอย่างแพ็กเกจที่ได้รับผลกระทบ:
- ARCVinylcolor
- @ctrl/tinycolor
- แพ็กเกจ NPM ต่างๆ ของ CrowdStrike
- แพ็กเกจหลายตัวในระบบนิเวศ "nx"
- แพ็กเกจที่มีการดาวน์โหลดหลายล้านครั้งต่อสัปดาห์
![]() |
---|
การแจ้งเตือนด้านความปลอดภัยที่เน้นการโจมตีห่วงโซ่อุปทาน NPM และแพ็กเกจที่ถูกบุกรุก |
การตอบสนองของชุมชนและกลยุทธ์การบรรเทา
ชุมชนนักพัฒนา JavaScript ได้ตอบสนองด้วยการผสมผสานระหว่างความกังวลและโซลูชันที่ปฏิบัติได้จริง นักพัฒนาหลายคนกำลังพิจารณาใหม่เกี่ยวกับแนวทางการจัดการ dependency โดยบางคนสนับสนุนการควบคุมที่เข้มงวดกว่าในการติดตั้งแพ็กเกจ และคนอื่นๆ เรียกร้องให้มีการเปลี่ยนแปลงพื้นฐานในวิธีที่ระบบนิเวศจัดการกับ third-party code
นี่เป็นปัญหาทางวัฒนธรรมกับนักพัฒนาที่พบว่าการมี dependency (แบบ transitive) หลายร้อยรายการเป็นเรื่องปกติ และจากนั้นก็ปฏิบัติตามกระบวนการที่ในทุกเจตนาและจุดประสงค์ จะอัปเดตมันแบบอัตโนมัติอย่างไม่มองเห็น
Package managers หลายตัวได้ใช้มาตรการป้องกันแล้ว PNPM ขณะนี้บล็อก lifecycle scripts โดยค่าเริ่มต้นเว้นแต่จะได้รับการอนุญาตอย่างชัดเจน ในขณะที่เครื่องมืออื่นๆ กำลังสำรวจฟีเจอร์การติดตั้งแบบล่าช้าที่จะป้องกันไม่ให้แพ็กเกจที่เผยแพร่ใหม่ถูกติดตั้งโดยอัตโนมัติในช่วงเวลาที่กำหนด
เครื่องมือลดความเสี่ยงด้านความปลอดภัย:
- PNPM: บล็อก lifecycle scripts โดยค่าเริ่มต้น ต้องการการอนุญาตเป็นรายการขาว
- การติดตั้งแบบล่าช้า: การตั้งค่า
minimumReleaseAge
เพื่อป้องกันการติดตั้งแพ็กเกจใหม่ทันที - การสแกนแพ็กเกจ: การตรวจจับอัตโนมัติโดย Socket.dev , Aikido Security และผู้ให้บริการด้านความปลอดภัยอื่นๆ
- OIDC Publishing: ผู้เผยแพร่ที่เชื่อถือได้เพื่อลดช่องโหว่จาก token
![]() |
---|
โพสต์บล็อกที่กล่าวถึงการโจมตีห่วงโซ่อุปทานและการตอบสนองของชุมชนในระบบนิเวศ JavaScript |
ผลกระทบต่อระบบนิเวศในวงกว้าง
การโจมตีครั้งนี้เน้นย้ำถึงความท้าทายด้านความปลอดภัยพื้นฐานที่ขยายไปนอกเหนือจาก NPM ไปยังระบบนิเวศแพ็กเกจอื่นๆ รวมถึง PyPI ของ Python, Cargo ของ Rust และ Go modules วัฒนธรรมของ micro-dependencies ในระบบนิเวศ JavaScript สร้างพื้นผิวการโจมตีที่ใหญ่ผิดปกติ โดยโปรเจ็กต์ทั่วไปมักจะรวม transitive dependencies หลายร้อยหรือหลายพันรายการ
เหตุการณ์นี้ได้ทำให้เกิดการอภิปรายใหม่เกี่ยวกับความจำเป็นในการมี standard libraries ที่ดีกว่า ข้อกำหนดการเซ็นแพ็กเกจ และการสแกนความปลอดภัยที่แข็งแกร่งกว่าก่อนที่แพ็กเกจจะพร้อมใช้งานสำหรับการติดตั้ง นักพัฒนาบางคนเรียกร้องให้ NPM ใช้การยืนยันตัวตนแบบสองปัจจัยแบบบังคับสำหรับผู้เผยแพร่ทั้งหมดและแนะนำช่วงระยะเวลาพักสำหรับแพ็กเกจที่เผยแพร่ใหม่
การโจมตีเป็นการเตือนใจอย่างชัดเจนว่าการพึ่งพาอย่างหนักของการพัฒนาซอฟต์แวร์สมัยใหม่ต่อ third-party packages สร้างความเสี่ยงด้านความปลอดภัยที่สำคัญซึ่งต้องการทั้งโซลูชันทางเทคนิคและการเปลี่ยนแปลงทางวัฒนธรรมในวิธีที่นักพัฒนาเข้าหาการจัดการ dependency
อ้างอิง: ARCVinylcolor and 46+ NPM Packages Compromised
![]() |
---|
การแสดงภาพความกังวลด้านความปลอดภัยที่เกี่ยวข้องกับระบบนิเวศแพ็กเกจในวงกว้างจากการโจมตี supply chain ที่เกิดขึ้นเมื่อเร็วๆ นี้ |