Pack2TheRoot (CVE-2026-41651): ช่องโหว่ PackageKit ที่เป็นอันตรายต่อ Linux

ประเด็นสำคัญ:
  • ความล้มเหลวเกิดจากสภาวะการแข่งขัน (TOCTOU) ภายในระบบจัดการธุรกรรม D-Bus ซึ่งข้ามขั้นตอนการตรวจสอบสิทธิ์ของ polkit ไป
  • มันส่งผลกระทบโดยตรงต่อระบบปฏิบัติการยอดนิยม เช่น Ubuntu, Debian, Fedora และ Rocky Linux ในการติดตั้งเริ่มต้นของระบบเหล่านั้น
  • ผู้โจมตีสามารถเขียนทับค่าสถานะของธุรกรรมที่ปลอดภัยได้โดยการส่งคำขอครั้งที่สองก่อนที่ตัวกำหนดเวลาจะเริ่มการดำเนินการ
  • ช่องโหว่นี้ได้รับการแก้ไขแล้วใน PackageKit เวอร์ชัน 1.3.5 และมีการแก้ไขชั่วคราวโดยการสร้างกฎที่กำหนดเองใน polkit

แพ็ค2เดอะรูท

ไม่กี่วันที่ผ่านมา มีการเปิดเผยข้อมูลเกี่ยวกับช่องโหว่ร้ายแรงใหม่ ที่ส่งผลกระทบต่อสภาพแวดล้อม Linux ที่เรียกว่า "Pack2TheRoot" ถูกจัดอยู่ในหมวดหมู่ CVE-2026-41651ข้อบกพร่องนี้ส่งผลกระทบต่อ PackageKit (เครื่องมือที่ทำหน้าที่เป็นเลเยอร์นามธรรมของ D-Bus เพื่อรวมการจัดการแพ็กเกจในหลายๆ ดิสทริบิวชัน)

มีการกล่าวถึงคำตัดสิน วิธีนี้อนุญาตให้ผู้ใช้ภายในเครื่องรายใดก็ได้ที่ไม่มีสิทธิ์พิเศษ สามารถติดตั้งหรือถอนการติดตั้งแพ็กเกจได้ตามอำเภอใจ ด้วยการใช้ช่องโหว่นี้ ผู้โจมตีสามารถเข้าถึงสิทธิ์ระดับรูท (root access) ในระบบที่ถูกบุกรุกได้อย่างสมบูรณ์ ผลกระทบนั้นรุนแรงมาก เนื่องจากปัญหานี้มีมาตั้งแต่เวอร์ชัน 1.0.2 ซึ่งวางจำหน่ายเมื่อกว่าสิบสองปีที่แล้ว (ในปี 2014) และส่งผลกระทบต่อการตั้งค่าเริ่มต้นของระบบปฏิบัติการยอดนิยม เช่น Ubuntu, Debian, Rocky Linux และ Fedora

Pack2TheRoot: ช่องโหว่ PackageKit ทำให้ผู้ดูแลระบบสามารถเข้าถึงระบบ Linux ได้

El การค้นพบ Pack2TheRoot เป็นผลมาจากการสืบสวน นำโดยทีมสีแดงของ Deutsche Telekom ซึ่ง... พวกเขาใช้โมเดลปัญญาประดิษฐ์ Claude Opus เพื่อเป็นแนวทางในการวิเคราะห์ช่องทางการยกระดับสิทธิ์ในระดับท้องถิ่น

Loในเบื้องต้น นักวิจัยพบว่าคำสั่ง pkcon install สามารถทำงานได้โดยไม่ต้องใส่รหัสผ่านในบางการตั้งค่าของ Fedora ซึ่งทำให้เกิดข้อสงสัยเกี่ยวกับสิทธิ์การเข้าถึงที่อยู่เบื้องหลัง หลังจากตรวจสอบและรายงานช่องโหว่ดังกล่าวอย่างรับผิดชอบต่อผู้ดูแล PackageKit แล้ว มีการพัฒนาช่องโหว่ที่ใช้งานได้จริงแล้ว แม้ว่าการเผยแพร่รายละเอียดจะถูกเลื่อนออกไปอย่างมีกลยุทธ์เพื่อให้ผู้ใช้และผู้ดูแลระบบมีเวลาในการดำเนินการอัปเดตที่จำเป็น

กลไกของการโจมตี

รากของ ความเปราะบางอยู่ที่สภาพการทำงาน (ประเภท TOCTOU: บันทึกเวลาตรวจสอบถึงเวลาใช้งาน) ภายใน กระบวนการพื้นหลัง การจัดการธุรกรรม (เดมอน) ของ PackageKitPackageKit ซึ่งทำงานในฐานะผู้ใช้ root จะมอบอำนาจการอนุญาตให้กับระบบ polkit เมื่อไคลเอ็นต์ร้องขอการติดตั้งแพ็กเกจ เช่น โดยใช้เมธอด InstallFiles ระบบจะส่งชุดแฟล็กที่กำหนดพฤติกรรมของธุรกรรมนั้น

