Alex Birsan รายงานถึงการโจมตีองค์กรขนาดใหญ่จำนวนมากด้วยการสร้างแพ็กเกจไลบรารีเลียนแบบชื่อไลบรารีในองค์กรแล้วไปวางตามบริการดาวน์โหลดไลบรารีไม่ว่าจะเป็น RubyGems, npm, หรือ PyPI
องค์กรขนาดใหญ่จำนวนมากมักมีไลบรารีเฉพาะทางของตัวเองใช้งานภายในเป็นเรื่องปกติ และหลายครั้งชื่อไลบรารีเหล่านี้ก็หลุดออกมาสู่โลกภายนอก เช่น Paypal เคยทำไฟล์ package.json ที่ใช้ภายในหลุดออกมาอยู่บน GitHub ทำให้รู้ว่าบริษัทมีการใช้งานไลบรารีภายในเช่น pplogger, auth-paypal, wurfl-paypal, analytics-paypal เป็นต้น หรือแม้แต่แอปเปิลก็เคยทำรายชื่อแพ็กเกจเหล่านี้หลุดออกมาเช่นกัน
การติดตั้งไลบรารีนับเป็นสิทธิค่อนข้างสูง ตัวติดตั้งไลบรารีมักรันโค้ดในส่วนติดตั้งแพ็กเกจทันทีที่ดาวน์โหลดเสร็จ ทำให้หากแฮกเกอร์หลอกให้องค์กรดาวน์โหลดแพ็กเกจได้ก็จะรันโค้ดจากภายในองค์กรได้ทันที ตัว Alex เองพัฒนาแพ็กเกจพิเศษที่จะรายงานกลับเซิร์ฟเวอร์ทุกครั้งที่มีคนติดตั้งแพ็กเกจไป โดยรายงานผ่าน DNS lookup ทำให้เซิร์ฟเวอร์ควบคุมรู้ได้ว่าเครื่องอะไรติดตั้งแพ็กเกจไปแล้วบ้างแม้ตัวเครื่องนั้นจะเชื่อมต่ออินเทอร์เน็ตไม่ได้ก็ตามที เขาวางแพ็กเกจแบบเดียวกันใน 3 ภาษาคือ Ruby, JavaScript, และ Python
ผลของการวางแพ็กเกจทำให้ Alex สามารถรันโค้ดจากภายในองค์กรใหญ่ๆ ได้จำนวนมาก ทั้ง Apple, Microsoft, Netflix, Shopify, Uber, Yelp ส่งผลให้เขาได้รางวัลรายงานช่องโหว่ระดับสูงจากบริษัทเหล่านี้
ต้นตอของปัญหาคือระบบดาวน์โหลดแพ็กเกจของภาษาต่างๆ จะพยายามเลือกแพ็กเกจเวอร์ชั่นสูงสุดให้เสมอ หากพบว่ามีแพ็กเกจชื่อเดียวกันแต่เลขเวอร์ชั่นสูงกว่าในเซิร์ฟเวอร์นอกบริษัท ตัวดาวน์โหลดแพ็กเกจก็จะพยายามดาวน์โหลดจากภายนอกทันที
ทางด้าน Microsoft Azure ออกรายงานแนะนำกระบวนการป้องกันการโจมตีรูปแบบนี้ พร้อมกับรายงานของ Alex
ที่มา - Medium: @alex.birsan
Comments
วางแผนรอบเดียว กินรอบวงเลย
เก่งม าก
กล้ามาก
ขอบใจ
หนึ่ง สอง หนึ่ง สอง สาม
โฟว์ ไฟท์
หนึ่ง หนึ่ง สอง หนึ่ง หนึ่ง สอง หนึ่ง
hahaha
แสดงว่าต้องรู้ชื่อ package ภายใน และชื่อนั้นต้องไม่โดนจองไว้ด้วย และเลขเวอร์ชั่นก็ต้องมากกว่าในองค์กรและ ไม่เวอร์วัง ด้วย?
-paypal
ต่อท้ายชื่อแพ็กเกจ ไม่ให้ซ้ำใครlewcpe.com , @wasonliw
ง่าย ๆ จนคิดไม่ถึงเลย โหดมาก
เทคโนโลยีไม่ผิด คนใช้มันในทางที่ผิดนั่นแหละที่ผิด!?!
หรือจริง ๆ ในระดับองค์กรณ์ควรใช้ registry แบบ pull จาก repository ของนักพัฒนาโปรเจคตรง ๆ (แลวดูแลเอง) มากกว่า registry ที่เปิดให้ใครมา push package ใส่ให้ก็ได้กันนะ ?
แต่เอาจริง ๆ การใช้โค๊ดแบบไม่ระบุที่มามันก็อันตรายอยู่แฮะ