ช่องโหว่ร้ายแรงใน Wasmtime รันไทม์สำหรับแอปพลิเคชัน WebAssembly

การอัปเดตการแก้ไข Wasmtime 6.0.1, 5.0.1 และ 4.0.1 ได้แก้ไขช่องโหว่ (CVE-2023-26489) ซึ่งได้รับการกำหนดระดับอันตรายร้ายแรง ช่องโหว่นี้ทำให้ข้อมูลถูกเขียนลงในพื้นที่หน่วยความจำนอกขอบเขตที่อนุญาตสำหรับโค้ด WebAssembly ที่แยกออกมา ซึ่งผู้โจมตีอาจนำไปใช้เพื่อรันโค้ดของตนนอกสภาพแวดล้อม WASI ที่แยกออกมาได้

Wasmtime เป็นรันไทม์สำหรับการรันแอปพลิเคชัน WebAssembly ที่มีส่วนขยาย WASI (WebAssembly System Interface) เป็นแอปพลิเคชันสแตนด์อโลนทั่วไป ชุดเครื่องมือนี้เขียนด้วยภาษา Rust และช่องโหว่นี้เกิดจากข้อผิดพลาดเชิงตรรกะในการกำหนดกฎการกำหนดที่อยู่หน่วยความจำเชิงเส้นในตัวสร้างโค้ด Cranelift ซึ่งแปลการแสดงระดับกลางที่ไม่ขึ้นกับสถาปัตยกรรมฮาร์ดแวร์เป็นโค้ดเครื่องที่ปฏิบัติการได้สำหรับสถาปัตยกรรม x86_64

โดยเฉพาะอย่างยิ่ง สำหรับแอปพลิเคชัน WebAssembly ที่อยู่ที่มีประสิทธิภาพแบบ 35 บิตได้รับการคำนวณแทนที่อยู่แบบ 33 บิตที่อนุญาตใน WebAssembly ซึ่งเปลี่ยนขีดจำกัดของหน่วยความจำเสมือนที่อนุญาตสำหรับการดำเนินการอ่านและเขียนเป็น 34 GB ในขณะที่การตั้งค่าสภาพแวดล้อมแซนด์บ็อกซ์ให้การป้องกันสำหรับ 6 GB จากที่อยู่ฐาน เป็นผลให้หน่วยความจำเสมือนมีตั้งแต่ 6 ถึง 34 GB จากที่อยู่พื้นฐานสำหรับการอ่านและเขียนจากแอปพลิเคชัน WebAssembly หน่วยความจำนี้สามารถโฮสต์สภาพแวดล้อม WebAssembly อื่นๆ หรือคอมโพเนนต์รันไทม์ WebAssembly

หากไม่สามารถอัปเดตเวอร์ชัน Wasmtime ได้ วิธีแก้ไขปัญหาชั่วคราวสำหรับการบล็อกข้อผิดพลาดคือระบุตัวเลือก "Config::static_memory_maximum_size(0)" เพื่อเปิดใช้งานการตรวจสอบขอบเขตแยกต่างหากในการเข้าถึงหน่วยความจำเชิงเส้นทั้งหมด (ส่งผลให้ประสิทธิภาพการทำงานลดลงอย่างมาก) . อีกทางเลือกหนึ่งคือการใช้การตั้งค่า “Config::static_memory_guard_size(1 < 36)” เพื่อเพิ่มจำนวน Guard Pages (มีข้อยกเว้นเกิดขึ้นเมื่อมีการเข้าถึง) ที่วางไว้ในช่วงหน่วยความจำเสมือนที่มีปัญหา (ส่งผลให้มีการสำรองหน่วยความจำเสมือนจำนวนมากและ การจำกัดจำนวนการรันแอปพลิเคชัน WebAssembly พร้อมกัน)

ที่มา: opennet.ru

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