ช่องโหว่ในระบบย่อย eBPF ของเคอร์เนล Linux

มีการระบุช่องโหว่ (CVE-2021-29154) ในระบบย่อย eBPF ซึ่งช่วยให้คุณสามารถรันตัวจัดการสำหรับการติดตาม วิเคราะห์การทำงานของระบบย่อย และจัดการการรับส่งข้อมูล ซึ่งดำเนินการภายในเคอร์เนล Linux ในเครื่องเสมือนพิเศษที่มี JIT ซึ่งอนุญาตให้ ผู้ใช้ภายในเครื่องเพื่อให้สามารถเรียกใช้โค้ดในระดับเคอร์เนลได้ ปัญหาปรากฏขึ้นจนถึงรุ่น 5.11.12 (รวมอยู่ด้วย) และยังไม่ได้รับการแก้ไขในการแจกแจง (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch) การแก้ไขนี้มีให้เป็นแพตช์

ตามที่นักวิจัยระบุช่องโหว่ดังกล่าว พวกเขาสามารถพัฒนาต้นแบบการทำงานของช่องโหว่สำหรับระบบ x32 แบบ 64 และ 86 บิต ซึ่งผู้ใช้ที่ไม่มีสิทธิ์สามารถใช้งานได้ อย่างไรก็ตาม Red Hat ตั้งข้อสังเกตว่าความรุนแรงของปัญหาขึ้นอยู่กับว่าผู้ใช้สามารถเข้าถึงการเรียกระบบ eBPF ได้หรือไม่ ตัวอย่างเช่น บน RHEL และ Linux อื่นๆ ส่วนใหญ่ในการกำหนดค่าเริ่มต้น ช่องโหว่นี้สามารถถูกโจมตีได้หากเปิดใช้งาน BPF JIT และผู้ใช้มีสิทธิ์ CAP_SYS_ADMIN เพื่อเป็นวิธีแก้ปัญหา ขอแนะนำให้ปิดการใช้งาน BPF JIT โดยใช้คำสั่ง: echo 0 > /proc/sys/net/core/bpf_jit_enable

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

เป็นที่น่าสังเกตว่านี่ไม่ใช่ช่องโหว่เดียวในระบบย่อย eBPF เมื่อเร็ว ๆ นี้ ณ สิ้นเดือนมีนาคม มีการระบุช่องโหว่อีกสองช่องโหว่ในเคอร์เนล (CVE-2020-27170, CVE-2020-27171) ทำให้สามารถใช้ eBPF เพื่อเลี่ยงการป้องกันช่องโหว่ระดับ Spectre ซึ่งช่วยให้สามารถระบุเนื้อหาของหน่วยความจำเคอร์เนลได้ อันเป็นผลมาจากการสร้างเงื่อนไขสำหรับการดำเนินการเก็งกำไรของการดำเนินการบางอย่าง การโจมตี Spectre จำเป็นต้องมีลำดับคำสั่งบางอย่างในโค้ดพิเศษที่นำไปสู่การดำเนินการตามคำสั่งแบบคาดเดา ใน eBPF พบหลายวิธีในการสร้างคำสั่งดังกล่าวผ่านการดัดแปลงกับโปรแกรม BPF ที่ส่งเพื่อดำเนินการ

ช่องโหว่ CVE-2020-27170 มีสาเหตุมาจากการจัดการตัวชี้ในตัวตรวจสอบ BPF ที่ทำให้การดำเนินการเก็งกำไรเข้าถึงพื้นที่นอกขอบเขตบัฟเฟอร์ ช่องโหว่ CVE-2020-27171 เกิดจากข้อผิดพลาดจำนวนเต็มอันเดอร์โฟลว์เมื่อทำงานกับพอยน์เตอร์ ทำให้เกิดการเข้าถึงข้อมูลนอกบัฟเฟอร์แบบเก็งกำไร ปัญหาเหล่านี้ได้รับการแก้ไขแล้วในเคอร์เนลรุ่น 5.11.8, 5.10.25, 5.4.107, 4.19.182 และ 4.14.227 และยังรวมอยู่ในการอัปเดตเคอร์เนลสำหรับลีนุกซ์รุ่นส่วนใหญ่ด้วย นักวิจัยได้เตรียมช่องโหว่ต้นแบบที่ช่วยให้ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถดึงข้อมูลจากหน่วยความจำเคอร์เนลได้

ที่มา: opennet.ru

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