
พบช่องโหว่ด้านความปลอดภัยระดับความรุนแรงสูงในโมดูล asyncio ของ Python บน Windows ซึ่งผู้โจมตีสามารถทำให้เกิด Out-of-Bounds Write ของหน่วยความจำที่จัดสรรไว้ได้
ช่องโหว่นี้มีหมายเลข CVE-2026-3298 โดย Seth Larson นักพัฒนาด้านความปลอดภัยของ Python ได้เผยแพร่ช่องโหว่ออกสู่สาธารณะเมื่อวันที่ 21 เมษายน 2026 ผ่านช่องทางแจ้งข่าวความปลอดภัยของ Python เอง
ช่องโหว่นี้อยู่ใน sock_recvfrom_into() method ภายใต้ asyncio.ProactorEventLoop ซึ่งเป็นส่วนที่ถูกเขียนขึ้นมาเพื่อใช้จัดการการทำงานแบบ Asynchronous (I/O) เฉพาะบนระบบปฏิบัติการ Windows เท่านั้น
ต้นเหตุของช่องโหว่ เกิดจากการที่ตัวโปรแกรมไม่มีการตรวจสอบ Boundary check ของ data buffer เมื่อมีการใช้งานพารามิเตอร์ที่ชื่อว่า nbytes
เมื่อข้อมูลที่ตอบกลับมาจากเครือข่ายมีขนาดใหญ่กว่าพื้นที่หน่วยความจำที่จองไว้ ตัว Python จะไม่สามารถจำกัดขนาดข้อมูล ทำให้ข้อมูลส่วนที่เกินนั้น ไปเขียนทับหน่วยความจำในบริเวณข้างเคียงได้
ช่องโหว่ประเภทนี้เป็นที่รู้จักกันในชื่อ Out-of-Bounds (OOB) Write ซึ่งเป็นอันตรายอย่างยิ่ง เพราะมันสามารถนำไปสู่การเกิด memory corruption, โปรแกรมหยุดทำงาน หรืออาจถึงขั้นเปิดทางให้มีการรันโค้ดใด ๆ ก็ได้ตามที่ต้องการ (Arbitrary Code Execution) ทั้งนี้ขึ้นอยู่กับว่าข้อมูลส่วนที่เกินมานั้นไปทับหน่วยความจำส่วนไหน
ช่องโหว่นี้เกิดขึ้นเฉพาะบนระบบปฏิบัติการ Windows เท่านั้น ส่วนระบบ Linux, macOS และแพลตฟอร์มตระกูล Unix อื่น ๆ จะใช้กลไกการจัดการ Event Loop คนละตัวกัน (เรียกว่า SelectorEventLoop) จึงไม่ได้รับผลกระทบจากช่องโหว่นี้แต่อย่างใด
ผู้ใช้งาน Windows ที่รันแอปพลิเคชัน Python ซึ่งพึ่งพาการทำงานด้านเครือข่ายผ่าน asyncio โดยเฉพาะแอปพลิเคชันที่มีการใช้ sock_recvfrom_into() method ร่วมกับอาร์กิวเมนต์ nbytes ถือว่ามีความเสี่ยงสูงมาก
ช่องโหว่นี้มีความสำคัญอย่างยิ่งสำหรับกลุ่มต่อไปนี้:
- เว็บเซิร์ฟเวอร์ และระบบหลังบ้านที่รันด้วย Python บน Windows: โดยเฉพาะระบบที่เน้นประสิทธิภาพการทำงานแบบ Asynchronous
- แอปพลิเคชันเครือข่ายแบบ Asynchronous ที่ใช้การทำงานผ่าน UDP Socket: เนื่องจาก sock_recvfrom_into() method มักถูกใช้เพื่อรับข้อมูลในโปรโตคอล UDP เป็นหลัก
- บริการใด ๆ ก็ตามที่มีการรับข้อมูลเครือข่ายที่มีขนาดไม่คงที่ (Variable-length) เข้ามาเก็บไว้ในบัฟเฟอร์ที่มีการจองขนาดไว้ตายตัว (Fixed-size): ซึ่งเป็นจุดที่เสี่ยงต่อการเกิด Out-of-Bounds Write มากที่สุดหากไม่มีการตรวจสอบขนาดให้ดี
ทีมความปลอดภัยของ Python จัดระดับความรุนแรงของช่องโหว่นี้ไว้ที่ระดับสูง เนื่องจากช่องโหว่ประเภท Out-of-bounds write มักถูกนำไปใช้บ่อยครั้งในการโจมตีเพื่อทำให้เกิด memory corruption นอกจากนี้ การที่มันเกิดขึ้นในส่วนประกอบหลักของ Standard Library อย่าง asyncio ยิ่งทำให้ความเสี่ยงเพิ่มสูงขึ้นอย่างมาก สำหรับการใช้งาน Python ในระดับ Production บนระบบ Windows
แพตซ์แก้ไขช่องโหว่ได้ถูกส่งไปยัง Repository ของ CPython เรียบร้อยแล้วผ่านทาง GitHub Pull Request #148809 โดยแพตช์นี้ได้เพิ่มการตรวจสอบขอบเขต (Boundary check) ที่ขาดหายไป เพื่อให้มั่นใจได้ว่าข้อมูลที่ได้รับมาจะไม่สามารถมีขนาดเกินกว่าขนาดของบัฟเฟอร์ที่กำหนดไว้ในพารามิเตอร์ nbytes ได้
ผู้ใช้งาน Python บน Windows ควรปฏิบัติดังนี้:
- เฝ้าติดตาม CVE อย่างเป็นทางการ: ตรวจสอบรายละเอียดเวอร์ชันที่แก้ไขแล้วได้ที่ cve.org/CVERecord?id=CVE-2026-3298 เพื่อดูว่าเวอร์ชันที่ใช้งานได้รับแพตช์แล้วหรือยัง
- อัปเดต Python ทันทีที่มีเวอร์ชันใหม่ออกมา: เมื่อมีการปล่อยตัวอัปเดต (Updated release) ให้รีบติดตั้งลงในระบบเพื่อปิดช่องโหว่โดยเร็วที่สุด
- หลีกเลี่ยงการใช้คำสั่งที่มีปัญหาเป็นการชั่วคราว: ในระหว่างที่ยังไม่ได้อัปเดต ควรหลีกเลี่ยงการใช้ sock_recvfrom_into() method ร่วมกับพารามิเตอร์ nbytes ในสภาพแวดล้อมบนเครือข่ายที่ไม่น่าเชื่อถือ เพื่อป้องกันการโจมตี
เนื่องจาก asyncio.ProactorEventLoop ได้ถูกกำหนดให้เป็นค่าเริ่มต้นของ Event Loop บน Windows มาตั้งแต่ Python 3.8 จึงทำให้ช่องโหว่นี้ส่งผลกระทบต่อการใช้งาน Python เวอร์ชันใหม่ ๆ ในวงกว้าง
นักพัฒนาที่กำลังสร้างแอปพลิเคชันที่ต้องเชื่อมต่อกับเครือข่ายบน Windows จึงควรให้ความสำคัญสูงสุดในการอัปเดตแพตช์นี้
ที่มา : gbhackers.com

You must be logged in to post a comment.