ช่องโหว่ในระบบย่อย eBPF ที่อนุญาตให้มีการเรียกใช้โค้ดในระดับเคอร์เนล Linux

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

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

ในการโจมตี ผู้ใช้จะต้องสามารถโหลดโปรแกรม BPF ของตัวเองได้ และลีนุกซ์รุ่นล่าสุดหลายตัวบล็อกความสามารถนี้ตามค่าเริ่มต้น (รวมถึงการเข้าถึง eBPF ที่ไม่มีสิทธิ์ถูกห้ามโดยค่าเริ่มต้นในเคอร์เนลเอง โดยเริ่มจากรีลีส 5.16) ตัวอย่างเช่น ช่องโหว่นี้สามารถถูกโจมตีได้ในการกำหนดค่าเริ่มต้นใน Ubuntu 20.04 LTS แต่ในสภาพแวดล้อม Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 และ Fedora 33 จะปรากฏเฉพาะในกรณีที่ผู้ดูแลระบบได้ตั้งค่าไว้ พารามิเตอร์ kernel.unprivileged_bpf_disabled เป็น 0 เพื่อเป็นวิธีแก้ปัญหาในการบล็อกช่องโหว่ คุณสามารถป้องกันการทำงานของโปรแกรม BPF โดยผู้ใช้ที่ไม่มีสิทธิพิเศษด้วยคำสั่ง “sysctl -w kernel.unprivileged_bpf_disabled=1”

ที่มา: opennet.ru

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