ถ้าใครดูแลเว็บไซต์หรือเซิร์ฟเวอร์ที่ใช้ PHP อยู่ โพสต์นี้จะสรุปสั้นๆ ว่าเกิดอะไรขึ้น และเราควรอัปเดตเป็นเวอร์ชันไหนถึงจะปลอดภัย
PHP2Shell คืออะไร?
จริงๆ แล้ว PHP2Shell ไม่ใช่ชื่อช่องโหว่เดียว แต่เป็นชื่อที่ใช้เรียกช่องโหว่ร้ายแรง 2 ตัวที่พบใน PHP พร้อมกัน คือ CVE-2026-109618 และ CVE-2026-109619
จุดที่น่ากังวลคือช่องโหว่นี้อยู่ใน ตัว Engine ของ PHP เอง ไม่ใช่ในโค้ดเว็บไซต์ของเรา แปลว่าต่อให้เราเขียนโค้ดอย่างปลอดภัยแค่ไหน หรือเว็บเป็นแค่หน้า Hello World ก็ยังมีความเสี่ยงที่จะถูกโจมตีได้ ถ้าเวอร์ชัน PHP ที่รันอยู่มีช่องโหว่
ช่องโหว่ทั้งสองตัวนี้ส่งผลกระทบต่อการติดตั้ง PHP แทบทุกรูปแบบที่ให้บริการเว็บ เช่น PHP-FPM, Apache mod_php, php-cgi, FrankenPHP และ LiteSpeed โดยเฉพาะระบบที่ใช้ Apache mod_php ถือว่ามีความเสี่ยงสูงที่สุด เพราะแฮกเกอร์อาจส่ง request เดียวก็สามารถโจมตีได้สำเร็จก่อนที่โค้ดแอปพลิเคชันจะเริ่มทำงานด้วยซ้ำ
เราจะเช็กเวอร์ชัน PHP ของเราได้อย่างไร?
ก่อนจะอัปเดต สิ่งแรกที่ต้องรู้คือตอนนี้เราใช้ PHP เวอร์ชันอะไรอยู่ ซึ่งมีหลายวิธีในการเช็ก ขึ้นอยู่กับว่าเราเข้าถึงเซิร์ฟเวอร์ได้แค่ไหน
1. ถ้าเข้าถึงเซิร์ฟเวอร์ผ่าน SSH หรือ Terminal ได้
วิธีที่ตรงที่สุดคือใช้คำสั่งนี้
php -v
ระบบจะแสดงเวอร์ชัน PHP ที่ติดตั้งอยู่ เช่น PHP 8.3.35 (cli) ... แต่ต้องระวังว่าคำสั่งนี้จะแสดงเวอร์ชันของ PHP CLI ซึ่งอาจไม่ตรงกับเวอร์ชันที่ Web Server ใช้รันเว็บจริงก็ได้
ถ้าใช้ PHP-FPM ให้ลองเช็กเวอร์ชันของ binary ที่รันอยู่โดยตรง
php-fpm -v
หรือดูจาก service ที่กำลังทำงานอยู่
systemctl status php8.3-fpm
2. ถ้าใช้เว็บโฮสติ้งและไม่มีสิทธิ์เข้า SSH
วิธีง่ายที่สุดคือสร้างไฟล์ชื่อ info.php วางไว้ในโฟลเดอร์เว็บ แล้วใส่โค้ดนี้
<?php phpinfo(); ?>
จากนั้นเปิดผ่านเบราว์เซอร์ เช่น https://yourdomain.com/info.php จะเห็นเวอร์ชัน PHP อยู่ด้านบนสุดของหน้า
⚠️ ข้อควรระวังสำคัญ: อย่าลืมลบไฟล์
info.phpออกทันทีหลังเช็กเสร็จ porqueไฟล์นี้เปิดเผยข้อมูล sensitive ของเซิร์ฟเวอร์ให้ใครก็ตามที่เข้าถึงได้
3. ถ้าใช้ CMS อย่าง WordPress
เข้าไปที่ Tools → Site Health → Info แล้วดูหัวข้อ Server จะเห็นเวอร์ชัน PHP ที่ใช้งานอยู่ โดยไม่ต้องสร้างไฟล์ใดๆ เลย
4. ถ้าใช้ Hosting Panel
พวก cPanel, Plesk, DirectAdmin มักมีหน้าแสดงข้อมูลเวอร์ชัน PHP ให้ดูได้โดยตรง หรือในส่วน "Select PHP Version" / "MultiPHP Manager" ก็จะบอกเวอร์ชันที่แต่ละโดเมนใช้อยู่
หลังเช็กเสร็จแล้ว ถ้าเวอร์ชันที่ได้ต่ำกว่าตารางด้านล่างนี้ ให้รีบอัปเดตโดยด่วน
เวอร์ชัน PHP ที่ปลอดภัยต้องอัปเดตเป็นอะไร?
ทีมพัฒนา PHP ได้ออกแพตช์ฉุกเฉินมาแล้ว เราสามารถเช็กเวอร์ชันที่ปลอดภัยได้ตามนี้
| สายเวอร์ชัน PHP | เวอร์ชันที่ปลอดภัย (มีแพตช์แล้ว) |
|---|---|
| PHP 8.5 | อัปเดตเป็น 8.5.12 ขึ้นไป |
| PHP 8.4 | อัปเดตเป็น 8.4.27 ขึ้นไป |
| PHP 8.3 | อัปเดตเป็น 8.3.36 ขึ้นไป |
| PHP 8.2 | อัปเดตเป็น 8.2.35 ขึ้นไป (แต่สายนี้จะหมด support ปลายปี 2026) |
ข้อควรระวังสำหรับคนที่ใช้เวอร์ชันเก่า: ถ้าใครยังใช้ PHP 8.1 หรือเวอร์ชันที่เก่ากว่านั้น (เช่น 7.4, 5.4) ทางทีม PHP ไม่มีแพตช์อย่างเป็นทางการให้แล้ว เพราะว่าสายเหล่านี้หมดอายุการสนับสนุนไปแล้ว (End of Life) ทางเลือกคือต้องอัปเกรดขึ้นมาใช้เวอร์ชันที่ยังมี support หรือถ้าจำเป็นจริงๆ อาจต้องปรึกษาผู้ให้บริการโฮสติ้งว่ามี backport patch ให้หรือไม่
วิธีแก้ไขและสิ่งที่ต้องทำหลังอัปเดต
การแก้ไขที่สมบูรณ์ที่สุดคือ การอัปเดต PHP แต่อย่าลืมขั้นตอนสำคัญเหล่านี้ด้วย:
- รีสตาร์ทบริการ: แค่ติดตั้งแพตช์เฉยๆ ไม่เพียงพอ porqueว่า process ที่รันค้างอยู่จะยังใช้โค้ดเก่าอยู่ ต้องรีสตาร์ท PHP-FPM, Apache และ worker process ทั้งหมดด้วย
- ตรวจสอบ Changelog: บางครั้งผู้ให้บริการโฮสติ้งหรือ Linux Distro อาจทำ backport แพตช์มาโดยที่เลขเวอร์ชันดูเก่า ให้ดูที่ changelog ของแพ็กเกจว่ามีการแก้ไข CVE นี้หรือยัง
- ถ้ายังอัปเดตไม่ได้ทันที: PHP ยืนยันว่าไม่มีวิธีตั้งค่าอะไรที่ทดแทนการแพตช์ได้ 100% แต่มีมาตรการชั่วคราวที่พอช่วยลดความเสี่ยงได้ เช่น การปิด
session.upload_progress.enabledใน php.ini หรือการจำกัดขนาด request ที่ Web Server
ถ้าใครมีเว็บที่รัน PHP อยู่ แนะนำให้รีบเช็กเวอร์ชันด้วยคำสั่ง php -v แล้วอัปเดตกันโดยด่วนครับ ความปลอดภัยของข้อมูลผู้ใช้สำคัญที่สุด