ไม่กี่วันที่ผ่านมา Jann Horn จากทีม Google Project Zero ซึ่งก่อนหน้านี้ได้ระบุช่องโหว่ของ Spectre และ Meltdown เปิดเผยเทคนิคเจาะช่องโหว่ พบในตัวรวบรวมขยะเคอร์เนล Linux (CVE-2021-4083)
ช่องโหว่ เกิดจากสภาพการแข่งขัน เมื่อล้างตัวอธิบายไฟล์ซ็อกเก็ตยูนิกซ์ และอาจอนุญาตให้ผู้ใช้ในพื้นที่ที่ไม่ได้รับสิทธิ์เรียกใช้โค้ดของคุณที่ระดับเคอร์เนล
ปัญหา น่าสนใจเพราะกรอบเวลา ในระหว่างที่สภาพการแข่งขันเกิดขึ้น ถูกประเมินว่าเล็กเกินไป เพื่อสร้างช่องโหว่ที่แท้จริง แต่ผู้เขียนผลการศึกษาพบว่าแม้แต่จุดอ่อนที่สงสัยในขั้นต้นก็สามารถกลายเป็นแหล่งที่มาของการโจมตีจริงได้หากผู้สร้างช่องโหว่มีทักษะและเวลาที่จำเป็น
ยานน์ ฮอร์น แสดงให้เห็นว่าด้วยความช่วยเหลือของการจัดการที่มีลวดลายสามารถลดสภาพได้อย่างไร เหตุการณ์การแข่งขันที่เกิดขึ้นเมื่อเรียกใช้ฟังก์ชัน close() และ fget() พร้อมกันไปยังช่องโหว่ที่ใช้งานหลังจากใช้งานได้ฟรีอย่างเต็มที่ และเข้าถึงโครงสร้างข้อมูลที่ว่างอยู่แล้วภายในเคอร์เนล
สภาพการแข่งขันเกิดขึ้น ระหว่างขั้นตอนการปิด file descriptor ในขณะที่เรียกใช้ฟังก์ชัน close() และ fget() พร้อมกัน การเรียกเพื่อปิด () สามารถดำเนินการได้ก่อนที่จะดำเนินการ fget() ซึ่งจะทำให้ตัวรวบรวมรายการสับสน ไม่ได้ใช้เพราะตามการ refcount โครงสร้างไฟล์จะไม่มีการอ้างอิงภายนอก แต่จะยังคงแนบมากับ file descriptor นั่นคือตัวรวบรวมขยะจะถือว่ามีการเข้าถึงโครงสร้างแบบเอกสิทธิ์เฉพาะบุคคล แต่ในความเป็นจริงในช่วงเวลาสั้น ๆ รายการที่เหลือในตาราง file descriptor จะยังคงบ่งชี้ว่าโครงสร้างกำลังถูกปลดปล่อย
เพื่อเพิ่มความน่าจะเป็น เข้าสู่สภาพการแข่งขัน ใช้เทคนิคหลายอย่างที่ช่วยเพิ่มโอกาสในการประสบความสำเร็จ ของสัดส่วนการถือหุ้น 30% เมื่อทำการเพิ่มประสิทธิภาพระบบเฉพาะ ตัวอย่างเช่น เพื่อเพิ่มเวลาในการเข้าถึงโครงสร้างด้วย file descriptor หลายร้อยนาโนวินาที ข้อมูลจะถูกล้างออกจากแคชของโปรเซสเซอร์โดยทำให้แคชเสียหายด้วยกิจกรรมบนคอร์ของ CPU อื่น ซึ่งทำให้สามารถส่งคืนโครงสร้างจากหน่วยความจำและ ไม่ใช่แคชที่รวดเร็วของ CPU
คุณสมบัติที่สำคัญที่สอง เป็น การใช้อินเตอร์รัปต์ที่สร้างโดยตัวจับเวลาฮาร์ดแวร์ เพื่อเพิ่มเวลาการแข่งขัน เวลาถูกเลือกเพื่อให้ตัวจัดการการขัดจังหวะเริ่มทำงานในระหว่างที่เกิดสภาวะการแข่งขันและการใช้รหัสขัดจังหวะชั่วขณะหนึ่ง เพื่อชะลอการกลับมาของการควบคุม epoll สร้างรายการในคิวประมาณ 50 รายการ ซึ่งจำเป็นต้องมีการวนซ้ำในตัวจัดการการขัดจังหวะ
เทคนิค การแสวงประโยชน์จากช่องโหว่ ถูกเปิดเผยหลังจากระยะเวลาไม่เปิดเผย 90 วัน. ปัญหา
และได้รับการแก้ไขในต้นเดือนธันวาคม การแก้ไขนี้รวมอยู่ในเคอร์เนล 5.16 และยังย้ายไปยังสาขา LTS ของเคอร์เนลและแพ็กเกจที่มีเคอร์เนลที่ให้มาในการแจกแจงด้วย ควรสังเกตว่ามีการระบุช่องโหว่ในระหว่างการวิเคราะห์ปัญหาที่คล้ายคลึงกัน CVE-2021-0920 ซึ่งปรากฏในตัวรวบรวมขยะเมื่อประมวลผลแฟล็ก MSG_PEEK
อีกหนึ่งจุดอ่อนที่พบ เมื่อเร็ว ๆ นี้ในเคอร์เนล Linux มันคือ CVE-2022-0742 นี้ อาจทำให้หน่วยความจำที่ใช้ได้หมดและทำให้เกิดการปฏิเสธการบริการจากระยะไกล โดยส่งแพ็กเก็ต icmp6 ที่สร้างขึ้นเป็นพิเศษ ปัญหานี้เกี่ยวข้องกับหน่วยความจำรั่วที่เกิดขึ้นเมื่อประมวลผลข้อความ ICMPv6 ด้วยชนิด 130 หรือ 131
ปัญหาเกิดขึ้นตั้งแต่เคอร์เนล 5.13 และได้รับการแก้ไขในเวอร์ชัน 5.16.13 และ 5.15.27 ปัญหานี้ไม่ส่งผลกระทบต่อ Debian, SUSE, Ubuntu LTS (18.04, 20.04) และสาขาที่เสถียรของ RHEL ได้รับการแก้ไขแล้วบน Arch Linux
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม ของบันทึกคุณสามารถตรวจสอบรายละเอียดใน ลิงค์ต่อไปนี้