เมื่อไม่กี่วันก่อนมีข่าวออกมาว่า มีการระบุช่องโหว่ใน Netfilter (ระบบย่อยเคอร์เนล Linux ที่ใช้ในการกรองและแก้ไขแพ็กเก็ตเครือข่าย) ซึ่ง อนุญาตให้ผู้ใช้ในพื้นที่ได้รับสิทธิ์รูท ในระบบแม้ในภาชนะที่มีฉนวนหุ้ม
ช่องโหว่ CVE-2021-22555 เป็นปัญหาที่มีมาตั้งแต่เคอร์เนล 2.6.19, เปิดตัวเมื่อ 15 ปีที่แล้ว และ is เกิดจากข้อผิดพลาดในไดรเวอร์ IPT_SO_SET_REPLACE และ IP6T_SO_SET_REPLACE ซึ่งทำให้บัฟเฟอร์ล้นเมื่อส่งพารามิเตอร์ที่ตกแต่งเป็นพิเศษผ่านการเรียก setockopt ในโหมด compat
บางที ณ จุดนี้หลายคนอาจสงสัยว่าเป็นไปได้อย่างไรที่ข้อบกพร่องในเคอร์เนล Linux จะไม่มีใครสังเกตเห็นเป็นเวลานาน และคำตอบก็คือแม้ว่าข้อบกพร่องที่มีอยู่ตั้งแต่ Linux 2.6.19 ช่องโหว่ถูกพบผ่านโค้ด ตรวจสอบแม้ว่ารหัส C จะไม่สามารถทำซ้ำได้ ดังนั้นจึงไม่สามารถใช้ประโยชน์ได้เนื่องจากไม่พบทรัพยากรที่จำเป็นในการยกระดับสิทธิ์ในขณะนั้น
ตัวอย่างเช่น การรองรับเนมสเปซผู้ใช้ที่ไม่มีสิทธิพิเศษอยู่ในเคอร์เนล 3.8 นอกจากนี้ การแจกแจงบางส่วนยังมีแพตช์ที่เพิ่ม sysctl เพื่อปิดใช้งานเนมสเปซผู้ใช้ที่ไม่มีสิทธิพิเศษ
ภายใต้สถานการณ์ปกติ เฉพาะผู้ใช้รูทเท่านั้นที่สามารถเรียก compat_setsockopt ()แต่ สิทธิ์ที่จำเป็น เพื่อทำการโจมตี นอกจากนี้ยังสามารถรับได้โดยผู้ใช้ที่ไม่มีสิทธิพิเศษ บนระบบที่เปิดใช้งานเนมสเปซผู้ใช้
CVE-2021-22555 เป็นช่องโหว่ในการเขียนสแต็กจากสแต็กที่มีอายุ 15 ปีใน Linux Netfilter ซึ่งมีประสิทธิภาพเพียงพอที่จะเลี่ยงการบรรเทาความปลอดภัยที่ทันสมัยทั้งหมดและบรรลุการเรียกใช้โค้ดเคอร์เนล
จึงได้อธิบายไว้ว่า ผู้ใช้ในพื้นที่สามารถสร้างคอนเทนเนอร์ที่มีผู้ใช้รูทแยกต่างหากและใช้ประโยชน์จากช่องโหว่จากที่นั่นผม. ตัวอย่างเช่น "เนมสเปซผู้ใช้" จะรวมอยู่ใน Ubuntu และ Fedora โดยค่าเริ่มต้น แต่จะไม่รวมใน Debian และ RHEL
ช่องโหว่นี้สามารถใช้ประโยชน์ได้โดยการเขียนทับ
m_list->next
ตัวชี้msg_msg
โครงสร้างและบรรลุผลฟรีหลังการใช้งาน ซึ่งมีประสิทธิภาพเพียงพอที่จะทำให้โค้ดเคอร์เนลของคุณทำงานผ่าน KASLR, SMAP และ SMEP
นอกจากนี้ ปัญหาเกิดขึ้นในฟังก์ชัน xt_compat_target_from_user () เนื่องจากการคำนวณขนาดหน่วยความจำไม่ถูกต้องเมื่อบันทึกโครงสร้างเคอร์เนลหลังจากแปลงจากการแสดงแบบ 32 บิตเป็น 64 บิต
ดังนั้นจึงมีการกล่าวถึงว่า ข้อผิดพลาดอนุญาตให้เขียนสี่ "ศูนย์" ไบต์ไปยังตำแหน่งใด ๆ นอกบัฟเฟอร์ กำหนด จำกัด โดยออฟเซ็ต 0x4C ด้วยเหตุนี้จึงมีการกล่าวไว้ว่า คุณสมบัตินี้เพียงพอที่จะสร้างช่องโหว่ ซึ่งอนุญาตให้ได้รับสิทธิ์รูท: โดยการลบ m_list-> ตัวชี้ถัดไปในโครงสร้าง msg_msg เงื่อนไขในการเข้าถึงข้อมูลหลังจากทำให้หน่วยความจำว่างได้ถูกสร้างขึ้น (ใช้ฟรีภายหลัง) ซึ่งถูกใช้เพื่อรับข้อมูลเกี่ยวกับที่อยู่และการเปลี่ยนแปลง ไปยังโครงสร้างอื่น ๆ โดยจัดการการเรียกระบบ msgsnd ()
เกี่ยวกับรายงานข้อผิดพลาด เช่นเดียวกับช่องโหว่ใดๆ ที่ตรวจพบ สิ่งนี้เกี่ยวข้องกับกระบวนการและรายงานที่ส่งไปยังผู้พัฒนาเคอร์เนลในเดือนเมษายน ซึ่งหลังจากนั้นจะได้รับการแก้ไขในสองสามวันและแพตช์ที่รวมอยู่ในการแจกจ่ายที่รองรับทั้งหมด ดังนั้น ข้อมูลเกี่ยวกับจุดบกพร่องสามารถเผยแพร่ได้ในภายหลัง
โครงการ Debian, Arch Linux และ Fedora ได้สร้างการอัปเดตแพ็คเกจแล้ว เริ่มต้นด้วย Ubuntu การอัปเดต RHEL และ SUSE อยู่ในระหว่างดำเนินการ เพราะความผิดพลาดนั้นร้ายแรง หาประโยชน์ได้ในทางปฏิบัติ และช่วยให้หนีออกจากภาชนะได้ Google ประเมินการค้นพบที่ $ 10,000 และเพิ่มรางวัลเป็นสองเท่า ถึงผู้วิจัยที่ระบุช่องโหว่และเพื่อระบุวิธีการหลีกเลี่ยงการแยกคอนเทนเนอร์ Kubernetes บนคลัสเตอร์ kCTF
สำหรับการทดสอบ ได้มีการเตรียมต้นแบบการทำงานของช่องโหว่ไว้ ที่ข้ามกลไกการป้องกัน KASLR, SMAP และ SMEP
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม คุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้.