ลอส นักวิจัยด้านความปลอดภัยของ Qualys ได้ระบุช่องโหว่ที่สำคัญ (CVE-2021-3156) ในยูทิลิตี้ sudoซึ่งออกแบบมาเพื่อจัดระเบียบการดำเนินการคำสั่งในนามของผู้ใช้รายอื่น
ช่องโหว่ อนุญาตการเข้าถึงที่ไม่ได้รับการพิสูจน์ตัวตนด้วยสิทธิ์ระดับรูท. ปัญหา สามารถใช้ได้โดยผู้ใช้ทุกคนโดยไม่คำนึงถึงการมีอยู่ในกลุ่มระบบและการมีอยู่ของรายการในไฟล์ / etc / sudoers
การโจมตีไม่จำเป็นต้องป้อนรหัสผ่านของผู้ใช้ นั่นคือช่องโหว่นี้สามารถใช้โดยบุคคลภายนอกเพื่อยกระดับสิทธิ์บนระบบหลังจากที่ช่องโหว่ถูกบุกรุกในกระบวนการที่ไม่ได้รับสิทธิพิเศษ (รวมถึงช่องโหว่ที่เริ่มต้นด้วยผู้ใช้ "ไม่มีใคร")
หากต้องการค้นหาช่องโหว่ในระบบของคุณเพียงแค่เรียกใช้คำสั่ง "sudoedit -s /" และช่องโหว่จะปรากฏขึ้นหากข้อความแสดงข้อผิดพลาดที่ขึ้นต้นด้วย "sudoedit:" ปรากฏขึ้น
เกี่ยวกับช่องโหว่
ช่องโหว่ดังกล่าวปรากฏขึ้นตั้งแต่เดือนกรกฎาคม 2011 และเกิดจากบัฟเฟอร์ล้น ในการจัดการอักขระหนีบรรทัดในพารามิเตอร์ที่ตั้งใจจะดำเนินการคำสั่งในโหมดเชลล์ โหมดเชลล์ถูกเปิดใช้งานโดยการระบุอาร์กิวเมนต์ "-i" หรือ "-s" และทำให้คำสั่งไม่ถูกเรียกใช้โดยตรง แต่ผ่านการเรียกเชลล์เพิ่มเติมด้วยแฟล็ก "-c" ("คำสั่ง sh -c »)
บรรทัดล่างคือเมื่อยูทิลิตี้ sudo ทำงานตามปกติมันจะหลีกเลี่ยงอักขระพิเศษโดยการระบุอ็อพชัน "-i" และ "-s" แต่เมื่อยูทิลิตี้ sudoedit เริ่มทำงานพารามิเตอร์จะไม่ถูก Escape เช่น parse_args () ฟังก์ชันจะตั้งค่าตัวแปรสภาพแวดล้อม MODE_EDIT แทน MODE_SHELL และไม่รีเซ็ตค่าของ "valid_flags"
ในทางกลับกัน, การส่งอักขระที่ไม่ใช้ Escape จะสร้างเงื่อนไขให้ข้อผิดพลาดอื่นปรากฏขึ้น ในคอนโทรลเลอร์ซึ่งจะลบอักขระ Escape ก่อนที่จะตรวจสอบกฎ sudoer
ตัวจัดการแยกวิเคราะห์การมีอยู่ของอักขระแบ็กสแลชไม่ถูกต้อง โดยไม่ต้องหลบหนีที่ท้ายบรรทัดจะพิจารณาว่าแบ็กสแลชนี้หลีกเลี่ยงอักขระอีกหนึ่งตัวและยังคงอ่านข้อมูลเกินขีด จำกัด บรรทัดคัดลอกลงในบัฟเฟอร์ "user_args" และเขียนทับพื้นที่หน่วยความจำภายนอกบัฟเฟอร์
และมีการกล่าวถึงว่าเมื่อพยายามปรับเปลี่ยนค่าในบรรทัดคำสั่ง sudoedit ผู้โจมตีสามารถบรรลุการซ้อนทับของคิวที่เขียนซ้ำได้ในข้อมูลที่มีผลต่อการทำงานในลำดับถัดไป
นอกจากการสร้างการใช้ประโยชน์แล้วยังช่วยลดความซับซ้อนของข้อเท็จจริงที่ว่าผู้โจมตีสามารถควบคุมขนาดของบัฟเฟอร์ user_args ได้อย่างสมบูรณ์ซึ่งสอดคล้องกับขนาดของอาร์กิวเมนต์ทั้งหมดที่ส่งผ่านและยังควบคุมขนาดและเนื้อหาของข้อมูลที่เขียนนอกบัฟเฟอร์โดยใช้ ตัวแปรสภาพแวดล้อม
นักวิจัยด้านความปลอดภัยของ Qualys จัดการเพื่อเตรียมการหาช่องโหว่สามครั้งซึ่งงานนี้ขึ้นอยู่กับการเขียนเนื้อหาของโครงสร้าง sudo_hook_entry, service_user และ def_timestampdir ใหม่:
- โดยการยกเลิก sudo_hook_entry ไบนารีชื่อ "SYSTEMD_BYPASS_USERDB" สามารถรันเป็นรูทได้
- การแทนที่ service_user จัดการเพื่อเรียกใช้รหัสโดยอำเภอใจเป็นรูท
- ด้วยการแทนที่ def_timestampdir ทำให้สามารถล้างเนื้อหาของ sudo stack รวมถึงตัวแปรสภาพแวดล้อมลงในไฟล์ / etc / passwd และทำการแทนที่ผู้ใช้ด้วยสิทธิ์ root
นักวิจัย แสดงให้เห็นว่ามีการหาประโยชน์จากการทำงาน เพื่อรับสิทธิ์รูทแบบเต็ม บน Ubuntu 20.04, Debian 10 และ Fedora 33
ช่องโหว่ สามารถใช้ประโยชน์ได้บนระบบปฏิบัติการและการแจกแจงอื่น ๆ แต่การตรวจสอบของนักวิจัยถูก จำกัด ไว้ที่ Ubuntu, Debian และ Fedora รวมทั้งมีการระบุว่า sudo ทุกรุ่น 1.8.2 ถึง 1.8.31p2 และ 1.9.0 ถึง 1.9.5p1 ในการตั้งค่าเริ่มต้นจะได้รับผลกระทบ วิธีแก้ปัญหาที่แนะนำใน sudo 1.9.5p2
นักวิจัย ได้แจ้งให้นักพัฒนาซอฟต์แวร์ทราบล่วงหน้า ผู้จัดจำหน่ายที่ได้เผยแพร่การอัปเดตแพ็คเกจในลักษณะที่ประสานกัน: Debian, RHEL, Fedor, Ubuntu, SUSE / openSUSE, Arch Linux, Slackware, Gentoo และ FreeBSD
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม เกี่ยวกับช่องโหว่คุณสามารถตรวจสอบรายละเอียดได้ ในลิงค์ต่อไปนี้.