การโจมตีระบบยูนิกซ์: การโจมตีผ่าน 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 เวอร์ชันล่าสุด

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น