พวกเขาตรวจพบช่องโหว่ในคุกเพลิงที่อนุญาตให้รูทเข้าถึงระบบได้

เพิ่งออกข่าวว่า มีการระบุช่องโหว่ (อยู่ในรายการแล้วภายใต้ CVE-2022-31214) ในเครื่องมือแซนด์บ็อกซ์แอป Firejailมีรายละเอียดว่าข้อบกพร่องที่ตรวจพบอาจทำให้ผู้ใช้ในพื้นที่สามารถรูทบนระบบโฮสต์ได้

Firejail ใช้กลไกเนมสเปซ AppArmor และการกรองการเรียกระบบ (seccomp-bpf) ใน Linux สำหรับการแยกออก แต่ต้องการสิทธิ์ขั้นสูงในการกำหนดค่าการวางจำหน่ายแบบแยก ซึ่งได้มาจากการรวมยูทิลิตี้แฟล็ก suid root หรือรันด้วย sudo

ช่องโหว่เกิดจากข้อผิดพลาดในตรรกะของตัวเลือก “–join=” », ออกแบบมาเพื่อเชื่อมต่อกับสภาพแวดล้อมแบบแยกส่วนที่กำลังทำงานอยู่ (คล้ายกับคำสั่งล็อกอินสำหรับสภาพแวดล้อมแบบแซนด์บ็อกซ์) กับสภาพแวดล้อมที่กำหนดโดย ID ของกระบวนการที่ทำงานอยู่ในนั้น ในระยะก่อนการเปิดตัว Firejail จะตรวจจับสิทธิ์ของกระบวนการที่ระบุและนำไปใช้กับกระบวนการใหม่ที่รวมสภาพแวดล้อมด้วยตัวเลือก “–join”

ก่อนเชื่อมต่อ ตรวจสอบว่ากระบวนการที่ระบุกำลังทำงานในสภาพแวดล้อม firejail หรือไม่ การตรวจสอบนี้จะประเมินการมีอยู่ของไฟล์ /run/firejail/mnt/join เพื่อใช้ประโยชน์จากจุดอ่อน ผู้โจมตีสามารถจำลองสภาพแวดล้อม firejail ที่ไม่โดดเดี่ยวที่สมมติขึ้นได้ ใช้เนมสเปซเมานต์แล้วเชื่อมต่อโดยใช้ตัวเลือก “–join”

หากการกำหนดค่าไม่เปิดใช้งานโหมดของการห้ามรับสิทธิ์เพิ่มเติมในกระบวนการใหม่ (prctl NO_NEW_PRIVS) firejail จะเชื่อมต่อผู้ใช้กับสภาพแวดล้อมที่สมมติขึ้นและพยายามใช้การกำหนดค่าเนมสเปซผู้ใช้ของตัวระบุผู้ใช้ (ผู้ใช้เนมสเปซ) ของกระบวนการ init ( พีไอดี 1).

ตรรกะส่วนใหญ่ที่อยู่เบื้องหลังฟังก์ชันการรวมอยู่ในซอร์สโค้ด จากไฟล์ `src/firejail/join.c` ส่วนสำคัญของรหัสถูกเรียกใช้งานด้วย สิทธิ์ระดับสูง (มีผล UID 0) ID ของกระบวนการที่ส่งผ่านเป็นคำสั่ง อาร์กิวเมนต์บรรทัดได้รับการตรวจสอบเพื่อดูว่าเป็น r . หรือไม่ภาชนะและกำหนดคุณสมบัติบางอย่างที่ นอกจากนี้ยังนำไปใช้กับกระบวนการเข้าใหม่

เกณฑ์หลักในการตัดสินใจว่าจะเข้าร่วมกระบวนการเป้าหมายหรือไม่ สำเร็จคือการมีอยู่ของไฟล์ในเนมสเปซเมานต์ของเป้าหมาย พบกระบวนการใน /run/firejail/mnt/join การตรวจสอบนี้เสร็จสิ้นบน fฟังก์ชัน `is_ready_for_join()` ไฟล์ถูกเปิดโดยใช้ lแฟล็ก `O_RDONLY|O_CLOEXEC` และผลลัพธ์การติดตาม `fstat()` ควร ตรงตามข้อกำหนดต่อไปนี้:

– ไฟล์ต้องเป็นไฟล์ปกติ
– ไฟล์จะต้องเป็นเจ้าของโดยรหัสผู้ใช้ 0 (ตามที่เห็นจากผู้ใช้เริ่มต้น
เนมสเปซ)
– ไฟล์ต้องมีขนาด 1 ไบต์

เป็นผลให้ กระบวนการที่เชื่อมต่อผ่าน "firejail --join" จะจบลงในเนมสเปซ ID ผู้ใช้เดิมของผู้ใช้ ด้วยเอกสิทธิ์ไม่เปลี่ยนแปลง แต่อยู่ในพื้นที่จุดเชื่อมต่อที่ต่างกัน ซึ่งผู้โจมตีควบคุมโดยสมบูรณ์

เชลล์ที่ "เข้าร่วม" ที่เป็นผลลัพธ์จะอยู่บนผู้ใช้เริ่มต้น
เนมสเปซยังคงรักษาสิทธิ์ผู้ใช้ปกติเดิมไว้อย่างไรก็ตาม เนมสเปซการเมานท์จะเป็นเนมสเปซที่ถูกควบคุมโดยผู้โจมตี เนื่องจาก
ยังไม่ได้ใช้การกำหนดค่า nonewprivs ผู้โจมตีสามารถทำได้ในขณะนี้
รันโปรแกรม setuid-root ภายในเนมสเปซการเมานต์นี้

โดยเฉพาะอย่างยิ่ง ผู้โจมตีสามารถเรียกใช้โปรแกรม setuid-root ในพื้นที่ของจุดเชื่อมต่อที่สร้างขึ้น ทำให้สามารถเปลี่ยนแปลงการกำหนดค่า /etc/sudoers หรือพารามิเตอร์ PAM ในลำดับชั้นของไฟล์ และได้รับความสามารถในการเรียกใช้คำสั่งในฐานะรูท ใช้ sudo หรือยูทิลิตี้ของมัน

สุดท้าย เป็นเรื่องที่ควรค่าแก่การกล่าวขวัญว่าได้มีการพัฒนาการหาประโยชน์จากการทำงาน ทดสอบกับเวอร์ชันปัจจุบันของ openSUSE, Debian, Arch, Gentoo และ Fedora ด้วยการติดตั้งยูทิลิตี้ firejail

ปัญหาได้รับการแก้ไขใน firejail เวอร์ชัน 0.9.70 เพื่อเป็นการแก้ไขปัญหาด้านความปลอดภัย คุณสามารถตั้งค่าคอนฟิก (/etc/firejail/firejail.config) เป็น "no join" และ "force-nonewprivs yes"

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


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

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

*

*

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