Shim เป็น bootloader ที่ดูแลโดย Red Hat ซึ่งช่วยให้การบูตของคอมพิวเตอร์ที่ใช้ UEFI มีความมั่นคงปลอดภัย แต่ล่าสุดได้มีการอัปเดตช่องโหว่ในส่วนประกอบนี้ที่คนร้ายอาจลอบรันโค้ดหรือควบคุมระบบได้ก่อนที่ Kernel จะถูกโหลดเข้ามา ลัดผ่านกระบวนการป้องกัน
Shim ถูกสร้างขึ้นเพราะอยากให้โปรเจ็คโอเพ่นซอร์สหรือ Linux ดิสโทรได้อาศัยประโยชน์จาก Secure Boot เพื่อป้องกันการลอบรันโค้ดหรือกิจกรรมที่ไม่ได้รับอนุญาตระหว่างการบูตเครื่อง แต่ก็ยังคงควบคุมฮาร์ดแวร์ได้ ทั้งนี้ Shim ได้รับการป้องกันด้วย Microsoft Key และเป็นที่ยอมรับใน UEFI Motherboard ส่วนใหญ่ โดยสามารถตรวจสอบถึงกระบวนการบูตในขั้นถัดไป เช่น การโหลด GRUB2 bootloader เป็นต้น
โดยช่องโหว่ CVE-2023-40547 เกิดขึ้นในส่วนการบูตอิมเมจผ่านทาง HTTP (httpboot.c) ไอเดียก็คือ Shim ต้องมีการจอง Buffer ให้ไฟล์ที่ได้รับผ่านทางโปรโตคอล HTTP หรือโปรโตคอลอื่น ซึ่งขนาดจะระบุใน HTTP header และนั่นเองคือจุดที่คนร้ายสามารถแทรกแซงบอกให้จองพื้นที่น้อยลงนำไปสู่การเกิด outs-of-bounds Write ได้ และทำให้เกิดการรันโค้ดได้ก่อนที่ OS จะถูกโหลดเข้ามา ลัดผ่านกระบวนการป้องกันของ Kernel
ช่องโหว่ถูกค้นพบโดยนักวิจัยจาก Microsoft ที่ชื่อ Bill Demirkapi ซึ่งเขาเผยถึงข้อมูลครั้งแรกในวันที่ 24 ม.ค. 2567 ซึ่งต่อมาผู้เชี่ยวชาญจาก Eclypsium ได้ออกมาขยายความเพิ่มเติมว่าช่องโหว่นี้ร้ายแรงอย่างไร โดยคนร้ายอาจมาจากระดับท้องถิ่ม เครือข่ายที่ติดกัน หรือจากทางไกล ด้วยการลอบดักจับทราฟฟิค HTTP ในขั้นตอนดังกล่าวเพื่อแทรกแซงกระบวนการ
สำหรับคนร้ายที่มีสิทธิ์เพียงพอในระดับท้องถิ่นสามารถแก้ไขค่าตัวแปร EFI หรือ EFI Partition โดยใช้ Live Linux USB เพื่อแก้ไขลำดับการบูตและโหลด shim ที่อันตรายแทน นำไปสู่การลอบรันโค้ดโดยไม่ต้องทำการปิด Secure Boot เลย ในกรณีคนร้ายอยู่ในเครือข่ายเดียวกันสามารถใช้ PXE โหลด shim อันตรายได้เช่นกันด้วยการใช้ช่องโหว่
วิธีการแก้ไขปัญหา
Red Hat ผู้ดูแลโค้ดได้ทำการอัปเดตแก้ไขแล้วตั้งแต่ 5 ธันวาคม 2566 ซึ่ง Linux ใดที่ใช้ Shim และรองรับ Secure Boot ต้องนำโค้ดนี้ไปแก้ไข โดยมีหลายค่ายที่เกี่ยวข้องได้ออกประกาศแล้ว เช่น Red Hat, Ubuntu, Debian และ SUSE ผู้ดูแลต้องมองหา Shim เวอร์ชัน 15.8 ขึ้นไป
อย่างไรก็ตามทาง Eclypsium ได้ให้นำแนะนำเพิ่มเติมว่าผู้ดูแลต้องทำการอัปเดต UEFI Secure Boot DBX เพื่อเพิ่มค่า Hash ของ Shim เวอร์ชันที่มีช่องโหว่ และทำการ Sign เวอร์ชันที่แพตช์ด้วย Microsoft Key ด้วย โดยหลังจากอัปเกรต Shim 15.8 จะต้องใช้คำสั่ง ‘fwupdmgr update’ (fwupd) (รูปประกอบ) แต่ใน Linux หลายค่ายทำผ่าน GUI ก็ได้เช่นกัน