การเพิ่มสิทธิ์ของ OpenBSD และช่องโหว่การตรวจสอบสิทธิ์ข้ามใน smtpd, ldapd และ radiusd

บริษัท ควอลิส เปิดเผย สี่ ช่องโหว่ ใน OpenBSD หนึ่งในนั้นช่วยให้คุณเชื่อมต่อจากระยะไกลโดยไม่ต้องตรวจสอบบริการเครือข่ายบางอย่างและอีกสามรายการเพิ่มสิทธิ์ของคุณในระบบ รายงาน Qualys ระบุการตอบสนองอย่างรวดเร็วของนักพัฒนา OpenBSD - ปัญหาทั้งหมดเกิดขึ้น ตกรอบแล้ว в โอเพ่นบีเอสดี 6.5 и โอเพ่นบีเอสดี 6.6 ภายใน 40 ชั่วโมงหลังได้รับแจ้งเป็นการส่วนตัว

ช่องโหว่ที่สามารถหาประโยชน์ได้จากระยะไกลมีสาเหตุมาจากข้อผิดพลาดในการเรียกตัวจัดการการรับรองความถูกต้องในไลบรารี libc ซึ่งเรียกใช้
โปรแกรม /usr/libexec/auth/login_style ส่งผ่านอาร์กิวเมนต์บนบรรทัดคำสั่ง รวมถึงเมื่อเรียก login_style โดยใช้พารามิเตอร์เสริม "-s service" ก็เป็นไปได้ที่จะถ่ายโอนชื่อโปรโตคอล หากคุณใช้อักขระ "-" ที่หน้าชื่อผู้ใช้ ชื่อนี้จะถือเป็นตัวเลือกเมื่อเรียกใช้ Login_style ดังนั้น หากคุณระบุชื่อผู้ใช้ระหว่างการตรวจสอบสิทธิ์ "-schallenge" หรือ "-schallenge:passwd" แล้ว login_style จะรับรู้ว่าคำขอนั้นเป็นคำขอใช้ตัวจัดการ เอส/คีย์.

ปัญหาคือโปรโตคอล S/Key ใน login_style ได้รับการสนับสนุนอย่างเป็นทางการเท่านั้น แต่จริงๆ แล้วถูกละเลยไปพร้อมกับสัญญาณเอาต์พุตของการรับรองความถูกต้องที่สำเร็จ ดังนั้นผู้โจมตีสามารถเลี่ยงผ่านการรับรองความถูกต้องและเข้าถึงได้โดยไม่ต้องให้รหัสผ่านหรือกุญแจโดยสวมรอยเป็นผู้ใช้ "-challenge" บริการเครือข่ายทั้งหมดที่ใช้การเรียก libc มาตรฐานสำหรับการตรวจสอบสิทธิ์อาจได้รับผลกระทบจากปัญหา ตัวอย่างเช่น ความสามารถในการเลี่ยงผ่านการรับรองความถูกต้องได้รับการสนับสนุนใน smtpd (AUTH PLAIN), ldapd และ radiusd

ช่องโหว่ไม่ปรากฏใน sshd เนื่องจากมีการป้องกันเพิ่มเติมที่จะตรวจสอบการมีอยู่ของผู้ใช้ในระบบ อย่างไรก็ตาม สามารถใช้ sshd เพื่อทดสอบช่องโหว่ของระบบ - เมื่อเข้าถึงชื่อผู้ใช้ "-sresponse:passwd" การเชื่อมต่อจะหยุดทำงานเนื่องจาก sshd กำลังรอให้ Login_passwd ส่งคืนพารามิเตอร์การท้าทาย และ Login_passwd กำลังรอให้พารามิเตอร์ที่หายไป ถูกส่ง (ชื่อ "- sresponse" ถือเป็นตัวเลือก) ผู้โจมตีในพื้นที่อาจพยายามเลี่ยงผ่านการรับรองความถูกต้องในยูทิลิตี su แต่การส่งชื่อ "-sresponse" จะทำให้กระบวนการหยุดทำงานโดยการส่งคืนตัวชี้ null เมื่อเรียกใช้ฟังก์ชัน getpwnam_r("-schallenge", ...)

