พบช่องโหว่ในเกม Minecraft ผู้เล่นสามารถส่งข้อมูลไปยิงเครื่องเซิร์ฟเวอร์ให้ร่วงได้ มีแพตช์แล้ว

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

(หมายเหตุ: เนื้อหาข่าวมีแค่ย่อหน้าเดียวข้างบน ส่วนที่เหลือต่อไปนี้เป็นข้อมูลทางเทคนิคมากๆ ใครไม่สนใจสามารถข้ามได้)

สาเหตุของช่องโหว่เกิดจากโพรโทคอลของเกม Minecraft อนุญาตให้ผู้เล่นส่งข้อมูลไปยังเซิร์ฟเวอร์ได้ว่าใน Inventory มีไอเทมอะไรอยู่บ้าง โดยใช้รูปแบบการเก็บข้อมูลแบบ NBT (ลักษณะคล้ายๆ JSON) ซึ่งเป็นโครงสร้างข้อมูลที่สามารถมีข้อมูลอยู่ข้างในซ้อนๆ ต่อกันไปอีกได้ ตัวอย่างการเก็บข้อมูลไอเทม “หนังสือ” อย่างเช่นในรูปด้านล่าง ก็จะมีบอกข้อมูล  เช่น author, title, pages เป็นต้น

minecraft-crash-1

ในที่นี้ ทางเซิร์ฟเวอร์เกมอนุญาตให้ผู้เล่นส่งข้อมูลในลักษณะซ้อนกันหลายๆ ชั้นได้ ซึ่งก็ทำให้เราสามารถสร้าง “ข้อมูลปลอม” ที่มีชุดข้อมูลจำนวนมากซ้อนกันอยู่ แล้วส่งไปให้ทางเซิร์ฟเวอร์ได้ ตัวอย่างเช่นข้อมูลในรูปด้านล่าง มี list ซ้อนกันอยู่ถึง 5 ระดับ

minecraft-crash-2

ข้อมูลชุดนี้ ในส่วน rekt ที่อยู่บนสุด จะมีข้อมูล list ที่ซ้อนกันอยู่ข้างใน 300 list แต่ละ list จะมี sublist อีกอย่างละ 10 รายการ แต่ละ sublist ก็จะมีรายการย่อยซ้อนต่อกันไปอีก 10 รายการ จนสุดที่ 5 ระดับที่ตัวข้อมูลรองรับไหว

ดังนั้นปริมาณ list ทั้งหมดที่อยู่ในข้อมูลชุดนี้คือ 10^5 * 300 = 30,000,000 list (สามสิบล้าน) ขนาดของข้อมูลทั้งหมดคือ 26.6 MB แต่เวลา Minecraft ส่งข้อมูลจะบีบอัดโดยใช้อัลกอริทึม zlib ทำให้ข้อมูลเหลือขนาดแค่ 39 kB

เมื่อเซิร์ฟเวอร์ได้รับข้อมูลแล้วเอาไปประมวลผล ก็จะขยายไฟล์กลับคืนมาแล้วเจอว่ามีข้อมูลขนาดใหญ่มากเกือบๆ 27 MB ซึ่งนอกจากจะล้น Buffer แล้ว ตัวเซิร์ฟเวอร์ยังจะพยายามสร้าง Object ขึ้นมากว่า 30 ล้านชิ้นภายในทันทีทันใด ทำให้หน่วยความจำและซีพียูไม่พอที่จะประมวลผลจนหยุดทำงานในที่สุด

ตอนนี้มีโค้ดสำหรับโจมตีช่องโหว่นี้แล้ว อยู่บน Github โหลดมาลองเล่นกันได้

– จบส่วนที่เป็นข้อมูลทางเทคนิค –

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

UPDATE!! Mojang ปล่อยแพตช์เวอร์ชัน 1.8.4 มาแก้ปัญหานี้แล้วครับ ใครที่เปิดเซิร์ฟเวอร์ Minecraft อยู่ตามไปอัปเดตกันได้

ที่มา – Ars TechnicaAmmar Askar

Author

Bigta

เล่นเกมมาตั้งแต่อนุบาลหนึ่ง :3