ตัวเลือกเฉพาะ เช่น SIMULATE หรือ ONLY_DOWNLOAD จะสั่งให้ PackageKit ข้ามขั้นตอนการตรวจสอบสิทธิ์ polkit เนื่องจากเป็นการดำเนินการที่ปลอดภัย ซึ่งในทางทฤษฎีแล้วจะไม่เปลี่ยนแปลงสถานะของระบบ ความล้มเหลวเกิดขึ้นเนื่องจากตัวจัดการธุรกรรมเขียนทับข้อมูล ตัวบ่งชี้เหล่านี้จะถูกแคชไว้โดยไม่มีเงื่อนไขทุกครั้งที่มีการเรียกใช้งานใหม่ โดยไม่ตรวจสอบว่าธุรกรรมนั้นได้รับการอนุมัติแล้วหรืออยู่ในระหว่างดำเนินการหรือไม่

แพ็ค2เดอะรูท-ป็อก2

Un ผู้โจมตีสามารถเริ่มต้นธุรกรรมโดยใช้ตัวบ่งชี้ที่ "ปลอดภัย" ได้ (จึงเป็นการหลีกเลี่ยงการอนุญาตของตำรวจ) และหลังจากนั้นเพียงไม่กี่มิลลิวินาที ก็ส่งคำขอ D-Bus ครั้งที่สอง สำหรับธุรกรรมเดียวกัน แต่คราวนี้มีแฟล็กที่เป็นอันตรายซึ่งสั่งให้ทำการติดตั้งจริง เนื่องจากสถาปัตยกรรมลำดับความสำคัญของลูปเหตุการณ์ของ GLib (ซึ่งข้อความ D-Bus จะถูกประมวลผลก่อนการเรียกกลับเมื่อไม่มีการใช้งาน) คำขอที่สองจะเขียนทับพารามิเตอร์ก่อนที่ตัวกำหนดเวลาจะเริ่มการทำงาน

ด้วยเหตุนี้ ธุรกรรมที่เคยได้รับอนุญาตให้ "ปลอดภัย" จึงถูกดำเนินการด้วยพารามิเตอร์ที่ถูกแทนที่โดยติดตั้งแพ็กเกจด้วยสิทธิ์ผู้ดูแลระบบ

แนวทางแก้ไขและบรรเทาผลกระทบ

Cabe señalar que la ช่องโหว่ดังกล่าวได้รับการแก้ไขแล้วใน PackageKit เวอร์ชัน 1.3.5ดังนั้น นักพัฒนาจึงขอให้ผู้ดูแลระบบตรวจสอบว่าระบบของตนมีความเสี่ยงหรือไม่ โดยตรวจสอบสถานะของบริการโดยใช้คำสั่งต่างๆ เช่น systemctl status packagekit หรือตรวจสอบกิจกรรมด้วย pkmon

ลา ระบบปฏิบัติการ Linux หลักๆ เช่น Debian, Ubuntu และ Fedora ได้เริ่มแจกจ่ายแพ็กเกจแล้ว การอัปเดตจะเผยแพร่ผ่านช่องทางอย่างเป็นทางการ สำหรับระบบที่ไม่มีแพทช์พร้อมใช้งานในทันที นักวิจัยได้เสนอวิธีแก้ปัญหาโดยการใช้กฎ polkit แบบกำหนดเอง

นี้ กฎดังกล่าวจะปฏิเสธการติดตั้ง PackageKit โดยทันทีและไม่มีการแจ้งเตือนใดๆ สำหรับผู้ใช้ทั่วไปที่ไม่ใช่ root การกระทำนี้จะป้องกันไม่ให้หน้าต่าง race condition เปิดขึ้น สิ่งสำคัญที่ควรทราบคือ แม้ว่าการโจมตีจะรวดเร็วและเงียบ แต่ก็ทิ้งร่องรอยที่ชัดเจนไว้ในบันทึกระบบ: หลังจากการโจมตีสำเร็จ โปรแกรม PackageKit จะหยุดทำงานเนื่องจากข้อผิดพลาดในการตรวจสอบ (assertion failed: (!transaction->priv->emitted_finished)) แม้ว่า systemd จะรีสตาร์ทบริการเพื่อป้องกันการโจมตีแบบปฏิเสธการให้บริการ แต่การมีข้อความนี้ใน journalctl เป็นตัวบ่งชี้ที่ชัดเจนว่าระบบถูกบุกรุกแล้ว

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


เพิ่มเป็นแหล่งที่มาที่ต้องการ