ช่องโหว่ใน ld.so OpenBSD

ตัวโหลดแบบไดนามิก LD.SOที่มาพร้อมกับ OpenBSD อาจอยู่ภายใต้เงื่อนไขบางประการ SUID/SGID- แอปพลิเคชันปล่อยตัวแปรสภาพแวดล้อม LD_LIBRARY_PATH ไว้ และอนุญาตให้โหลดโค้ดของบุคคลที่สามในบริบทของกระบวนการที่ทำงานด้วยสิทธิ์ระดับสูง โปรแกรมแก้ไขที่แก้ไขช่องโหว่พร้อมให้ใช้งานแล้ว 6.5 и 6.6. แพทช์ไบนารี (ระบบแพทช์) สำหรับแพลตฟอร์ม amd64, i386 และ arm64 อยู่ในการผลิตแล้ว และควรพร้อมให้ดาวน์โหลดเมื่อข่าวนี้เผยแพร่

สาระสำคัญของปัญหา: ในระหว่างการดำเนินการ ld.so จะแยกค่าของตัวแปร LD_LIBRARY_PATH ออกจากสภาพแวดล้อมก่อน และใช้ฟังก์ชัน _dl_split_path() เพื่อแปลงเป็นอาร์เรย์ของสตริง - เส้นทางไปยังไดเร็กทอรี หากปรากฏในภายหลังว่ากระบวนการปัจจุบันเริ่มต้นโดยแอปพลิเคชัน SUID/SGID อาร์เรย์ที่สร้างขึ้นและในความเป็นจริง ตัวแปร LD_LIBRARY_PATH จะถูกล้าง ในเวลาเดียวกัน หาก _dl_split_path() หน่วยความจำไม่เพียงพอ (ซึ่งเป็นเรื่องยากเนื่องจากการจำกัดขนาดของตัวแปรสภาพแวดล้อมอย่างชัดเจนที่ 256 kB แต่เป็นไปได้ในทางทฤษฎี) ตัวแปร _dl_libpath จะได้รับค่า NULL และการตรวจสอบในภายหลัง ค่าของตัวแปรนี้จะบังคับให้ข้ามการเรียกไปที่ _dl_unsetenv("LD_LIBRARY_PATH")

ช่องโหว่ที่พบโดยผู้เชี่ยวชาญ Qualy's, เช่นเดียวกับ หลายอย่างที่เปิดเผยก่อนหน้านี้ ปัญหา. นักวิจัยด้านความปลอดภัยที่ระบุช่องโหว่ตั้งข้อสังเกตว่าปัญหาได้รับการแก้ไขได้เร็วเพียงใด: มีการเตรียมแพทช์และการอัปเดตได้รับการเผยแพร่ภายในสามชั่วโมงหลังจากโครงการ OpenBSD ได้รับการแจ้งเตือน

นอกจากนี้: ปัญหาได้รับการกำหนดหมายเลขแล้ว CVE-2019-19726. สร้างจากรายชื่อผู้รับจดหมาย oss-security ประกาศอย่างเป็นทางการรวมถึงช่องโหว่ต้นแบบที่ทำงานบนสถาปัตยกรรม OpenBSD 6.6, 6.5, 6.2 และ 6.1
amd64 และ i386 (การใช้ประโยชน์สามารถนำไปใช้กับสถาปัตยกรรมอื่น ๆ ได้)
ปัญหานี้หาประโยชน์ได้ในการติดตั้งเริ่มต้น และอนุญาตให้ผู้ใช้ภายในเครื่องที่ไม่มีสิทธิ์เรียกใช้โค้ดในฐานะรูทผ่านการแทนที่ไลบรารีเมื่อรันยูทิลิตี้ chpass หรือ passwd suid หากต้องการสร้างเงื่อนไขหน่วยความจำเหลือน้อยที่จำเป็นสำหรับการดำเนินการ ให้ตั้งค่าขีดจำกัด RLIMIT_DATA ผ่าน setrlimit

ที่มา: opennet.ru

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