#00016 CVE-2024-38541

CVE-2024-38541 เป็นช่องโหว่ด้านความปลอดภัยที่พบในเคอร์เนลของ Linux ซึ่งเป็นหัวใจสำคัญของระบบปฏิบัติการ Linux ที่ใช้กันอย่างแพร่หลาย ทั้งในเซิร์ฟเวอร์ คอมพิวเตอร์ส่วนบุคคล และอุปกรณ์ฝังตัว ช่องโหว่นี้เกี่ยวข้องกับฟังก์ชัน of_modalias() ซึ่งมีหน้าที่ในการจัดการข้อมูลเกี่ยวกับอุปกรณ์ฮาร์ดแวร์ที่เชื่อมต่อกับระบบ โดยเฉพาะอย่างยิ่งข้อมูลที่มาจาก Device Tree ซึ่งเป็นโครงสร้างข้อมูลที่อธิบายฮาร์ดแวร์ในระบบ ช่องโหว่นี้เกิดจากปัญหา "buffer overflow" ซึ่งหมายถึงการเขียนข้อมูลเกินขอบเขตของพื้นที่หน่วยความจำที่จัดสรรไว้ ทำให้ข้อมูลส่วนเกินนั้นไปเขียนทับข้อมูลในส่วนอื่นของหน่วยความจำ ซึ่งอาจนำไปสู่ความเสียหายของระบบหรือการควบคุมระบบโดยผู้ไม่หวังดี

ที่มาของช่องโหว่นี้เกิดจากความผิดพลาดในการตรวจสอบขนาดของ buffer หรือพื้นที่หน่วยความจำที่ใช้ในการเก็บข้อมูล ในฟังก์ชัน of_modalias() มีการใช้ฟังก์ชัน snprintf() ซึ่งใช้สำหรับจัดรูปแบบข้อมูลและเก็บลงใน buffer แต่หากข้อมูลที่ต้องการจัดเก็บมีขนาดใหญ่กว่า buffer ที่จัดสรรไว้ snprintf() จะเขียนข้อมูลเกินขอบเขต ทำให้เกิด buffer overflow ปัญหานี้จะเกิดขึ้นหลังจากที่ snprintf() ทำงานเสร็จสิ้นในครั้งแรก หาก buffer มีขนาดเล็กเกินไป พารามิเตอร์ len จะมีค่าเป็นลบ และพารามิเตอร์ str (ถ้าไม่ใช่ NULL ตั้งแต่แรก) จะชี้ไปยังตำแหน่งที่อยู่นอก buffer ซึ่งเป็นอันตราย

การแก้ไขปัญหานี้คือการเพิ่มการตรวจสอบขนาดของ buffer ก่อนที่จะใช้ snprintf() เพื่อให้มั่นใจว่าข้อมูลจะไม่ถูกเขียนเกินขอบเขต การแก้ไขนี้ได้รับการนำไปใช้ในเคอร์เนล Linux เวอร์ชัน 6.8 ขึ้นไป สำหรับผู้ใช้ Ubuntu ช่องโหว่นี้ได้รับการแก้ไขแล้วใน Ubuntu 24.04 LTS (Noble) และ Ubuntu 22.04 LTS (Jammy) ที่ใช้เคอร์เนลเวอร์ชัน 6.8.0-40.40 ขึ้นไป สำหรับ Amazon Linux ช่องโหว่นี้อยู่ระหว่างการแก้ไขใน Amazon Linux 2 และ Amazon Linux 2023 ส่วน Ubuntu เวอร์ชันเก่า เช่น 20.04 LTS (Focal) และ 18.04 LTS (Bionic) ได้รับผลกระทบและควรได้รับการอัปเกรดหรือใช้มาตรการบรรเทาผลกระทบอื่นๆ

วิธีการทำงานของช่องโหว่นี้คือ เมื่อระบบพยายามที่จะดึงข้อมูลเกี่ยวกับอุปกรณ์ฮาร์ดแวร์ผ่านฟังก์ชัน of_modalias() หากข้อมูลนั้นมีขนาดใหญ่กว่า buffer ที่เตรียมไว้ จะเกิด buffer overflow ขึ้น ข้อมูลส่วนเกินจะถูกเขียนทับไปยังส่วนอื่นของหน่วยความจำ ซึ่งอาจทำให้ระบบหยุดทำงาน (loss of availability) หรือร้ายแรงกว่านั้นคือ ผู้โจมตีสามารถใช้ช่องโหว่นี้ในการรันโค้ดที่เป็นอันตรายบนระบบได้ เนื่องจากพวกเขาสามารถควบคุมข้อมูลที่ถูกเขียนทับได้ แนวโน้มของช่องโหว่นี้คือ มีความรุนแรงปานกลางถึงสูง (ตามคะแนน CVSS ที่ 6.7) เนื่องจากสามารถนำไปสู่การสูญเสียความพร้อมใช้งานของระบบและความเสียหายต่อข้อมูลได้ การป้องกันที่ดีที่สุดคือการอัปเดตเคอร์เนล Linux ให้เป็นเวอร์ชันที่ได้รับการแก้ไขแล้ว หรือใช้มาตรการบรรเทาผลกระทบอื่นๆ หากไม่สามารถอัปเดตได้ทันที ช่องโหว่นี้เน้นการโจมตีในระดับ Local (ต้องเข้าถึงเครื่องโดยตรง) และต้องใช้สิทธิ์ระดับสูง (High Privileges) ในการโจมตี ทำให้การโจมตีจากระยะไกลทำได้ยากกว่า