ช่องโหว่รูทเฉพาะในชุดเครื่องมือการจัดการแพ็คเกจ Snap

Qualys ได้ระบุช่องโหว่ 2021 รายการ (CVE-44731-2021, CVE-44730-21.10) ในยูทิลิตี้ snap-confine ซึ่งมาพร้อมกับ SUID root flag และถูกเรียกโดยกระบวนการ snapd เพื่อสร้างสภาพแวดล้อมที่ปฏิบัติการได้สำหรับแอปพลิเคชันที่จัดส่งในแพ็คเกจที่มีในตัวเอง ในรูปแบบสแนป ช่องโหว่นี้ทำให้ผู้ใช้ที่ไม่มีสิทธิ์ในพื้นที่สามารถรันโค้ดที่มีสิทธิ์รูทบนระบบได้ ปัญหาได้รับการแก้ไขแล้วในการอัพเดตแพ็คเกจ snapd วันนี้สำหรับ Ubuntu 20.04, 18.04 และ XNUMX

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

ช่องโหว่ที่สองเกิดจากสภาวะการแข่งขันและสามารถหาประโยชน์ได้ในการกำหนดค่าเริ่มต้นของ Ubuntu Desktop เพื่อให้การหาช่องโหว่ทำงานได้สำเร็จในเซิร์ฟเวอร์ Ubuntu คุณต้องเลือกแพ็คเกจใดแพ็คเกจหนึ่งจากส่วน "Featured Server Snaps" เมื่อทำการติดตั้ง สภาพการแข่งขันปรากฏชัดในฟังก์ชัน setup_private_mount() ที่ถูกเรียกระหว่างการเตรียมเนมสเปซจุดเมานท์สำหรับแพ็คเกจ snap ฟังก์ชันนี้สร้างไดเร็กทอรีชั่วคราว “/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 เขียนใน Go โดยใช้เทคนิคการเขียนโปรแกรมที่ปลอดภัย มีการป้องกันตามโปรไฟล์ AppArmor กรองการเรียกของระบบตามกลไก seccomp และใช้ เนมสเปซเมานต์สำหรับการแยก อย่างไรก็ตาม นักวิจัยสามารถเตรียมช่องโหว่การทำงานเพื่อรับสิทธิ์รูทบนระบบได้ รหัสช่องโหว่จะถูกเผยแพร่ภายในไม่กี่สัปดาห์หลังจากที่ผู้ใช้ติดตั้งการอัปเดตที่ให้มา

ที่มา: opennet.ru

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