พวกเขาพบช่องโหว่ VFS ใน Linux ที่อนุญาตให้ยกระดับสิทธิ์ได้

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

เป็นที่กล่าวขวัญกันว่า ปัญหาคือผู้ใช้ที่ไม่มีสิทธิ์จะได้รับสิทธิ์ดังกล่าวในคอนเทนเนอร์แยก หากเปิดใช้งานการรองรับเนมสเปซผู้ใช้บนระบบ

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

ช่องโหว่ มีอยู่ในฟังก์ชัน legacy_parse_param() ใน VFS และเกิดจากการขาดการตรวจสอบขนาดสูงสุดของพารามิเตอร์ที่ให้มาอย่างเหมาะสมบนระบบไฟล์ที่ไม่สนับสนุน API บริบทของระบบไฟล์

เมื่อเร็ว ๆ นี้เพื่อนหลายคนในทีม CTF Crusaders of Rust ของฉันและฉันพบเคอร์เนลฮีปลินุกซ์ 0 วันล้น เราพบจุดบกพร่องผ่านการ fuzzing กับ syzkaller และพัฒนาอย่างรวดเร็วจนสามารถใช้ประโยชน์จาก Ubuntu LPE ได้ จากนั้นเราเขียนใหม่เพื่อหลีกเลี่ยงและรูทโครงสร้างพื้นฐาน Kubernetes CTF ที่แข็งของ Google ข้อบกพร่องนี้ส่งผลต่อเคอร์เนลทุกเวอร์ชันตั้งแต่ 5.1 (กำลังดำเนินการ 5.16) และได้รับมอบหมาย CVE-2022-0185 เราได้รายงานสิ่งนี้ไปยังรายชื่อการส่งเมลการแจกจ่ายและการรักษาความปลอดภัยของ Linux และจุดบกพร่องได้รับการแก้ไขแล้วตั้งแต่เผยแพร่บทความนี้

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

ข้อผิดพลาดนี้ช่วยให้เมื่อเข้าถึงอิมเมจ FS ที่สร้างขึ้นเป็นพิเศษ ทำให้เกิดบัฟเฟอร์ล้นและเขียนทับข้อมูลเคอร์เนลตามพื้นที่หน่วยความจำที่จัดสรร ในการใช้ประโยชน์จากช่องโหว่นี้ จำเป็นต้องมีสิทธิ์ CAP_SYS_ADMIN เช่น สิทธิ์ของผู้ดูแลระบบ

ในปี 2022 เพื่อนร่วมทีมของเราได้แก้ไขเพื่อหาวันที่ 0 ในปี 2022 เราไม่ค่อยแน่ใจว่าจะเริ่มต้นอย่างไร แต่เนื่องจากทีมของเรามีความคุ้นเคยกับช่องโหว่เคอร์เนลในระดับสูง เราจึงตัดสินใจซื้อเซิร์ฟเวอร์เฉพาะบางตัว และเรียกใช้ syzkaller fuzzer ของ Google ในวันที่ 6 มกราคม เวลา 22 น. PST chop30 ได้รับรายงานต่อไปนี้เกี่ยวกับความล้มเหลวของ KASAN ใน legacy_parse_param: slab-out-of-bounds เขียนใน legacy_parse_param ดูเหมือนว่า syzbot จะพบปัญหานี้เมื่อ 0 วันก่อนเมื่อ fuzzing Android แต่ปัญหาไม่ได้รับการจัดการและเราคิดอย่างไร้เดียงสาว่าไม่มีใครสังเกตเห็น

ท้ายที่สุด เป็นเรื่องที่ควรค่าแก่การกล่าวขวัญถึงปัญหาที่เกิดขึ้นตั้งแต่เคอร์เนลลินุกซ์เวอร์ชัน 5.1 และได้รับการแก้ไขในการอัปเดตที่เผยแพร่เมื่อไม่กี่วันก่อนในเวอร์ชัน 5.16.2, 5.15.16, 5.10.93, 5.4.173

นอกเหนือจากนั้น การอัปเดตแพ็คเกจช่องโหว่ได้รับการเผยแพร่แล้ว สำหรับ RHELdebianfedora และ อูบุนตู. ในขณะที่วิธีแก้ปัญหายังไม่มีให้บริการใน Arch ลินุกซ์GentooSUSE y openSUSE

ในกรณีเหล่านี้ มีการกล่าวถึงว่าเป็นโซลูชันการรักษาความปลอดภัยสำหรับระบบที่ไม่ใช้การแยกคอนเทนเนอร์ คุณสามารถตั้งค่าของ sysctl "user.max_user_namespaces" เป็น 0:

นักวิจัยที่พบปัญหาได้ตีพิมพ์ ตัวอย่างของการเอารัดเอาเปรียบ que อนุญาตให้เรียกใช้โค้ดเป็นรูทบน Ubuntu 20.04 ในการกำหนดค่าเริ่มต้น มีการวางแผนว่า โค้ดการเอารัดเอาเปรียบถูกเผยแพร่บน GitHub ภายในหนึ่งสัปดาห์หลังจากนั้น ที่แจกจ่ายออกการปรับปรุงที่แก้ไขช่องโหว่

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบรายละเอียดได้ในไฟล์ ลิงค์ต่อไปนี้


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   กาเลโก dijo

    อีกเหตุผลหนึ่งที่จะไม่แตะสแน็ปด้วยไม้