ช่องโหว่ใน Python เมื่อจัดการตัวเลขเศษส่วนที่ไม่ผ่านการตรวจสอบใน ctypes

มีเวอร์ชันแก้ไขของภาษาการเขียนโปรแกรม Python 3.7.10 และ 3.6.13 ซึ่งแก้ไขช่องโหว่ (CVE-2021-3177) ที่อาจนำไปสู่การเรียกใช้โค้ดเมื่อประมวลผลตัวเลขทศนิยมที่ไม่ผ่านการตรวจสอบในตัวจัดการที่เรียกใช้ฟังก์ชัน C โดยใช้กลไก ctypes . ปัญหายังส่งผลกระทบต่อสาขา Python 3.8 และ 3.9 ด้วย แต่การอัปเดตสำหรับพวกเขายังคงอยู่ในสถานะผู้สมัคร (กำหนดการเปิดตัวในวันที่ 1 มีนาคม)

ปัญหามีสาเหตุมาจากบัฟเฟอร์ล้นในฟังก์ชัน ctypes PyCArg_repr() ซึ่งเกิดขึ้นเนื่องจากการใช้ sprintf ที่ไม่ปลอดภัย โดยเฉพาะอย่างยิ่งในการประมวลผลผลลัพธ์ของการแปลง 'sprintf(buffer, " ", self->tag, self->value.b)' จัดสรรบัฟเฟอร์คงที่ขนาด 256 ไบต์ ("char buffer[256]") ในขณะที่ผลลัพธ์อาจเกินค่านี้ หากต้องการตรวจสอบช่องโหว่ของแอปพลิเคชันไปยังช่องโหว่คุณสามารถลองส่งค่า "1e300" ซึ่งเมื่อประมวลผลโดยวิธี c_double.from_param จะทำให้เกิดข้อขัดข้องเนื่องจากหมายเลขผลลัพธ์มีอักขระ 308 ตัวและไม่พอดีกับ บัฟเฟอร์ 256 ไบต์ ตัวอย่างโค้ดที่มีปัญหา: import ctypes; x = ctypes.c_double.from_param(1e300); ตัวแทน(x)

ปัญหาดังกล่าวยังไม่ได้รับการแก้ไขใน Debian, Ubuntu และ FreeBSD แต่ปัญหาดังกล่าวได้รับการแก้ไขแล้วใน Arch Linuxใน Fedora และ SUSE ช่องโหว่นี้จะไม่ปรากฏให้เห็น เนื่องจากแพ็กเกจถูกสร้างขึ้นในโหมด FORTIFY_SOURCE ซึ่งจะบล็อกบัฟเฟอร์โอเวอร์โฟลว์ในฟังก์ชันสตริง

ที่มา: opennet.ru

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