ช่องโหว่ในแพ็คเกจ node-netmask NPM ที่ใช้ใน 270 โปรเจ็กต์

แพ็คเกจ NPM ของ node-netmask ซึ่งมีการดาวน์โหลดประมาณ 3 ล้านครั้งต่อสัปดาห์ และถูกใช้เป็นการพึ่งพาโปรเจ็กต์มากกว่า 270 โปรเจ็กต์บน GitHub มีช่องโหว่ (CVE-2021-28918) ที่ทำให้สามารถข้ามการตรวจสอบที่ใช้ netmask ได้ เพื่อกำหนดเหตุการณ์ที่เกิดขึ้นตามช่วงที่อยู่หรือสำหรับการกรอง ปัญหานี้ได้รับการแก้ไขแล้วในการเปิดตัว node-netmask 2.0.0

ช่องโหว่นี้ทำให้สามารถปฏิบัติต่อที่อยู่ IP ภายนอกเป็นที่อยู่จากเครือข่ายภายในและในทางกลับกันได้ และด้วยตรรกะบางประการของการใช้โมดูลโหนด-เน็ตมาสก์ในแอปพลิเคชันเพื่อดำเนินการ SSRF (การปลอมแปลงคำขอฝั่งเซิร์ฟเวอร์), RFI (การรวมไฟล์ระยะไกล) และการโจมตี LFI (การรวมไฟล์ในเครื่อง) เพื่อเข้าถึงทรัพยากรบนเครือข่ายภายในและรวมไฟล์ภายนอกหรือในเครื่องไว้ในห่วงโซ่การดำเนินการ ปัญหาคือตามข้อกำหนดค่าสตริงที่อยู่ที่เริ่มต้นด้วยศูนย์ควรตีความว่าเป็นเลขฐานแปด แต่โมดูล node-netmask ไม่ได้คำนึงถึงสิ่งนี้และถือว่าเป็นเลขทศนิยม

ตัวอย่างเช่น ผู้โจมตีสามารถร้องขอทรัพยากรท้องถิ่นโดยการระบุค่า "0177.0.0.1" ซึ่งสอดคล้องกับ "127.0.0.1" แต่โมดูล "node-netmask" จะละทิ้งค่าว่าง และถือว่า 0177.0.0.1″ เป็น " 177.0.0.1" ซึ่งในแอปพลิเคชันเมื่อประเมินกฎการเข้าถึง จะไม่สามารถระบุตัวตนด้วย "127.0.0.1" ได้ ผู้โจมตีสามารถระบุที่อยู่ “0127.0.0.1” ซึ่งควรเหมือนกับ “87.0.0.1” แต่จะถือเป็น “127.0.0.1” ในโมดูล “node-netmask” ในทำนองเดียวกัน คุณสามารถโกงการตรวจสอบการเข้าถึงที่อยู่อินทราเน็ตได้โดยการระบุค่า เช่น “012.0.0.1” (เทียบเท่ากับ “10.0.0.1” แต่จะถูกประมวลผลเป็น 12.0.0.1 ระหว่างการตรวจสอบ)

นักวิจัยที่ระบุปัญหาเรียกว่าปัญหาดังกล่าวเป็นหายนะและมีสถานการณ์การโจมตีหลายรูปแบบ แต่ส่วนใหญ่มองว่าเป็นเพียงการเก็งกำไร ตัวอย่างเช่น กล่าวถึงความเป็นไปได้ในการโจมตีแอปพลิเคชันที่ใช้ Node.js ที่สร้างการเชื่อมต่อภายนอกเพื่อขอทรัพยากรตามพารามิเตอร์หรือข้อมูลของคำขออินพุต แต่แอปพลิเคชันไม่ได้ตั้งชื่อหรือรายละเอียดโดยเฉพาะ แม้ว่าคุณจะพบแอปพลิเคชันที่โหลดทรัพยากรตามที่อยู่ IP ที่ป้อน แต่ก็ยังไม่ชัดเจนว่าช่องโหว่ดังกล่าวสามารถนำมาใช้ประโยชน์ในทางปฏิบัติได้อย่างไรโดยไม่ต้องเชื่อมต่อกับเครือข่ายท้องถิ่นหรือไม่ได้รับการควบคุมที่อยู่ IP “มิเรอร์”

นักวิจัยสันนิษฐานว่าเจ้าของ 87.0.0.1 (Telecom Italia) และ 0177.0.0.1 (Brasil Telecom) สามารถข้ามข้อจำกัดการเข้าถึง 127.0.0.1 ได้ สถานการณ์ที่สมจริงมากขึ้นคือการใช้ประโยชน์จากช่องโหว่เพื่อหลีกเลี่ยงรายการบล็อกด้านแอปพลิเคชันต่างๆ ปัญหานี้สามารถนำไปใช้กับการแบ่งปันคำจำกัดความของช่วงอินทราเน็ตในโมดูล NPM "private-ip"

ที่มา: opennet.ru

เพิ่มความคิดเห็น