มีการตรวจพบช่องโหว่วิกฤตในไลบรารี PLY (Python Lex-Yacc) เวอร์ชัน 3.11 ที่เผยแพร่ผ่าน PyPI ซึ่งช่วยให้สามารถรันโค้ดตามอำเภอใจได้ผ่านการ deserialization ไฟล์ pickle ที่ไม่น่าเชื่อถือโดยไม่ปลอดภัย ช่องโหว่นี้ระบุด้วยรหัส CVE-2025-56005 ส่งผลกระทบต่อพารามิเตอร์ `picklefile` ที่ไม่ได้มีการบันทึกไว้ในฟังก์ชัน `yacc()` ซึ่งยังคงไม่มีอยู่ในเอกสารทางการ แม้จะมีการใช้งานในเวอร์ชันที่เผยแพร่จริงก็ตาม ช่องโหว่นี้ก่อให้เกิดความเสี่ยงที่ไม่เหมือนใคร เนื่องจากโค้ดจะถูกรันอย่างเงียบๆ ในระหว่างการเริ่มต้นแอปพลิเคชัน ก่อนที่จะเข้าถึงตรรกะการวิเคราะห์ใดๆ
Severity: วิกฤต
System Impact:
- ไลบรารี PLY (Python Lex-Yacc) เวอร์ชัน 3.11 ที่เผยแพร่ผ่าน PyPI
- สภาพแวดล้อมที่ตาราง parser ถูกแคชไว้บนดิสก์
- สภาพแวดล้อมที่มีการแชร์ตาราง parser ระหว่างบริการต่างๆ
- สภาพแวดล้อมที่มีการสร้างตาราง parser ใน CI/CD pipelines
- แอปพลิเคชันที่ใช้ไลบรารี PLY 3.11
Technical Attack Steps:
- ช่องโหว่เกิดจากพารามิเตอร์ `picklefile` ในฟังก์ชัน `yacc()` ซึ่งเป็นพารามิเตอร์ที่ไม่ได้มีการบันทึกไว้
- พารามิเตอร์ `picklefile` เรียกใช้ `pickle.load()` บนไฟล์ที่ผู้โจมตีควบคุมได้โดยไม่มีการตรวจสอบความถูกต้อง
- โมดูล `pickle` ของ Python มีการรองรับการรันโค้ดตามอำเภอใจในระหว่างการ deserialization ผ่านเมธอด `__reduce__()`
- ผู้โจมตีสามารถควบคุม, แทนที่ หรือมีอิทธิพลต่อเส้นทางของไฟล์ pickle ได้ (เช่น ตำแหน่งตาราง parser ที่แคชไว้, ไดเรกทอรีเครือข่ายที่ใช้ร่วมกัน, อาร์ติแฟกต์ของ CI/CD pipeline, หรือเส้นทางไฟล์ที่กำหนดค่าหรือเขียนได้)
- การโหลดไฟล์ pickle ที่สร้างขึ้นโดยเฉพาะ (malicious pickle payload) ที่มีเมธอด `__reduce__()` ที่ฝังอยู่ จะทำให้โค้ดถูกรันโดยพลันก่อนที่ parser จะเริ่มทำงาน
Recommendations:
Short Term:
- หลีกเลี่ยงการใช้พารามิเตอร์ `picklefile` กับไฟล์ที่ไม่น่าเชื่อถือหรือไฟล์ที่สามารถเขียนได้จากภายนอก
- ปิดใช้งานการโหลดตาราง parser จากตำแหน่งที่ผู้ใช้ควบคุมได้
- ถือว่าไฟล์ pickle ทั้งหมดเป็นอินพุตที่ไม่ปลอดภัย
Long Term:
- สร้างตาราง parser แบบไดนามิก แทนที่จะโหลดจากดิสก์
- นักพัฒนาควรอัปเดตแอปพลิเคชันที่ใช้ PLY 3.11
- ตรวจสอบการตั้งค่าเพื่อหาช่องโหว่ที่อาจเกิดขึ้นผ่านพารามิเตอร์ที่ไม่ได้มีการบันทึกไว้
Source: https://cybersecuritynews.com/python-ply-library-vulnerability/
Share this content: