เมื่อไม่นานมานี้มีการเปิดเผยข้อมูลเกี่ยวกับช่องโหว่ที่ทำให้เซิร์ฟเวอร์คลาวด์ตกอยู่ในความเสี่ยง ช่องโหว่นี้ทำให้ผู้โจมตีสามารถควบคุมเครื่องจริงได้อย่างสมบูรณ์ซึ่งเป็นสถานการณ์ที่เลวร้ายที่สุดสำหรับผู้ให้บริการโครงสร้างพื้นฐานคลาวด์
Zapscape ซึ่งได้รับการจดทะเบียนภายใต้รหัส CVE-2026-64561เป็นช่องโหว่ร้ายแรงในไฮเปอร์ไวเซอร์ Linux KVM ที่ก่อให้เกิดความเสี่ยงซึ่งหลายแพลตฟอร์มอาจรับมาโดยไม่ได้ตั้งใจเมื่อเปิดใช้งานการจำลองเสมือนแบบซ้อนกัน ช่องโหว่นี้อนุญาตให้ผู้โจมตีที่มีสิทธิ์ระดับเคอร์เนลในเครื่องเสมือน (L1) สามารถเรียกใช้โค้ดด้วยสิทธิ์ระดับรูทบนระบบโฮสต์ (L0) ซึ่งเป็นการทำลายการแยกส่วนของสภาพแวดล้อมเสมือน
Zapscape ถือเป็นภัยคุกคามที่มีผลกระทบสูงไม่เพียงแต่ทำให้สามารถหลบหนีออกจากเครื่องเสมือนได้เท่านั้นแต่ยังเปิดช่องทางการยกระดับสิทธิ์ในระดับท้องถิ่นสำหรับผู้ใช้โฮสต์ที่มีสิทธิ์ในการเขียนบนอุปกรณ์ /dev/kvm อีกด้วย
แม้ว่าองค์กรอย่างRed Hat จะให้คะแนน CVSS ของช่องโหว่นี้ที่ 7.0โดยเน้นที่ความไม่เสถียรและการโจมตีแบบปฏิเสธการให้บริการ แต่การพิสูจน์แนวคิด (PoC) ที่เผยแพร่สู่สาธารณะแสดงให้เห็นถึงขอบเขตความเสียหายที่รุนแรงกว่ามาก นั่นคือการสร้างไฟล์ตามอำเภอใจโดยตรงในไดเร็กทอรีรากของโฮสต์
ความวุ่นวายในหน่วยจัดการหน่วยความจำ
วิธีการทำงานของ Zapscapeนั้นซ่อนอยู่ภายในหน่วยจัดการหน่วยความจำ (MMU) ของ KVM และวิธีการที่ไฮเปอร์ไวเซอร์จัดการตารางเพจเมื่อเกสต์หนึ่ง (L1) ทำหน้าที่เป็นไฮเปอร์ไวเซอร์สำหรับซับเกสต์อื่น (L2) ปัญหาอยู่ที่ข้อผิดพลาดในการเรียงลำดับเชิงตรรกะระหว่างการจัดการเพจฟอลต์ ในเส้นทางโค้ดของเคอร์เนล การตรวจสอบ "รูทที่ล้าสมัย" ถูกดำเนินการก่อนฟังก์ชันการดึงเพจ แทนที่จะเป็นหลังจากนั้น
ลำดับที่ไม่ถูกต้องนี้ทำให้เกิดสถานการณ์การใช้งานหลังจากถูกปล่อย (use-after-free ) แบบคลาสสิก ในระหว่างการกู้คืนKVM สามารถลบรูทที่ใช้งานอยู่และทำเครื่องหมายว่าไม่ถูกต้องได้อย่างไรก็ตาม เนื่องจากการตรวจสอบสถานะได้ดำเนินการไปแล้วระบบจึงยังคงสร้างการแมปภายใต้รูทที่ไม่ถูกต้องอีกต่อไปที่น่าสนใจคือ ปัญหาการเรียงลำดับนี้มีอยู่ในโค้ดมาตั้งแต่ปี 2008 แต่กลายเป็นปัญหาที่สำคัญและสามารถใช้ประโยชน์ได้หลังจากที่ Linux kernel 5.9 เปิดตัวในเดือนกรกฎาคม 2020เมื่อมีการนำคำสั่งที่ระบบหยุดบังคับใช้มาใช้
ข้อกำหนดและข้อจำกัด
เพื่อให้สามารถโจมตี Zapscape ได้สภาพแวดล้อมต้องตรงตามข้อกำหนดเฉพาะหลายประการประการแรกต้องเปิดใช้งานการจำลองเสมือนแบบซ้อนกันในโมดูล KVMซึ่งเป็นการกำหนดค่าที่อนุญาตให้มีสถาปัตยกรรมสามระดับ (L0, L1 และ L2) ผู้โจมตีต้องเริ่มการโจมตีจากเลเยอร์ L1ซึ่งต้องใช้สิทธิ์ระดับ root บนเครื่องเสมือนนั้น จากนั้น ผู้โจมตีจะจัดการโหมดหน่วยความจำ ในขณะที่การทำงานของเครื่องเสมือนย่อยในเลเยอร์ L2 จะบังคับให้โฮสต์ L0 เริ่มการดึงข้อมูลหน้าโควต้า ทำให้เกิดความเสียหายของหน่วยความจำ
ในระดับฮาร์ดแวร์ เงื่อนไขจะแตกต่างกันไปตามผู้ผลิตในระบบ AMD ที่ใช้ตารางเพจแบบซ้อน ( SVM ) ช่องโหว่จะตรงไปตรงมามากกว่าและไม่ต้องการคุณสมบัติเพิ่มเติมใดๆในทางกลับกันในโปรเซสเซอร์ Intel สถานการณ์ดังกล่าวต้องการให้ระบบปฏิบัติการแขก L1 มีความสามารถในการตรวจสอบเพจ EPT ระดับสี่และห้าซึ่งจำกัดช่องทางการโจมตีบน Intel ไว้เฉพาะสถาปัตยกรรมรุ่นใหม่ๆ โดยเฉพาะตั้งแต่ตระกูล Ice Lake-SP เป็นต้นไป
เป็นที่น่าสังเกตว่า แม้ว่าการทดสอบแนวคิดต่อสาธารณะจะสามารถแทรกซึมไปยังโฮสต์ได้ในสภาพแวดล้อมที่มีการควบคุม แต่ผู้เชี่ยวชาญด้านความปลอดภัยรายงานว่า ในเคอร์เนลที่คอมไพล์ใหม่บางตัว การโจมตีนี้จะทำให้เครื่องเสมือนของผู้โจมตีล่มเท่านั้น ซึ่งเป็นการปฏิเสธการให้บริการมากกว่าที่จะเป็นการหลุดพ้นจากระบบโดยสมบูรณ์
การลดผลกระทบ การแก้ไข และกลยุทธ์
วิธีแก้ปัญหา Zapscape อย่างเด็ดขาดได้ถูกเพิ่มเข้ามาในคลังซอฟต์แวร์ Linux เมื่อเดือนกรกฎาคมที่ผ่านมาพร้อมกับแพทช์ที่แก้ไขลำดับการตรวจสอบความถูกต้อง การแก้ไขนี้จะย้ายการตรวจสอบ root ที่ไม่ถูกต้องไปไว้หลังจากจัดสรรหน้า MMU เพื่อให้แน่ใจว่าไฮเปอร์ไวเซอร์จะไม่สร้างการแมปที่ใช้งานอยู่ภายใต้ root ที่ถูกลบไปแล้ว การแก้ไขเหล่านี้ได้ถูกนำไปใช้ในสาขาเคอร์เนลที่เสถียรแล้ว และกำลังถูกเผยแพร่อย่างกว้างขวางโดยดิสทริบิวชันต่างๆ
สำหรับผู้ดูแลระบบที่ไม่สามารถอัปเกรดได้ทันที มีมาตรการแก้ไขชั่วคราวที่มีประสิทธิภาพสูงอยู่ มาตรการที่สำคัญที่สุดคือการปิดใช้งานการจำลองเสมือนแบบซ้อนกันบนเซิร์ฟเวอร์ทั้งหมดที่ไม่จำเป็นอย่างยิ่ง โดยการส่งพารามิเตอร์ `nested=0` ไปยังโมดูล `kvm_amd` หรือ `kvm_intel` ในไฟล์การกำหนดค่า modprobe มาตรการนี้จำเป็นต้องโหลดโมดูลใหม่ ซึ่งหมายถึงการหยุดเครื่องเสมือนที่กำลังทำงานอยู่ทั้งหมด
สุดท้ายนี้ หากคุณสนใจเรียนรู้เพิ่มเติม สามารถดูรายละเอียดได้ที่ลิงก์ต่อไปนี้