พบช่องโหว่ XNUMX รายการใน Snap และอนุญาตให้เรียกใช้โค้ดในฐานะ root

Qualys เปิดตัว ข่าวที่ฉันระบุ สองจุดอ่อน (CVE-2021-44731 และ CVE-2021-44730) ในยูทิลิตี้ snap-confineส่งด้วยแฟล็ก SUID รูทและเรียกใช้โดยกระบวนการ snapd เพื่อสร้างสภาพแวดล้อมที่สามารถเรียกทำงานได้สำหรับแอปพลิเคชันที่แจกจ่ายในแพ็คเกจ snap

ในบล็อกโพสต์ระบุว่า ช่องโหว่ทำให้ผู้ใช้ในพื้นที่ที่ไม่ได้รับสิทธิพิเศษสามารถเรียกใช้โค้ดเป็น root . ได้ ในระบบ

ช่องโหว่แรกทำให้สามารถโจมตีด้วยการจัดการลิงก์ทางกายภาพได้แต่ต้องการปิดการใช้งานการป้องกันฮาร์ดลิงก์ของระบบ (โดยการตั้งค่า sysctl fs.protected_hardlinks เป็น 0)

ปัญหา เกิดจากการตรวจสอบตำแหน่งของไฟล์ปฏิบัติการที่ไม่ถูกต้อง ของยูทิลิตี้ snap-update-ns และ snap-discard-ns ที่ทำงานเป็นรูท เส้นทางไปยังไฟล์เหล่านี้คำนวณในฟังก์ชัน sc_open_snapd_tool() ตามเส้นทางของตัวเองจาก /proc/self/exe ช่วยให้คุณสร้างฮาร์ดลิงก์เพื่อจำกัดขอบเขตในไดเร็กทอรีของคุณ และใส่ตัวเลือกของคุณลงใน snap-update-ns และ snap -discard-ns ในไดเร็กทอรีนี้ เมื่อเปิดใช้งานจากฮาร์ดลิงก์ snap-confine as root จะเรียกใช้ไฟล์ snap-update-ns และ snap-discard-ns ที่ถูกแทนที่โดยผู้โจมตีจากไดเร็กทอรีปัจจุบัน

การใช้ประโยชน์จากช่องโหว่นี้ทำให้ผู้ใช้ที่ไม่มีสิทธิ์ได้รับสิทธิ์รูทบนโฮสต์ที่มีช่องโหว่ได้สำเร็จ นักวิจัยด้านความปลอดภัยของ Qualys สามารถตรวจสอบช่องโหว่ พัฒนาช่องโหว่ และรับสิทธิ์การรูทเต็มรูปแบบบนการติดตั้ง Ubuntu เริ่มต้นโดยอิสระ

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

ช่องโหว่ที่สองเกิดจากสภาพการแข่งขัน และสามารถใช้ประโยชน์ได้ในการกำหนดค่าเดสก์ท็อป Ubuntu เริ่มต้น เพื่อให้ช่องโหว่ทำงานบนเซิร์ฟเวอร์ Ubuntu ได้สำเร็จ คุณต้องเลือกแพ็คเกจใดแพ็คเกจหนึ่งจากส่วน "สแน็ปเซิร์ฟเวอร์เด่น" ระหว่างการติดตั้ง

สภาพการแข่งขัน ปรากฏในฟังก์ชัน setup_private_mount() ถูกเรียกระหว่างการเตรียมเนมสเปซจุดต่อเชื่อมสำหรับแพ็คเกจทันที ฟังก์ชันนี้จะสร้างไดเร็กทอรีชั่วคราว "/tmp/snap.$SNAP_NAME/tmp" หรือใช้ไดเร็กทอรีที่มีอยู่เพื่อเชื่อมโยงและติดตั้งไดเร็กทอรีสำหรับแพ็กเกจ snap

เนื่องจากชื่อของไดเร็กทอรีชั่วคราวสามารถคาดเดาได้ ผู้โจมตีสามารถเปลี่ยนเนื้อหาเป็นลิงก์สัญลักษณ์หลังจากตรวจสอบเจ้าของแล้ว แต่ก่อนที่จะเรียกระบบเมานต์ ตัวอย่างเช่น คุณสามารถสร้าง symlink "/tmp/snap.lxd/tmp" ในไดเร็กทอรี /tmp/snap.lxd ที่ชี้ไปยังไดเร็กทอรีที่กำหนดเอง และการเรียก mount() จะเป็นไปตาม symlink และติดตั้งไดเร็กทอรีในช่องว่าง ของชื่อ

ในทำนองเดียวกัน คุณสามารถเมาต์เนื้อหาใน /var/lib และแทนที่ /var/lib/snapd/mount/snap.snap-store.user-fstab จัดเรียงเพื่อเมาต์ไดเร็กทอรี /etc ของคุณในแพ็คเกจเนมสเปซ snap เพื่อโหลดไลบรารีของคุณ จากการเข้าถึงรูทโดยแทนที่ /etc/ld.so.preload

เป็นที่สังเกตว่า การสร้างช่องโหว่กลายเป็นงานที่ไม่สำคัญเนื่องจากยูทิลิตี้ snap-confine นั้นเขียนโดยใช้เทคนิคการเขียนโปรแกรมที่ปลอดภัย (snapd เขียนใน Go แต่ C ใช้สำหรับ snap-confine) มีการป้องกันตามโปรไฟล์ AppArmor กรองการเรียกระบบตามกลไก seccomp และใช้เนมสเปซเมานต์ สำหรับการแยกตัว

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

สุดท้ายนี้ต้องบอกเลยว่าปัญหาได้รับการแก้ไขแล้วในการอัปเดตแพ็คเกจ snapd สำหรับ Ubuntu เวอร์ชัน 21.10, 20.04 และ 18.04

นอกเหนือจากการแจกจ่ายอื่น ๆ ที่ใช้ Snap แล้ว Snapd 2.54.3 ยังได้รับการเผยแพร่ซึ่งนอกเหนือจากปัญหาข้างต้นแล้วยังแก้ไขช่องโหว่อื่น (CVE-2021-4120) ซึ่งช่วยให้เมื่อติดตั้งแพ็คเกจปลั๊กอินที่ออกแบบมาเป็นพิเศษ แทนที่กฎ AppArmor โดยพลการและข้ามข้อจำกัดการเข้าถึงที่ตั้งไว้สำหรับแพ็คเกจ

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


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

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

*

*

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