เครื่องมือสำหรับการสร้างเว็บไซต์และจัดการด้านระบบเครือข่ายที่ได้รับความนิยมนั้น หนึ่งในนั้นคงหนีไม่พ้น PHP แต่เครื่องมือดังกล่าวนี้ก็มีจุดอ่อน และช่องโหว่มากมายให้แฮกเกอร์นำไปใช้งานได้เช่นเดียวกัน
จากรายงานโดยเว็บไซต์ Cyber Security News ได้กล่าวถึงการตรวจพบช่องโหว่บนฟังก์ชันของ PHP เวอร์ชัน 5.x, 7.x และ 8.x โดยฟังก์ชันที่เป็นประเด็นอยู่นั้นเป็นฟังก์ชันด้านการจัดการหน่วยความจำ (Memory Management) ที่มีชื่อว่า extract() โดยเฉพาะอย่างยิ่งเมื่อฟังก์ชันดังกล่าวถูกใช้งานร่วมกับ EXTR_REFS
บทความเกี่ยวกับ Website Development อื่นๆ
ภาพจาก : https://cybersecuritynews.com/php-extract-function-vulnerability/
สำหรับการทำงานของฟังก์ชันตัวนี้ที่เป็นปัญหาอยู่นั้น ตัวฟังก์ชันจะทำการนำเข้า Array จากตารางสัญลักษณ์ (Symbol Table) ซึ่งในส่วนตรงนี้แฮกเกอร์นั้นจะสามารถบงการเพื่อนำไปสู่สถานภาพ (Condition) ของหน่วยความจำที่เอื้ออำนวยต่อการแฮกได้ ซึ่งเมื่อฟังก์ชัน extract() ทำการประมวลตัวแปรของ PHP Object ที่ถูกระบุด้วยวิธีการ __destruct() เรียบร้อย ช่องโหว่ดังกล่าวจะทำงานด้วยการนำตัวระบบไปสู่ Race Condition (สภาพการทำงานที่ซ้ำซ้อน) จากนั้นแฮกเกอร์ก็จะใช้วิธีการ __destruct() ในการปลดตัวแปรต่าง ๆ ที่ทำงานบน extract() ซึ่งจะนำไปสู่ช่องโหว่ที่เอื้ออำนวยให้แฮกเกอร์ทำการรันโค้ดโดยไม่ได้รับอนุญาตได้ ซึ่งช่องโหว่จะแตกต่างกันไปตามเวอร์ชันของ PHP ดังนี้
- Double-Free Condition : ช่องโหว่ที่เกิดจากตัวโปรแกรมทำการคลายการใช้งานหน่วยความจำที่ซ้ำซ้อนกันถึง 2 ครั้ง บน PHP เวอร์ชัน 5.x
- Use-after-Free : ช่องโหว่ที่เกิดขึ้นจากหน่วยความจำที่ถูกใช้งานโดยแอปพลิเคชันถูกคลายออกมา บน PHP เวอร์ชัน 7.x และ 8.x
ซึ่งเมื่อเกิดช่องโหว่ดังกล่าวขึ้นมาแล้ว แฮกเกอร์จะปฏิบัติตามขั้นตอนดังนี้เพื่อรันโค้ดที่ไม่ได้รับอนุญาต ตามขั้นตอนดังต่อไปนี้
- ใช้ช่องโหว่ดังกล่าวเข้าจัดการในส่วนของการจัดการปันส่วนหน่วยความจำ (Memory Allocation) โดยจัดการให้เกิดโครงสร้างหน่วยความจำแบบทับซ้อน (Overlapping Memory Structures) ขึ้นมา
- สั่งการให้เกิดการเปิดเผยที่อยู่ของส่วนหน่วยความจำที่สำคัญยิ่งยวดของ PHP เช่น executor_globals
- ทำการค้นหาฟังก์ชันบนหน่วยความจำที่ถูกปิดใช้งานอยู่ เช่น system()
- ท้ายสุด ทำการสั่งเปิดฟังก์ชันที่ถูกปิดใช้งานทั้งหมด พร้อมทั้งเขียนทับเพื่อแก้ไขโครงสร้างของหน่วยความจำแบบยกเครื่องใหม่
ในปัจจุบันนั้นทางทีมงานผู้พัฒนา PHP ได้รับทราบถึงปัญหาดังกล่าวเรียบร้อยแล้ว แต่ยังไม่ได้มีการออกอัปเดตมาเพื่อจัดการกับปัญหาดังกล่าว ณ ขณะนี้ โดยทางแหล่งข่าวได้แนะนำวิธีการจัดการกับปัญหาแค่เพียงว่า ให้อัปเดต PHP ขึ้นเป็นรุ่นล่าสุดเสียก่อนสำหรับผู้ใช้งานในเวอร์ชันที่เป็นประเด็น รวมทั้งมีความระมัดระวังในการใช้ฟังก์ชัน extract() อย่างยิ่งยวด
ที่มา : cybersecuritynews.com
Leave a comment