เมื่อวาน ข้อมูลเกี่ยวกับช่องโหว่ในเคอร์เนล Linux ถูกเปิดเผย และได้รับการจัดหมวดหมู่เป็น CVE-2021-3609 แล้ว จุดอ่อนนี้ อนุญาตให้ผู้ใช้ในพื้นที่ยกระดับสิทธิ์ของตนบนระบบ เนื่องจากสภาวะการแข่งขันในการใช้งานโปรโตคอล CAN BCM และแสดงในเวอร์ชัน 2.6.25 ถึง 5.13-rc6 ของเคอร์เนล Linux
การพิจารณาคดีเอาเปรียบ เพราะว่า โปรโตคอล CAN BCM ช่วยให้คุณลงทะเบียนโปรแกรมจัดการข้อความของคุณเองได้ ของเครือข่ายพื้นที่ของคอนโทรลเลอร์ (CAN) และเชื่อมต่อกับซ็อกเก็ตเครือข่ายเฉพาะ เมื่อมีข้อความเข้ามา จะเรียกฟังก์ชันนี้ว่า bcm_rx_handler () ผู้โจมตีสามารถใช้ประโยชน์จากสภาวะการแข่งขันและบังคับให้ซ็อกเก็ตเครือข่ายปิดขณะดำเนินการ bcm_rx_handler ().
ปัญหาเกิดขึ้นเมื่อปิดซ็อกเก็ต และเรียกฟังก์ชันนี้ว่า bcm_release (), ซึ่งหน่วยความจำที่จัดสรรสำหรับโครงสร้างนั้นว่าง bcm_op และ bcm_sock ที่ยังคงใช้ใน handler bcm_rx_handler () ซึ่งยังคงทำงานอยู่ จึงมีสถานการณ์ที่นำไปสู่การเข้าถึงบล็อกหน่วยความจำที่ว่างอยู่แล้ว
นี่คือการประกาศจุดบกพร่องที่เพิ่งรายงาน (CVE-2021-3609) ในโปรโตคอลเครือข่าย CAN BCM ในเคอร์เนล Linux ตั้งแต่เวอร์ชัน 2.6.25 ถึง mainline 5.13-rc6
ช่องโหว่นี้เป็นสภาวะการแข่งขันใน net / can / bcm.c ที่อนุญาตให้ยกระดับสิทธิ์ไปที่รูท ปัญหาได้รับการรายงานครั้งแรกโดย syzbot และ Norbert Slusarek ได้รับการพิสูจน์แล้วว่าสามารถใช้ประโยชน์ได้
การโจมตีเดือดลงเพื่อเปิดซ็อกเก็ต CAN BCM สองซ็อกเก็ตและผูกเข้ากับอินเทอร์เฟซ vcan. ในตัวเชื่อมต่อแรก คุณเรียก ส่งข้อความ () ด้วยตัวบ่งชี้ RX_SETUP ในการกำหนดค่าคอนโทรลเลอร์สำหรับข้อความ CAN ขาเข้าและบนตัวเชื่อมต่อที่สอง คุณเรียก ส่งข้อความ () เพื่อส่งข้อความไปยังตัวเชื่อมต่อแรก
หลังจากที่ข้อความมาถึง การเรียก bcm_rx_handler () ถูกทริกเกอร์และผู้โจมตีใช้เวลาที่เหมาะสมและปิดซ็อกเก็ตแรก ซึ่งนำไปสู่การเปิดตัวของ bcm_release () และการเปิดตัวของโครงสร้าง bcm_op และ bcm_sockถึงแม้ว่างานของ bcm_rx_handler () มันยังไม่แล้วเสร็จ
โดยการจัดการเนื้อหาของ bcm_sock ผู้โจมตีสามารถแทนที่ตัวชี้ไปยังฟังก์ชัน sk-> sk_data_ready (sk) การดำเนินการเปลี่ยนเส้นทาง และใช้เทคนิคการเขียนโปรแกรมเชิงกลับ (ROP) แทนที่พารามิเตอร์ modprobe_path และทำให้โค้ดของเขาทำงานเป็นรูท .
เมื่อใช้เทคนิค ROP ผู้โจมตีจะไม่พยายามใส่รหัสของเขา ในความทรงจำของ, แต่มันทำงานบน ชิ้นส่วนของ มีคำสั่งเครื่องอยู่แล้ว ในไลบรารีที่โหลด ซึ่งลงท้ายด้วยคำสั่ง return return (ตามกฎแล้ว นี่คือจุดสิ้นสุดของฟังก์ชันไลบรารี)
สิทธิ์ที่จำเป็นในการโจมตีสามารถรับได้โดยผู้ใช้ที่ไม่มีสิทธิพิเศษในคอนเทนเนอร์ที่สร้างขึ้นบนระบบที่เปิดใช้งานเนมสเปซผู้ใช้ ตัวอย่างเช่น เนมสเปซของผู้ใช้จะรวมอยู่ใน Ubuntu และ Fedora โดยค่าเริ่มต้น แต่ไม่ได้เปิดใช้งานใน Debian และ RHEL
ความพยายามในการเอารัดเอาเปรียบของฉันมุ่งเน้นไปที่เมล็ดที่มี version> = 5.4-rc1 จากการกระทำ bf74aa86e111 ฉันไม่ได้ตรวจสอบการใช้ประโยชน์จากเมล็ดที่เก่ากว่า 5.4-rc1 โดยใช้ tasklets อย่างไรก็ตาม การใช้ประโยชน์จากเมล็ดที่เก่ากว่านั้นก็เป็นไปได้เช่นกัน
เป็นที่กล่าวขวัญกันว่า ผู้วิจัยที่ระบุจุดอ่อนสามารถเตรียมการเอารัดเอาเปรียบได้ เพื่อรับสิทธิ์รูทบนระบบที่มีเคอร์เนลตั้งแต่เวอร์ชัน 5.4 และใหม่กว่า รวมถึงความเป็นไปได้ของการโจมตีที่ประสบความสำเร็จบน Ubuntu 20.04.02 LTS
การทำงานของช่องโหว่นั้นลดลงเหลือเพียงการสร้างห่วงโซ่ของการเรียกไปยังบล็อคที่คล้ายกัน ("แกดเจ็ต") เพื่อให้ได้ฟังก์ชันที่จำเป็น การโจมตีจำเป็นต้องเข้าถึงเพื่อสร้างซ็อกเก็ต CAN และอินเทอร์เฟซเครือข่าย vcan ที่กำหนดค่าไว้
ในที่สุด ว่ากันว่าปัญหายังคงมีอยู่ ในการแจกแจงส่วนใหญ่ แต่ต้องใช้เวลาหลายวันกว่าจะมีการเปิดตัวแพตช์ที่เกี่ยวข้อง
หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้คุณสามารถปรึกษา ลิงค์ต่อไปนี้