ช่องโหว่ sudo root ที่ส่งผลต่อ Linux Mint และ Elementary OS

ในด้านอรรถประโยชน์ sudoใช้เพื่อจัดระเบียบการดำเนินการคำสั่งในนามของผู้ใช้รายอื่น ระบุ ช่องโหว่ (CVE-2019-18634) ซึ่งช่วยให้คุณเพิ่มสิทธิ์ในระบบให้กับผู้ใช้รูทได้ ปัญหาจะปรากฏขึ้นตั้งแต่เปิดตัว sudo 1.7.1 เมื่อใช้ตัวเลือก “pwfeedback” ในไฟล์ /etc/sudoers ซึ่งถูกปิดใช้งานตามค่าเริ่มต้น แต่เปิดใช้งานบนบางรุ่น เช่น Linux Mint และ Elementary OS ปัญหาได้รับการแก้ไขในการเปิดตัว ซูโด 1.8.31เผยแพร่เมื่อไม่กี่ชั่วโมงก่อน ช่องโหว่ยังคงไม่มีการแก้ไขในชุดการแจกจ่าย

ตัวเลือก “pwfeedback” ช่วยให้สามารถแสดงอักขระ “*” หลังอักขระที่ป้อนแต่ละตัวเมื่อป้อนรหัสผ่าน เพราะว่า ข้อผิดพลาด ในการใช้งานฟังก์ชัน getln() ที่กำหนดไว้ในไฟล์ tgetpass.c สตริงรหัสผ่านที่มีขนาดใหญ่เกินไปที่ส่งผ่านสตรีมอินพุตมาตรฐาน (stdin) ภายใต้เงื่อนไขบางประการอาจไม่พอดีกับบัฟเฟอร์ที่จัดสรร และเขียนทับข้อมูลอื่นบนสแต็ก โอเวอร์โฟลว์เกิดขึ้นเมื่อรันโค้ด sudo ในฐานะรูท

สาระสำคัญของปัญหาคือเมื่อใช้อักขระพิเศษ ^U (การล้างบรรทัด) ระหว่างอินพุตและหากการดำเนินการเขียนล้มเหลวโค้ดที่รับผิดชอบในการล้างอักขระเอาต์พุต "*" จะรีเซ็ตข้อมูลในขนาดบัฟเฟอร์ที่มีอยู่ แต่ไม่ได้ ส่งคืนตัวชี้ไปยังตำแหน่งปัจจุบันของค่าเริ่มต้นในบัฟเฟอร์ ปัจจัยอีกประการหนึ่งที่เอื้อต่อการใช้ประโยชน์คือการไม่มีการปิดใช้งานโหมด "pwfeedback" โดยอัตโนมัติเมื่อข้อมูลไม่ได้มาจากเทอร์มินัล แต่ผ่านทางอินพุตสตรีม (ข้อบกพร่องนี้อนุญาตให้สร้างเงื่อนไขสำหรับข้อผิดพลาดในการบันทึกที่จะเกิดขึ้น เช่น บนระบบที่มี ทิศทางเดียว ช่องที่ไม่มีชื่อ เกิดข้อผิดพลาดขณะพยายามเขียนถึงจุดสิ้นสุดของช่องอ่าน)

เนื่องจากผู้โจมตีสามารถควบคุมการเขียนทับข้อมูลบนสแต็กได้อย่างสมบูรณ์ จึงไม่ใช่เรื่องยากที่จะสร้างช่องโหว่ที่ทำให้เขาเพิ่มสิทธิ์ในการรูทได้ ผู้ใช้ทุกคนสามารถใช้ประโยชน์จากปัญหานี้ได้ โดยไม่คำนึงถึงสิทธิ์ sudo หรือการตั้งค่าเฉพาะผู้ใช้ใน sudoers หากต้องการบล็อกปัญหา คุณควรตรวจสอบให้แน่ใจว่าไม่มีการตั้งค่า “pwfeedback” ใน /etc/sudoers และหากจำเป็น ให้ปิดการใช้งาน (“ค่าเริ่มต้น !pwfeedback”) หากต้องการตรวจสอบว่ามีปัญหาหรือไม่ คุณสามารถรันโค้ดได้:

$ perl -e 'พิมพ์(("A" x 100 . "\x{00}") x 50)' | sudo -S รหัส
รหัสผ่าน: การแบ่งส่วนผิดพลาด

ที่มา: opennet.ru

เพิ่มความคิดเห็น