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

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

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

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

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

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


ที่มา: opennet.ru
ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster