ช่องโหว่ใน networkd-dispatcher ที่อนุญาตการเข้าถึงรูท

นักวิจัยด้านความปลอดภัยจาก Microsoft ได้ระบุช่องโหว่ 2022 รายการ (CVE-29799-2022, CVE-29800-2.2) ในบริการ networkd-dispatcher ซึ่งมีชื่อรหัสว่า Nimbuspwn ซึ่งอนุญาตให้ผู้ใช้ที่ไม่มีสิทธิ์สามารถรันคำสั่งที่กำหนดเองด้วยสิทธิ์ root ได้ ปัญหานี้ได้รับการแก้ไขแล้วในการเปิดตัว networkd-dispatcher XNUMX ยังไม่มีข้อมูลเกี่ยวกับการเผยแพร่การอัปเดตตามการแจกจ่าย (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux)

Networkd-dispatcher ใช้ใน Linux หลายๆ รุ่น รวมถึง Ubuntu ซึ่งใช้กระบวนการพื้นหลัง systemd-networkd เพื่อกำหนดค่าพารามิเตอร์เครือข่าย และทำหน้าที่คล้ายกับ NetworkManager-dispatcher เช่น มีส่วนร่วมในการเรียกใช้สคริปต์เมื่อสถานะของการเชื่อมต่อเครือข่ายเปลี่ยนแปลง เช่น ใช้ในการเปิดใช้ VPN หลังจากสร้างการเชื่อมต่อเครือข่ายหลักแล้ว

กระบวนการเบื้องหลังที่เกี่ยวข้องกับ networkd-dispatcher ทำงานเป็นรูทและรับสัญญาณเหตุการณ์ผ่าน D-Bus ข้อมูลเกี่ยวกับเหตุการณ์ที่เกี่ยวข้องกับการเปลี่ยนแปลงสถานะการเชื่อมต่อเครือข่ายจะถูกส่งโดยบริการ systemd-networkd ปัญหาคือผู้ใช้ที่ไม่มีสิทธิ์สามารถสร้างเหตุการณ์สถานะที่ไม่มีอยู่จริงและทริกเกอร์สคริปต์ให้ดำเนินการในฐานะรูท

Systemd-networkd ได้รับการออกแบบมาเพื่อรันเฉพาะสคริปต์ตัวจัดการระบบที่อยู่ในไดเร็กทอรี /etc/networkd-dispatcher และไม่สามารถเข้าถึงได้สำหรับการแทนที่ผู้ใช้ แต่เนื่องจากช่องโหว่ (CVE-2022-29799) ในโค้ดประมวลผลพาธของไฟล์ จึงมี ความเป็นไปได้ของไดเร็กทอรีฐานนอกขอบเขตและเรียกใช้สคริปต์ที่กำหนดเอง โดยเฉพาะอย่างยิ่งเมื่อสร้างเส้นทางไฟล์ไปยังสคริปต์จะใช้ค่า OperationalState และ AdministrativeState ที่ส่งผ่าน D-Bus ซึ่งไม่ได้ล้างอักขระพิเศษ ผู้โจมตีสามารถสร้างสถานะของตนเอง ซึ่งชื่อมีอักขระ “../” และเปลี่ยนเส้นทางการเรียก networkd-dispatcher ไปยังไดเร็กทอรีอื่น

ช่องโหว่ที่สอง (CVE-2022-29800) เกี่ยวข้องกับสภาพการแข่งขัน - ระหว่างการตรวจสอบพารามิเตอร์สคริปต์ (ที่เป็นของ root) และเรียกใช้ มีช่วงเวลาสั้น ๆ เพียงพอที่จะแทนที่ไฟล์และข้ามการตรวจสอบว่า สคริปต์เป็นของผู้ใช้รูท นอกจากนี้ networkd-dispatcher ไม่ได้ตรวจสอบลิงก์สัญลักษณ์ รวมถึงการเรียกใช้สคริปต์ผ่านกระบวนการย่อย การเรียก Popen ซึ่งทำให้องค์กรของการโจมตีง่ายขึ้นอย่างมาก

เทคนิคการดำเนินงาน:

  • ไดเร็กทอรี “/tmp/nimbuspwn” และลิงก์สัญลักษณ์ “/tmp/nimbuspwn/poc.d” ถูกสร้างขึ้นโดยชี้ไปที่ไดเร็กทอรี “/sbin” ซึ่งใช้ในการตรวจสอบไฟล์ปฏิบัติการที่ root เป็นเจ้าของ
  • สำหรับไฟล์ปฏิบัติการจาก “/sbin” ไฟล์ที่มีชื่อเดียวกันจะถูกสร้างขึ้นในไดเร็กทอรี “/tmp/nimbuspwn” ตัวอย่างเช่น สำหรับไฟล์ “/sbin/vgs” ไฟล์ปฏิบัติการ “/tmp/nimbuspwn/vgs” คือ สร้างโดยผู้ใช้ที่ไม่มีสิทธิพิเศษซึ่งมีการวางโค้ดที่ผู้โจมตีต้องการเรียกใช้
  • สัญญาณจะถูกส่งผ่าน D-Bus ไปยังกระบวนการ networkd-dispatcher ที่ระบุค่า “../../../tmp/nimbuspwn/poc” ใน OperationalState ในการส่งสัญญาณในเนมสเปซ“ org.freedesktop.network1” มีการใช้ความสามารถในการเชื่อมต่อตัวจัดการกับ systemd-networkd เช่นผ่านการยักย้ายด้วย gpgv หรือ epmd หรือคุณสามารถใช้ประโยชน์จากความจริงที่ว่า systemd-networkd ไม่ได้ทำงานตามค่าเริ่มต้น (เช่น บน Linux Mint)
  • หลังจากรับสัญญาณแล้ว Networkd-dispatcher จะสร้างรายการไฟล์ปฏิบัติการที่ผู้ใช้รูทเป็นเจ้าของและพร้อมใช้งานในไดเร็กทอรี “/etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d” ซึ่งเชื่อมโยงไปยัง "/sbin" จริงๆ
  • ในขณะที่ได้รับรายการไฟล์ แต่สคริปต์ยังไม่ได้เปิดตัว ลิงก์สัญลักษณ์จะถูกเปลี่ยนเส้นทางจาก “/tmp/nimbuspwn/poc.d” ไปที่ “/tmp/nimbuspwn” และ networkd-dispatcher จะเปิดตัว สคริปต์ที่โฮสต์โดยผู้โจมตีที่มีสิทธิ์รูท

ช่องโหว่ใน networkd-dispatcher ที่อนุญาตการเข้าถึงรูท


ที่มา: opennet.ru

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