- พบว่ามี แพ็กเกจอันตรายสำหรับขโมยข้อมูลรับรองมากกว่า 100 รายการ ถูกอัปโหลดขึ้นสู่รีโพซิทอรี NPM โดยไม่ถูกตรวจพบมาตั้งแต่เดือนสิงหาคม และมียอดดาวน์โหลดรวมมากกว่า 86,000 ครั้ง
- บริษัทความปลอดภัย Koi รายงานว่าแคมเปญโจมตีที่ตั้งชื่อว่า PhantomRaven ได้ใช้ประโยชน์จากฟีเจอร์ Remote Dynamic Dependencies (RDD) ของ NPM เพื่อเผยแพร่แพ็กเกจอันตราย 126 รายการ
- RDD เป็น โครงสร้างที่ทำให้แพ็กเกจสามารถดาวน์โหลดโค้ด dependency แบบไดนามิกจากโดเมนที่ไม่น่าเชื่อถือได้ จึงไม่ถูกตรวจจับโดยเครื่องมือวิเคราะห์แบบสแตติก
- ผู้โจมตีใช้ฟีเจอร์นี้เพื่อ ดาวน์โหลดโค้ดอันตรายผ่านการเชื่อมต่อ HTTP และใน metadata ของแพ็กเกจจะแสดงเป็น “0 Dependencies” ทำให้นักพัฒนาและสแกนเนอร์ด้านความปลอดภัยไม่ทันสังเกต
- ช่องโหว่เชิงโครงสร้างนี้สะท้อนให้เห็นถึง ข้อจำกัดของการดูแลความปลอดภัยในระบบนิเวศ NPM และความเสี่ยงของกลไกการติดตั้งอัตโนมัติ
การแพร่กระจายของแพ็กเกจอันตรายในรีโพซิทอรี NPM
- ผู้โจมตีอาศัย จุดอ่อนเชิงโครงสร้าง ของรีโพซิทอรีโค้ด NPM เพื่ออัปโหลด แพ็กเกจสำหรับขโมยข้อมูลรับรอง มากกว่า 100 รายการตั้งแต่เดือนสิงหาคม
- แพ็กเกจส่วนใหญ่ถูกเผยแพร่โดยไม่ถูกตรวจพบ และมียอดดาวน์โหลดสะสม มากกว่า 86,000 ครั้ง
- บริษัทความปลอดภัย Koi ตั้งชื่อการโจมตีนี้ว่า แคมเปญ PhantomRaven และวิเคราะห์ว่ามีการใช้ประโยชน์จากฟีเจอร์เฉพาะของ NPM
- ตามข้อมูลของ Koi จากแพ็กเกจอันตราย 126 รายการ มีราว 80 รายการที่ยังคงอยู่บน NPM ณ เวลาที่เขียนบทความ
โครงสร้างที่เปราะบางของ Remote Dynamic Dependencies (RDD)
- RDD เป็นฟีเจอร์ที่อนุญาตให้แพ็กเกจ ดาวน์โหลดโค้ด dependency แบบไดนามิกจากเว็บไซต์ภายนอก
- โดยปกติ dependency จะถูกดาวน์โหลดจาก โครงสร้างพื้นฐานที่เชื่อถือได้ ของ NPM แต่ RDD อนุญาตให้ดาวน์โหลดผ่าน การเชื่อมต่อที่ไม่เข้ารหัส เช่น HTTP ได้ด้วย
- ผู้โจมตี PhantomRaven ใช้ฟีเจอร์นี้เพื่อตั้งค่าให้ดาวน์โหลดโค้ดจาก URL อันตราย เช่น
http://packages.storeartifact.com/npm/unused-imports
- dependency ลักษณะนี้ มองไม่เห็นทั้งสำหรับนักพัฒนาและสแกนเนอร์ด้านความปลอดภัย และในข้อมูลแพ็กเกจจะแสดงเป็น “0 Dependencies”
- เนื่องจากฟีเจอร์ติดตั้งอัตโนมัติของ NPM ทำให้โค้ด dependency ที่ ‘มองไม่เห็น’ เหล่านี้ถูกเรียกใช้งานโดยอัตโนมัติ
ข้อจำกัดของการตรวจจับโดยเครื่องมือความปลอดภัย
- Oren Yomtov จาก Koi ระบุว่า “PhantomRaven เป็นกรณีที่ใช้ประโยชน์จาก จุดบอดของเครื่องมือความปลอดภัยที่มีอยู่ได้อย่างแยบยล”
- RDD ไม่ถูกตรวจจับโดยเครื่องมือวิเคราะห์แบบสแตติก
- ด้วยเหตุนี้ ผู้โจมตีจึงสามารถ หลบเลี่ยงกระบวนการตรวจสอบความปลอดภัย และเผยแพร่โค้ดอันตรายได้
ปัจจัยเสี่ยงเพิ่มเติม
- Koi อธิบายว่า dependency ที่ดาวน์โหลดผ่าน RDD จะถูก ดาวน์โหลดใหม่จากเซิร์ฟเวอร์ของผู้โจมตีทุกครั้งที่มีการติดตั้ง
- ไม่มีแคชหรือการจัดการเวอร์ชัน ทำให้แม้จะเป็นแพ็กเกจเดียวกันก็ยังมีความเป็นไปได้ที่จะถูกฝัง โค้ดอันตรายที่แตกต่างกันในแต่ละครั้งที่ติดตั้ง
- โครงสร้างการดาวน์โหลดแบบไดนามิกเช่นนี้ทำให้ การตรวจสอบความถูกต้องสมบูรณ์ของแพ็กเกจทำได้ยาก
โครงสร้างและพื้นหลังของ NPM
- NPM เป็น ตัวจัดการแพ็กเกจสำหรับ JavaScript ที่ดูแลโดย npm, Inc. ซึ่งเป็นบริษัทในเครือของ GitHub
- เป็นตัวจัดการแพ็กเกจพื้นฐานของ Node.js และประกอบด้วยไคลเอนต์บรรทัดคำสั่งกับ npm registry
- ภายใน registry มีทั้งแพ็กเกจสาธารณะและแพ็กเกจส่วนตัวแบบเสียเงินเก็บอยู่ และสามารถค้นหาได้ผ่านเว็บไซต์
- เหตุการณ์ครั้งนี้ถูกชี้ว่าเป็น ตัวอย่างที่แสดงให้เห็นว่าโครงสร้างการจัดการ dependency อัตโนมัติของ NPM สามารถถูกนำไปใช้โจมตีได้
ประเด็นอื่นที่กล่าวถึง
- ช่วงท้ายบทความมีการกล่าวถึง ความเห็นที่ว่าควรบล็อกการรัน JavaScript ที่ไม่จำเป็น
- อย่างไรก็ตาม เหตุโจมตีครั้งนี้ถูกชี้ว่าเป็น กรณีที่แม้แต่โค้ด JavaScript ที่จำเป็นก็ยังถูกนำไปใช้ในทางที่ผิดได้
ยังไม่มีความคิดเห็น