ช่องโหว่ในระบบย่อยเคอร์เนล Linux Netfilter

พบช่องโหว่ (CVE-2021-22555) ใน Netfilter ซึ่งเป็นระบบย่อยของเคอร์เนล Linux ที่ใช้ในการกรองและแก้ไขแพ็กเก็ตเครือข่าย ซึ่งอนุญาตให้ผู้ใช้ภายในเครื่องได้รับสิทธิ์รูทบนระบบ รวมถึงในขณะที่อยู่ในคอนเทนเนอร์ที่แยกออกมา มีการเตรียมต้นแบบการทำงานของช่องโหว่ที่ข้ามกลไกการป้องกัน KASLR, SMAP และ SMEP สำหรับการทดสอบ นักวิจัยที่ค้นพบช่องโหว่นี้ได้รับรางวัล 20 ดอลลาร์จาก Google สำหรับการระบุวิธีการหลีกเลี่ยงการแยกคอนเทนเนอร์ Kubernetes ในคลัสเตอร์ kCTF

ปัญหามีมาตั้งแต่เคอร์เนล 2.6.19 ซึ่งเปิดตัวเมื่อ 15 ปีที่แล้ว และเกิดจากจุดบกพร่องในตัวจัดการ IPT_SO_SET_REPLACE และ IP6T_SO_SET_REPLACE ที่ทำให้เกิดบัฟเฟอร์ล้นเมื่อส่งพารามิเตอร์ที่จัดรูปแบบพิเศษผ่านการเรียก setsockopt ในโหมดที่เข้ากันได้ ภายใต้สถานการณ์ปกติ เฉพาะผู้ใช้รูทเท่านั้นที่สามารถโทรไปที่ compat_setsockopt() แต่ผู้ใช้ที่ไม่มีสิทธิ์บนระบบที่เปิดใช้งานการรองรับเนมสเปซที่เปิดใช้งานก็สามารถรับสิทธิ์ที่จำเป็นในการโจมตีได้เช่นกัน

ผู้ใช้สามารถสร้างคอนเทนเนอร์ที่มีผู้ใช้รูทแยกต่างหากและใช้ประโยชน์จากช่องโหว่จากที่นั่น ตัวอย่างเช่น "เนมสเปซผู้ใช้" จะเปิดใช้งานตามค่าเริ่มต้นบน Ubuntu และ Fedora แต่ไม่ได้เปิดใช้งานบน Debian และ RHEL แพทช์แก้ไขช่องโหว่ถูกนำมาใช้ในเคอร์เนล Linux เมื่อวันที่ 13 เมษายน การอัปเดตแพ็คเกจถูกสร้างขึ้นโดยโครงการ Debian, Arch Linux และ Fedora ใน Ubuntu, RHEL และ SUSE กำลังเตรียมการอัปเดต

ปัญหาเกิดขึ้นในฟังก์ชัน xt_compat_target_from_user() เนื่องจากการคำนวณขนาดหน่วยความจำไม่ถูกต้องเมื่อบันทึกโครงสร้างเคอร์เนลหลังการแปลงจากการแสดงแบบ 32 บิตเป็น 64 บิต จุดบกพร่องนี้ทำให้สามารถเขียนไบต์ว่างสี่ไบต์ไปยังตำแหน่งใดๆ นอกเหนือจากบัฟเฟอร์ที่จัดสรรซึ่งล้อมรอบด้วยออฟเซ็ต 0x4C คุณลักษณะนี้เพียงพอที่จะสร้างช่องโหว่ที่อนุญาตให้ได้รับสิทธิ์รูท - โดยการล้าง m_list->ตัวชี้ถัดไปในโครงสร้าง msg_msg เงื่อนไขจะถูกสร้างขึ้นสำหรับการเข้าถึงข้อมูลหลังจากเพิ่มหน่วยความจำ (ใช้งานฟรี) ซึ่ง จากนั้นใช้เพื่อรับข้อมูลเกี่ยวกับที่อยู่และการเปลี่ยนแปลงโครงสร้างอื่น ๆ ผ่านการยักย้ายของการเรียกระบบ msgsnd()

ที่มา: opennet.ru

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