ช่องโหว่ใน XFS ที่อนุญาตให้อ่านข้อมูลอุปกรณ์บล็อกดิบได้

พบช่องโหว่ (CVE-2021-4155) ในโค้ดระบบไฟล์ XFS ที่อนุญาตให้ผู้ใช้ที่ไม่มีสิทธิพิเศษในพื้นที่สามารถอ่านข้อมูลบล็อกที่ไม่ได้ใช้ได้โดยตรงจากอุปกรณ์บล็อก เคอร์เนล Linux เวอร์ชันหลักทั้งหมดที่เก่ากว่า 5.16 ซึ่งมีไดรเวอร์ XFS จะได้รับผลกระทบจากปัญหานี้ การแก้ไขนี้รวมอยู่ในเวอร์ชัน 5.16 เช่นเดียวกับการอัปเดตเคอร์เนล 5.15.14, 5.10.91, 5.4.171, 4.19.225 เป็นต้น สถานะของการอัปเดตที่ถูกสร้างขึ้นเพื่อแก้ไขปัญหาในการแจกแจงสามารถติดตามได้ในหน้าเหล่านี้: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch

ช่องโหว่นี้เกิดจากพฤติกรรมที่ไม่ถูกต้องของ ioctl(XFS_IOC_ALLOCSP) เฉพาะ XFS สองตัวและ ioctl(XFS_IOC_FREESP) ซึ่งเป็นอะนาล็อกการทำงานของการเรียกระบบ fallocate() ทั่วทั้งเคอร์เนล เมื่อเพิ่มขนาดไฟล์ที่ไม่ได้จัดแนวบล็อก ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP จะไม่รีเซ็ตไบต์ส่วนท้ายให้เป็นศูนย์จนกว่าจะถึงขอบเขตบล็อกถัดไป ดังนั้น บน XFS ที่มีขนาดบล็อกมาตรฐาน 4096 ไบต์ ผู้โจมตีสามารถอ่านข้อมูลที่เขียนก่อนหน้านี้ได้สูงสุด 4095 ไบต์จากแต่ละบล็อก พื้นที่เหล่านี้อาจมีข้อมูลจากไฟล์ที่ถูกลบ ไฟล์ที่จัดเรียงข้อมูล และไฟล์ที่มีบล็อกที่กรองข้อมูลซ้ำแล้ว

คุณสามารถทดสอบระบบของคุณเพื่อหาปัญหาได้โดยใช้ต้นแบบการหาประโยชน์แบบง่าย หลังจากดำเนินการตามลำดับคำสั่งที่เสนอแล้ว หากสามารถอ่านข้อความของเช็คสเปียร์ได้ แสดงว่าไดรเวอร์ FS มีช่องโหว่ การติดตั้งพาร์ติชั่น XFS เพื่อการสาธิตในขั้นแรกต้องใช้สิทธิ์รูท

เนื่องจาก ioctl(XFS_IOC_ALLOCSP) และ ioctl(XFS_IOC_FREESP) มีฟังก์ชันการทำงานเหมือนกันกับ fallocate() มาตรฐาน และความแตกต่างเพียงอย่างเดียวคือข้อมูลรั่วไหล การมีอยู่ของพวกมันจึงคล้ายกับแบ็คดอร์ แม้จะมีนโยบายทั่วไปที่จะไม่เปลี่ยนแปลงอินเทอร์เฟซที่มีอยู่ในเคอร์เนล ตามคำแนะนำของ Linus ก็ตัดสินใจที่จะลบ ioctls เหล่านี้ทั้งหมดในเวอร์ชันถัดไป

ที่มา: opennet.ru

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