ช่องโหว่ใน VFS ของเคอร์เนล Linux ที่ทำให้คุณสามารถเพิ่มสิทธิ์ของคุณได้

มีการระบุช่องโหว่ (CVE-2022-0185) ใน Filesystem Context API ที่เคอร์เนล Linux มอบให้ ซึ่งอนุญาตให้ผู้ใช้ภายในเครื่องได้รับสิทธิ์รูทบนระบบ นักวิจัยที่ระบุปัญหาได้เผยแพร่การสาธิตช่องโหว่ที่ช่วยให้คุณสามารถรันโค้ดในฐานะรูทบน Ubuntu 20.04 ในการกำหนดค่าเริ่มต้น รหัสช่องโหว่นี้ได้รับการวางแผนให้โพสต์บน GitHub ภายในหนึ่งสัปดาห์หลังจากการแจกแจงเผยแพร่การอัปเดตที่แก้ไขช่องโหว่

ช่องโหว่นี้มีอยู่ในฟังก์ชัน Legacy_parse_param() ใน VFS และเกิดจากความล้มเหลวในการตรวจสอบขนาดสูงสุดของพารามิเตอร์ที่ให้ไว้ในระบบไฟล์ที่ไม่รองรับ Filesystem Context API อย่างเหมาะสม การส่งผ่านพารามิเตอร์ที่มีขนาดใหญ่เกินไปอาจทำให้เกิดโอเวอร์โฟลว์ของตัวแปรจำนวนเต็มที่ใช้ในการคำนวณขนาดของข้อมูลที่จะเขียน - โค้ดมีการตรวจสอบบัฟเฟอร์ล้น "if (len > PAGE_SIZE - 2 - ขนาด)" ซึ่งไม่ ใช้งานได้หากค่าขนาดมากกว่า 4094 สำหรับจำนวนเต็มล้นผ่านขอบเขตล่าง (จำนวนเต็มน้อยเกินไป เมื่อส่ง 4096 - 2 - 4095 ไปยัง int ที่ไม่ได้ลงนาม ผลลัพธ์คือ 2147483648)

ข้อผิดพลาดนี้ทำให้เมื่อเข้าถึงอิมเมจระบบไฟล์ที่ออกแบบมาเป็นพิเศษ ทำให้เกิดบัฟเฟอร์ล้นและเขียนทับข้อมูลเคอร์เนลตามพื้นที่หน่วยความจำที่จัดสรร หากต้องการใช้ประโยชน์จากช่องโหว่ คุณต้องมีสิทธิ์ CAP_SYS_ADMIN เช่น อำนาจของผู้ดูแลระบบ ปัญหาคือผู้ใช้ที่ไม่มีสิทธิ์สามารถรับสิทธิ์ดังกล่าวในคอนเทนเนอร์ที่แยกได้ หากระบบรองรับเนมสเปซของผู้ใช้ที่เปิดใช้งาน ตัวอย่างเช่น เนมสเปซของผู้ใช้จะเปิดใช้งานตามค่าเริ่มต้นบน Ubuntu และ Fedora แต่ไม่ได้เปิดใช้งานบน Debian และ RHEL (เว้นแต่ว่าจะใช้แพลตฟอร์มการแยกคอนเทนเนอร์)

ปัญหาเกิดขึ้นตั้งแต่ Linux kernel 5.1 และได้รับการแก้ไขแล้วในการอัพเดต 5.16.2, 5.15.16, 5.10.93, 5.4.173 เมื่อวานนี้ การอัปเดตแพ็คเกจที่แก้ไขช่องโหว่ได้เปิดตัวแล้วสำหรับ RHEL, Debian, Fedora และ Ubuntu การแก้ไขยังไม่พร้อมใช้งานบน Arch Linux, Gentoo, SUSE และ openSUSE วิธีแก้ปัญหาด้านความปลอดภัยสำหรับระบบที่ไม่ได้ใช้การแยกคอนเทนเนอร์ คุณสามารถตั้งค่า sysctl "user.max_user_namespaces" เป็น 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/sysctl.d/userns.conf

ที่มา: opennet.ru

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