ช่องโหว่อื่นๆ:

  • CVE-2019-19520 การเพิ่มสิทธิ์ในเครื่องผ่านการจัดการยูทิลิตี้ xlock ที่มาพร้อมกับแฟล็ก sgid โดยเปลี่ยนกลุ่มเป็น "auth" ในโค้ด xlock ห้ามมิให้กำหนดเส้นทางไปยังไลบรารีใหม่เฉพาะเมื่อมีการเปลี่ยนตัวระบุผู้ใช้ (setuid) ซึ่งช่วยให้ผู้โจมตีเปลี่ยนตัวแปรสภาพแวดล้อม "LIBGL_DRIVERS_PATH" และจัดระเบียบการโหลดไลบรารีที่แชร์ของเขา ซึ่งโค้ดจะถูกดำเนินการ หลังจากเพิ่มสิทธิพิเศษให้กับกลุ่ม “รับรองความถูกต้อง” แล้ว
  • CVE-2019-19522 - อนุญาตให้ผู้ใช้ภายในที่เป็นสมาชิกของกลุ่ม "auth" เรียกใช้โค้ดในฐานะ root เมื่อเปิดใช้งานการตรวจสอบสิทธิ์ S/Key หรือ YubiKey บนระบบ (ไม่ได้ใช้งานตามค่าเริ่มต้น) การเข้าร่วมกลุ่ม "auth" ซึ่งสามารถเข้าถึงได้โดยการใช้ประโยชน์จากช่องโหว่ที่กล่าวมาข้างต้นใน xlock ช่วยให้คุณสามารถเขียนไฟล์ไปยังไดเร็กทอรี /etc/skey และ /var/db/ybikey ตัวอย่างเช่น ผู้โจมตีสามารถเพิ่มไฟล์ใหม่ /etc/skey/root เพื่อสร้างคีย์แบบครั้งเดียวสำหรับการตรวจสอบสิทธิ์ในฐานะผู้ใช้รูทผ่าน S/Key
  • CVE-2019-19519 - ความเป็นไปได้ในการเพิ่มขีดจำกัดทรัพยากรผ่านการจัดการยูทิลิตี้ su เมื่อระบุตัวเลือก "-L" ซึ่งจะทำให้ความพยายามในการรับรองความถูกต้องซ้ำเป็นรอบหากไม่สำเร็จ คลาสผู้ใช้จะถูกตั้งค่าเพียงครั้งเดียวและจะไม่รีเซ็ตในความพยายามครั้งต่อไป ผู้โจมตีสามารถดำเนินการ “su -l -L” ในความพยายามครั้งแรกเพื่อเข้าสู่ระบบของบุคคลอื่นด้วยประเภทบัญชีอื่น แต่ในความพยายามครั้งที่สอง เขาสามารถตรวจสอบตัวตนได้สำเร็จ ในสถานการณ์นี้ ผู้ใช้จะถูกจำกัดตามคลาสผู้ใช้ที่ระบุในความพยายามครั้งแรก (เช่น จำนวนสูงสุดของกระบวนการหรือขนาดหน่วยความจำสำหรับกระบวนการ) วิธีการนี้ใช้ได้กับขีดจำกัดการยืมจากผู้ใช้ที่ไม่มีสิทธิ์เท่านั้น เนื่องจากผู้ใช้รูทต้องอยู่ในกลุ่มวงล้อ)

นอกจากนี้ยังสามารถสังเกตได้ การดำเนินการ ใน OpenBSD ซึ่งเป็นวิธีการใหม่ในการตรวจสอบความถูกต้องของการเรียกของระบบ ซึ่งจะทำให้การหาช่องโหว่มีความซับซ้อนยิ่งขึ้น วิธีการนี้อนุญาตให้ดำเนินการการเรียกของระบบได้ก็ต่อเมื่อมีการเข้าถึงจากพื้นที่หน่วยความจำที่ลงทะเบียนไว้ก่อนหน้านี้เท่านั้น เพื่อทำเครื่องหมายพื้นที่หน่วยความจำ เสนอ โทรระบบใหม่ msyscall().

ที่มา: opennet.ru