ช่องโหว่ระยะไกลในสแต็ก OpenBSD IPv6

ในกระบวนการเบื้องหลัง slaacd ซึ่งรับผิดชอบการกำหนดค่าที่อยู่ IPv6 อัตโนมัติ (การกำหนดค่าอัตโนมัติที่อยู่ IPv6 ไร้สัญชาติ, RFC 4862) ใน OpenBSD มีการระบุช่องโหว่ที่นำไปสู่บัฟเฟอร์ล้นเมื่อได้รับโฆษณาเราเตอร์ IPv6 ที่ออกแบบมาเป็นพิเศษ (RA, โฆษณาเราเตอร์) .

ในขั้นต้น ฟังก์ชันการกำหนดค่าอัตโนมัติของที่อยู่ IPv6 ถูกนำมาใช้ในระดับเคอร์เนล แต่เริ่มต้นด้วย OpenBSD 6.2 จะถูกย้ายไปยังกระบวนการ slaacd ที่ไม่มีสิทธิ์แยกต่างหาก กระบวนการนี้รับผิดชอบในการส่งข้อความ RS (Router Solicitation) และแยกวิเคราะห์การตอบสนอง RA (Router Advertisement) พร้อมข้อมูลเกี่ยวกับพารามิเตอร์การเชื่อมต่อเราเตอร์และเครือข่าย

ในเดือนกุมภาพันธ์ slaacd ได้แก้ไขข้อบกพร่องที่ทำให้เกิดปัญหาหากมีการระบุเซิร์ฟเวอร์ 7 รายการในรายการ RDNSS (เซิร์ฟเวอร์ DNS แบบเรียกซ้ำ) การกำกับดูแลนี้ดึงดูดความสนใจของนักวิจัยอิสระที่พยายามตรวจสอบโค้ด slaacd เพื่อหาข้อผิดพลาดอื่นๆ ที่เกิดขึ้นเมื่อแยกวิเคราะห์ฟิลด์ในข้อความ RA การวิเคราะห์แสดงให้เห็นว่ามีปัญหาอื่นในโค้ดซึ่งปรากฏขึ้นเมื่อประมวลผลฟิลด์ DNSSL (รายการค้นหา DNS) ซึ่งรวมถึงรายการชื่อโดเมนและเทมเพลตโฮสต์สำหรับ DNS

แต่ละชื่อในรายการ DNSSL จะถูกเข้ารหัสโดยใช้ตัวคั่น null และแทรกแท็กหนึ่งไบต์ซึ่งกำหนดขนาดของข้อมูลที่ตามมา ช่องโหว่นี้เกิดจากข้อเท็จจริงที่ว่าในรายการแยกวิเคราะห์ฟิลด์ที่มีขนาดจะถูกคัดลอกไปยังตัวแปรที่มีประเภทจำนวนเต็มที่ลงนาม (“len = data[pos]”) ดังนั้น หากมีการระบุค่าในฟิลด์ที่มีชุดบิตที่สำคัญที่สุด ค่านี้จะถูกรับรู้ในตัวดำเนินการแบบมีเงื่อนไขเป็นจำนวนลบ และตรวจสอบขนาดสูงสุดที่อนุญาต (“ถ้า (len > 63 || len + pos + 1 > datalen) {“) จะไม่ทำงานซึ่งจะนำไปสู่การเรียก memcpy ด้วยพารามิเตอร์ที่มีขนาดของข้อมูลที่คัดลอกเกินขนาดบัฟเฟอร์

ช่องโหว่ระยะไกลในสแต็ก OpenBSD IPv6
ช่องโหว่ระยะไกลในสแต็ก OpenBSD IPv6


ที่มา: opennet.ru

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