พวกเขาตรวจพบช่องโหว่ในไดรเวอร์ Linux exFAT 

ความอ่อนแอ

หากถูกโจมตี ข้อบกพร่องเหล่านี้อาจทำให้ผู้โจมตีเข้าถึงข้อมูลที่ละเอียดอ่อนโดยไม่ได้รับอนุญาต หรือก่อให้เกิดปัญหาโดยทั่วไป

เมื่อไม่กี่วันก่อนมีข่าวออกมาว่า ตรวจพบช่องโหว่ (อยู่ในรายการแล้วภายใต้ CVE-2023-4273) ในไดรเวอร์สำหรับระบบไฟล์ exFAT ที่ให้มาในเคอร์เนล Linux

ปัญหาความจริงที่ว่าตัวควบคุมอนุญาตเมื่อติดตั้งพาร์ติชันที่ออกแบบมาเป็นพิเศษ (เช่น โดยการเสียบแฟลช USB ที่เป็นอันตราย) เข้าสู่สแต็กโอเวอร์โฟลว์ และรันโค้ดของคุณด้วยสิทธิ์เคอร์เนล

ปัญหาคือ: รหัสสันนิษฐานว่าอินพุตชื่อไฟล์จะสร้างชื่อไฟล์ที่ต่อกันซึ่งมีความยาว 255 อักขระ (จำกัด คือ 258 อักขระ รวมถึงอักขระเพิ่มเติม 1 ตัวสำหรับไบต์ว่างและอักขระพิเศษ 2 ตัวสำหรับการแปลง) การจัดเก็บชื่อไฟล์มากกว่า 255 อักขระในชุดรายการไดเร็กทอรีถือเป็นการละเมิดรูปแบบระบบไฟล์ แต่ไดรเวอร์ Linux ยอมรับ แต่ยังทำให้เกิดสแต็กโอเวอร์โฟลว์ (เนื่องจากชื่อไฟล์ถูกต่อเข้ากับตัวแปรที่จัดสรรโดยสแต็ก)

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

ฟังก์ชัน exfat_extract_uni_name() จะหยุดการคัดลอกอักขระไปยังบัฟเฟอร์ปลายทางเมื่อพบอักขระ null (0x0000) และส่งกลับจำนวนอักขระที่คัดลอก แต่ผู้เรียกจะละเว้นค่าที่ส่งคืนและเลื่อนตัวชี้ไปข้างหน้า 15 อักขระ (30 ไบต์) สำหรับการวนซ้ำครั้งถัดไป ดังนั้นจึงเป็นไปได้ที่จะข้าม (ไม่เปลี่ยนแปลง) 14 อักขระหรือ 28 ไบต์ในการวนซ้ำครั้งเดียว 

ช่องโหว่ มีอยู่ในฟังก์ชันที่สร้างชื่อยาวขึ้นใหม่ อ่านบันทึกแบบวนรอบด้วยส่วนของชื่อไฟล์จากดัชนีไดเร็กทอรีและรวมส่วนของชื่อที่เป็นผลลัพธ์เข้ากับชื่อยาวสุดท้าย

การตรวจสอบขนาดในโค้ดสำหรับฟังก์ชันนั้นดำเนินการโดยสัมพันธ์กับแต่ละรายการที่มีส่วนของชื่อ แต่ไม่ครอบคลุมชื่อสุดท้าย (เช่น ชื่อสามารถแบ่งออกเป็น 100 ส่วนและมีความยาวได้ถึง 1500 อักขระ แทนที่จะเป็น 258 อักขระในบัฟเฟอร์ ).

ผู้ตรวจสอบ ผู้ค้นพบความเปราะบาง สามารถเตรียมการใช้ประโยชน์จากต้นแบบได้ ซึ่งทำให้คุณสามารถเพิ่มสิทธิพิเศษในระบบได้ เมื่อทดสอบบนเครื่องเสมือน VirtualBox การใช้ประโยชน์จะทำงานได้ 100% แต่เมื่อทำงานในสภาพแวดล้อมปกติที่ทำงานบนฮาร์ดแวร์ โอกาสที่จะถูกทริกเกอร์จะลดลงเหลือประมาณ 50%

โดยเฉพาะอย่างยิ่งการหาประโยชน์ของฉันเขียนทับตัวชี้ที่จัดสรรสแต็กไปยังสตริงที่สิ้นสุดด้วย null ดังนั้นความพยายามต่อไปนี้ในการเพิ่มอักขระ null ที่สิ้นสุดให้กับสตริงนี้จริง ๆ แล้วจะกลายเป็นแบบดั้งเดิม "เขียนไบต์ null ไปยังตำแหน่งของหน่วยความจำที่ผู้โจมตีเลือก

นอกจากนี้ยังมีการกล่าวถึงว่า ช่องโหว่นี้สามารถใช้เพื่อประนีประนอมเคอร์เนลที่บูตในโหมด UEFI Secure Bootเนื่องจากมีการกล่าวถึงว่าอิมเมจที่มีเคอร์เนลที่มีช่องโหว่ซึ่งมีสคริปต์เริ่มต้นที่เกี่ยวข้อง (และแน่นอนว่าการใช้ประโยชน์) ซึ่งบูทก่อนระบบปฏิบัติการจริงจะถูกวางไว้บนไดรฟ์ที่สามารถบู๊ตได้ เมื่อบูตเครื่อง อิมเมจนี้จะโหลดโมดูลเคอร์เนลที่เป็นอันตราย (และไม่ได้ลงนาม) ซึ่งสร้างการควบคุมโหมดเคอร์เนลแล้วสลับไปยังระบบปฏิบัติการจริง (เช่น การใช้การเรียก kexec)

ท้ายที่สุด เป็นที่น่าสังเกตว่าปัญหาได้รับการแก้ไขแล้วใน Linux เวอร์ชันที่ยังรองรับอยู่ ในขณะที่มีการเปิดเผยช่องโหว่ Linux Kernel เวอร์ชันล่าสุดคือ Linux เวอร์ชัน 6.4.10 แต่เวอร์ชันใหม่ 6.5 มีการแก้ไขแล้ว

สำหรับผู้ที่สนใจติดตามโซลูชันในการแจกแจงแบบต่างๆ สามารถทำได้จากหน้าต่อไปนี้: debianอูบุนตู, RHELSUSE Fedora

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


เป็นคนแรกที่จะแสดงความคิดเห็น

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา