การโจมตีระบบยูนิกซ์: การโจมตีผ่าน CUPS, Part I
สรุป
- CVE-2024-47176:
cups-browsed <= 2.0.1 bind กับ UDP INADDR_ANY:631 ทำให้ผู้โจมตีสามารถ trigger คำขอ IPP Get-Printer-Attributes ไปยัง URL ที่ผู้โจมตีควบคุมได้
- CVE-2024-47076:
libcupsfilters <= 2.1b1 ใน cfGetPrinterAttributes5 ไม่ได้ตรวจสอบหรือ sanitize คุณสมบัติ IPP ที่ส่งกลับมาจากเซิร์ฟเวอร์ IPP ทำให้สามารถส่งข้อมูลที่ผู้โจมตีควบคุมเข้าสู่ระบบ CUPS ได้
- CVE-2024-47175:
libppd <= 2.1b1 ใน ppdCreatePPDFromIPP2 ไม่ได้ตรวจสอบหรือ sanitize คุณสมบัติ IPP ขณะเขียนลงไฟล์ PPD ชั่วคราว ทำให้สามารถฉีดข้อมูลที่ผู้โจมตีควบคุมได้
- CVE-2024-47177:
cups-filters <= 2.0.1 ใน foomatic-rip อนุญาตให้รันคำสั่งตามอำเภอใจผ่านพารามิเตอร์ PPD FoomaticRIPCommandLine
ผลกระทบ
- ผู้โจมตีระยะไกลที่ไม่ต้องยืนยันตัวตนสามารถแทนที่ IPP URL ของเครื่องพิมพ์ที่มีอยู่ด้วย URL อันตราย หรือติดตั้งเครื่องพิมพ์ใหม่ได้ และเมื่อเริ่มงานพิมพ์ก็สามารถรันคำสั่งตามอำเภอใจได้
ช่องทางเข้าสู่ระบบ
- WAN / อินเทอร์เน็ตสาธารณะ: ผู้โจมตีระยะไกลส่งแพ็กเก็ต UDP มายังพอร์ต 631 ได้ ไม่ต้องยืนยันตัวตน
- LAN: ผู้โจมตีในเครือข่ายภายในสามารถ spoof โฆษณา zeroconf / mDNS / DNS-SD เพื่อให้ได้ RCE ผ่าน code path เดียวกัน
ระบบที่ได้รับผลกระทบ
- ดิสทริบิวชัน GNU/Linux ส่วนใหญ่
- BSD บางส่วน
- Google Chromium / ChromeOS (เป็นไปได้)
- Oracle Solaris
- อื่น ๆ
วิธีแก้ไข
- ปิดใช้งานและลบบริการ
cups-browsed
- อัปเดตแพ็กเกจ CUPS ของระบบ
- หากไม่สามารถอัปเดตระบบได้ ให้บล็อกพอร์ต UDP 631 และทราฟฟิก DNS-SD ทั้งหมด
บทนำ
- เมื่อไม่กี่สัปดาห์ก่อน ระหว่างตั้งค่า Ubuntu บนโน้ตบุ๊กเครื่องใหม่ ผู้เขียนได้รันคำสั่ง
netstat -anu เพื่อตรวจสอบบริการที่กำลังฟังพอร์ต UDP
- พบว่า
cups-browsed กำลังใช้ UDP ฟังและตอบสนองบนพอร์ต 631 จากทุก network interface
cups-browsed มีหน้าที่เพิ่มเครื่องพิมพ์ใหม่เข้าสู่ระบบโดยอัตโนมัติ
cups-browsed คืออะไร?
cups-browsed เป็นส่วนหนึ่งของระบบ CUPS ทำหน้าที่ค้นหาเครื่องพิมพ์ใหม่และเพิ่มเข้าไปในระบบโดยอัตโนมัติ
- ไฟล์ตั้งค่าปริยายถูกคอมเมนต์ไว้ และอนุญาตให้ใครก็ได้เชื่อมต่อเข้ามา
Stack buffer overflow และ race condition
cups-browsed ไม่ได้อยู่ใน coverage ของ oss-fuzz
- อาจเกิด stack buffer overflow และ race condition ได้ในฟังก์ชัน
process_browse_data
- ปัญหาเหล่านี้ถูกรายงานไปยังนักพัฒนาและ CERT แล้ว แต่ยังไม่ได้รับการแพตช์
กลับไปที่ found_cups_printer
- ฟังก์ชัน
found_cups_printer จะดึง URL จากแพ็กเก็ตแล้วส่งต่อไปยังฟังก์ชัน cfGetPrinterAttributes
- URL นี้จะเชื่อมต่อไปยังเซิร์ฟเวอร์ที่ผู้โจมตีควบคุม
Internet Printing Protocol (IPP)
- IPP เป็นโปรโตคอลสำหรับการสื่อสารระหว่างอุปกรณ์ไคลเอนต์กับเครื่องพิมพ์
- ผู้โจมตีสามารถส่งคืนคุณสมบัติเครื่องพิมพ์ที่ควบคุมเองได้ เพื่อเพิ่มเครื่องพิมพ์เข้าสู่ระบบ
สรุปของ GN⁺
- บทความนี้อธิบายวิธีใช้ประโยชน์จากช่องโหว่ในระบบ CUPS เพื่อให้เกิดการรันโค้ดจากระยะไกล
- มีช่องโหว่หลายรายการที่เกี่ยวข้องกับ CUPS ซึ่งเปิดทางให้ผู้โจมตีเข้าควบคุมระบบได้
- ช่องโหว่เหล่านี้ยังไม่ได้รับการแพตช์ และผู้ใช้ควรปิดบริการ CUPS หรืออัปเดตระบบ
- โครงการอื่นที่มีความสามารถคล้ายกัน ได้แก่
LPRng และ CUPS เวอร์ชันล่าสุด
ยังไม่มีความคิดเห็น