ช่องโหว่ของ PolKit อนุญาตให้เข้าถึงรูทบนลีนุกซ์ส่วนใหญ่ได้

เมื่อเร็ว ๆ นี้ Qualy's ได้ออกข่าวว่า ได้ระบุจุดอ่อน (CVE-2021-4034) en ส่วนประกอบของระบบ พลกิจ (เดิมคือ PolicyKit) ซึ่งใช้ในการแจกจ่ายเพื่อให้ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถดำเนินการที่ต้องการสิทธิ์การเข้าถึงที่ยกระดับได้

ช่องโหว่ อนุญาตให้ผู้ใช้ในพื้นที่ที่ไม่มีสิทธิพิเศษยกระดับสิทธิ์ของตนไปยังผู้ใช้รูท และเข้าควบคุมระบบได้อย่างเต็มที่ ปัญหานี้มีชื่อรหัสว่า PwnKit และมีความโดดเด่นในการสร้างช่องโหว่ที่ใช้งานได้ซึ่งทำงานในการตั้งค่าเริ่มต้นบนลีนุกซ์ส่วนใหญ่

เป็นที่กล่าวขวัญกันว่า ปัญหามีอยู่ในยูทิลิตี้ pkexec ที่มาพร้อมกับ PolKitซึ่งมาพร้อมกับแฟล็กรูท SUID และออกแบบมาเพื่อรันคำสั่งด้วยสิทธิ์พิเศษของผู้ใช้รายอื่นตามกฎของ PolKit

เนื่องจากการจัดการข้อโต้แย้งที่ไม่ถูกต้อง จากบรรทัดคำสั่งที่ส่งไปยัง pkexec, a ผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถข้ามการตรวจสอบสิทธิ์และให้รหัสของคุณทำงานเป็น rootโดยไม่คำนึงถึงกฎการเข้าถึงที่กำหนดไว้ สำหรับการโจมตี ไม่ว่าจะตั้งค่าและข้อจำกัดใดใน PolKit ก็เพียงพอแล้วที่แอตทริบิวต์รูท SUID สำหรับไฟล์เรียกทำงานจะถูกตั้งค่าด้วยยูทิลิตี้ pkexec

Pkexec ไม่ตรวจสอบความถูกต้อง ของจำนวนอาร์กิวเมนต์บรรทัดคำสั่ง (argc) ที่ส่งผ่านเมื่อเริ่มต้นกระบวนการ นักพัฒนา pkexec สันนิษฐานว่ารายการแรกในอาร์เรย์ argv มีชื่อของกระบวนการเสมอ (pkexec) และรายการที่สองเป็น NULL หรือชื่อของคำสั่งที่ดำเนินการผ่าน pkexec

เนื่องจากจำนวนอาร์กิวเมนต์ไม่ได้เปรียบเทียบกับเนื้อหาจริงของอาร์เรย์และถือว่ามากกว่า 1 เสมอ หากอาร์เรย์ argv ว่างถูกส่งไปยังกระบวนการ ซึ่งฟังก์ชัน execve ของ Linux อนุญาต pkexec ถือว่า NULL เป็นอาร์กิวเมนต์แรก ( กระบวนการ ชื่อ) และหน่วยความจำบัฟเฟอร์ถัดไปถัดจากเนื้อหาอาร์เรย์ถัดไป

ปัญหาคือหลังจากอาร์เรย์ argv ในหน่วยความจำเป็นอาร์เรย์ envp ที่มีตัวแปรสภาพแวดล้อม ดังนั้น ด้วยอาร์เรย์ argv ที่ว่างเปล่า pkexec จะดึงข้อมูลเกี่ยวกับคำสั่งที่ดำเนินการด้วยสิทธิ์ระดับสูงจากองค์ประกอบแรกของอาร์เรย์ที่มีตัวแปรสภาพแวดล้อม (argv[1] เหมือนกับ envp[0]) ซึ่งเนื้อหาสามารถควบคุมได้โดย ผู้โจมตี

เมื่อได้รับค่า argv[1] แล้ว pkexec จะพยายามกำหนดพาธแบบเต็มไปยังไฟล์เรียกทำงานโดยใช้พาธของไฟล์ใน PATH และเขียนตัวชี้ไปยังสตริงด้วยพาธแบบเต็มกลับไปที่ argv[1] ซึ่งนำไปสู่การเขียนทับค่า ของตัวแปรสภาพแวดล้อมตัวแรกเช่นกัน เนื่องจาก argv[1] เหมือนกับ envp[0] ด้วยการจัดการชื่อของตัวแปรสภาพแวดล้อมแรก ผู้โจมตีสามารถแทนที่ตัวแปรสภาพแวดล้อมอื่นใน pkexec เช่น แทนที่ตัวแปรสภาพแวดล้อม "LD_PRELOAD" ซึ่งไม่ได้รับอนุญาตในโปรแกรม suid และให้กระบวนการโหลดไลบรารีที่ใช้ร่วมกันในกระบวนการ .

การใช้ประโยชน์จากการทำงานใช้การแทนที่ตัวแปร GCONV_PATH ซึ่งใช้เพื่อกำหนดเส้นทางไปยังไลบรารีการแปลงรหัสสัญลักษณ์ที่โหลดแบบไดนามิกเมื่อมีการเรียกใช้ฟังก์ชัน g_printerr() ซึ่งใช้ iconv_open() ในโค้ด

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

เป็นที่สังเกตว่า แม้ว่าปัญหาจะเกิดจากหน่วยความจำเสียหาย แต่ก็สามารถใช้ประโยชน์ได้อย่างน่าเชื่อถือและทำซ้ำได้โดยไม่คำนึงถึงสถาปัตยกรรมฮาร์ดแวร์ที่ใช้

การหาประโยชน์ที่เตรียมไว้ ทดสอบสำเร็จบน Ubuntu, Debian, Fedora และ CentOSแต่ยังใช้กับการกระจายอื่นๆ ได้ การหาช่องโหว่ดั้งเดิมนั้นยังไม่เปิดเผยต่อสาธารณะ แสดงว่าเป็นเรื่องเล็กน้อยและสามารถสร้างขึ้นใหม่ได้โดยง่ายโดยนักวิจัยคนอื่น ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องติดตั้งการอัปเดตโปรแกรมแก้ไขด่วนโดยเร็วที่สุดบนระบบที่มีผู้ใช้หลายคน

Polkit ยังมีให้สำหรับระบบ BSD และ Solaris แต่ยังไม่ได้รับการสำรวจเพื่อหาประโยชน์ สิ่งที่ทราบคือการโจมตีไม่สามารถทำได้บน OpenBSD เนื่องจากเคอร์เนล OpenBSD ไม่อนุญาตให้ส่งค่า null argc เมื่อเรียกใช้ execve()

ปัญหาเกิดขึ้นตั้งแต่เดือนพฤษภาคม 2009 เมื่อมีการเพิ่มคำสั่ง pkexec การแก้ไขจุดอ่อนใน PolKit ยังคงมีให้ใช้งานเป็นแพตช์ (เวอร์ชันแก้ไขยังไม่มีการก่อตัว) แต่เนื่องจากผู้พัฒนาการแจกจ่ายได้รับแจ้งถึงปัญหาล่วงหน้า การกระจายส่วนใหญ่จึงออกการอัปเดตพร้อมๆ กัน มากกว่าการเปิดเผย ของข้อมูลช่องโหว่

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


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

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

*

*

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