เมื่อไม่กี่วันก่อนมีข่าวออกมาว่า ตรวจพบช่องโหว่ XNUMX รายการใน ระบบย่อยของ เคอร์เนลลินุกซ์, Netfilter และ io_uring ซึ่งอนุญาตให้ผู้ใช้ภายในเพิ่มสิทธิ์ในระบบ
ประการแรกคือความเปราะบาง (CVE-2023-32233) ที่ตรวจพบในระบบย่อย Netfilter และเกิดจากการเข้าถึงหน่วยความจำหลังจากใช้งานฟรีในโมดูล nf_tables ซึ่งรับประกันการทำงานของตัวกรองแพ็กเก็ต nftables
ข้อบกพร่องนี้เป็นเพราะ netfilter nf_tables อนุญาตให้อัปเดตการกำหนดค่าได้ สำหรับคำขอแบบกลุ่มที่จัดกลุ่มเข้าด้วยกัน การดำเนินการพื้นฐานหลายอย่าง ในการทำธุรกรรมปรมาณู
ปัญหา ได้รับการทำซ้ำในเคอร์เนล Linux เวอร์ชันต่างๆ รวมถึง Linux 6.3.1 (เสถียรในปัจจุบัน) และช่องโหว่นี้สามารถใช้ประโยชน์ได้โดยส่งคำขอที่สร้างขึ้นเป็นพิเศษเพื่ออัปเดตการกำหนดค่า nftables มีการกล่าวถึงว่าการโจมตีต้องการการเข้าถึง nftable ซึ่งสามารถได้รับในเนมสเปซเครือข่ายแยกต่างหากหากคุณมีสิทธิ์ CLONE_NEWUSER, CLONE_NEWNS หรือ CLONE_NEWNET (ตัวอย่างเช่น หากคุณสามารถเรียกใช้คอนเทนเนอร์แยก)
ในจุดบกพร่องนี้ นักวิจัยที่ระบุปัญหาได้สัญญาว่าจะเลื่อนการเผยแพร่ข้อมูลรายละเอียดและตัวอย่างการใช้ประโยชน์จากการทำงานที่ให้รูตเชลล์เป็นเวลาหนึ่งสัปดาห์
ในสถานการณ์เฉพาะ คำขอแบทช์ที่ไม่ถูกต้องอาจมีการดำเนินการที่ลบชุด nft นิรนามที่มีอยู่โดยนัย ตามด้วยการดำเนินการอื่นที่พยายามดำเนินการกับชุด nft นิรนามเดียวกันหลังจากที่ถูกลบ ในสถานการณ์ข้างต้น ตัวอย่างของการดำเนินการข้างต้นคือการลบกฎ nft ที่มีอยู่ซึ่งใช้ชุดที่ไม่ระบุชื่อ nft และตัวอย่างของการดำเนินการหลังคือความพยายามที่จะลบองค์ประกอบออกจากอาร์เรย์นิรนาม nft นั้น หลังจากที่อาร์เรย์ถูกลบแบบสลับกัน การดำเนินการหลังอาจพยายามลบอาร์เรย์ที่ไม่ระบุชื่อ nft อย่างชัดเจนอีกครั้ง
อย่างที่เกริ่นไปในตอนต้นว่า หลายวันมานี้ การเอาเปรียบและข้อมูลถูกเปิดเผยแล้ว การหาประโยชน์และรายละเอียดสามารถดูได้ที่ลิงค์ต่อไปนี้
ตรวจพบข้อผิดพลาดที่สอง เป็นช่องโหว่ (CVE-2023-2598) ใน การใช้งานอินเตอร์เฟส I/O แบบอะซิงโครนัส io_ing รวมอยู่ในเคอร์เนล Linux ตั้งแต่เวอร์ชัน 5.1
ปัญหาเกิดจากข้อบกพร่องในฟังก์ชัน io_sqe_buffer_register ซึ่งอนุญาตให้เข้าถึงหน่วยความจำกายภาพนอกขอบเขตของบัฟเฟอร์ที่จัดสรรแบบคงที่ ปัญหาจะปรากฏเฉพาะในสาขา 6.3 และจะได้รับการแก้ไขในการอัปเดต 6.3.2 ถัดไป
มีการกล่าวถึงแนวคิดเบื้องหลังการคอมมิตดั้งเดิมคือ แทนที่จะแยกเพจขนาดใหญ่ที่บัฟเฟอร์เป็นรายการ bvec แต่ละรายการ คุณสามารถมีรายการ bvec รายการเดียวสำหรับส่วนที่ถูกบัฟเฟอร์ทั้งหมดของเพจ โดยเฉพาะอย่างยิ่ง ถ้าทุกหน้าในบัฟเฟอร์แม็พใช้โครงสร้างหน้าแรกและความยาวของบัฟเฟอร์ในรายการ bvec เดียวแทนการแมปแต่ละหน้าทีละรายการ
ดังนั้น bvec จะขยายออกไปเกินกว่าหน้าเดียวที่อนุญาตให้สัมผัสได้จริง ต่อมา IORING_OP_READ_FIXED และ IORING_OP_WRITE_FIXED ช่วยให้เราสามารถอ่านและเขียนไปยังบัฟเฟอร์ (เช่น หน่วยความจำที่ bvec ชี้ไป) ได้ตามต้องการ สิ่งนี้อนุญาตให้เข้าถึงการอ่าน / เขียนไปยังหน่วยความจำกายภาพที่อยู่ด้านหลังเพจเดียวที่เรามี
สิ่งพิมพ์เกี่ยวกับช่องโหว่กล่าวถึงขั้นตอนการสร้างข้อผิดพลาด:
1. สร้าง memfd
2. เกิดข้อผิดพลาดหน้าเดียวในตัวอธิบายไฟล์นั้น
3. ใช้ MAP_FIXED เพื่อแมปหน้านี้ซ้ำๆ ไปยังตำแหน่งที่ต่อเนื่องกัน
4. ลงทะเบียนทั้งภูมิภาคที่คุณเพิ่งกรอกด้วยหน้านั้นเป็น
บัฟเฟอร์คงที่ด้วย IORING_REGISTER_BUFFERS
5. ใช้ IORING_OP_WRITE_FIXED เพื่อเขียนบัฟเฟอร์ไปยังไฟล์อื่น
(อ่าน OOB) หรือ IORING_OP_READ_FIXED เพื่ออ่านข้อมูลในบัฟเฟอร์ (
OOB เขียน).
สุดท้ายเป็นมูลค่าการกล่าวขวัญว่า มีอยู่แล้ว ต้นแบบการหาประโยชน์จากการทำงาน (CVE-2023-2598) สำหรับการทดสอบ อนุญาตให้คุณรันโค้ดด้วยสิทธิพิเศษของเคอร์เนล
ช่องโหว่ (CVE-2023-32233) ได้รับการแก้ไขแล้วในการอัปเดต 6.4-rc และคุณสามารถติดตามการแก้ไขช่องโหว่ในการแจกจ่ายในเพจ: debian, อูบุนตู, Gentoo, RHEL, Fedora, SUSE/เปิดSUSE y โค้ง.