อัปเดต PHP บนเซิร์ฟเวอร์ที่ดูแลเองให้พ้น PHP2Shell: Ubuntu, Debian, RHEL, Windows, XAMPP, AppServ และ Docker
วิธีอัปเดต PHP ให้พ้น PHP2Shell บน Ubuntu, Debian, RHEL, Windows และ Docker พร้อมคำสั่งทางการและวิธียืนยัน รวมถึง XAMPP บน Linux กับ AppServ ที่ยังไม่มี fix
อัปเดต PHP บนเซิร์ฟเวอร์ที่ดูแลเองให้พ้น PHP2Shell: Ubuntu, Debian, RHEL, Windows, XAMPP, AppServ และ Docker
PHP ออกเวอร์ชัน 8.5.12, 8.4.27, 8.3.36 และ 8.2.35 เมื่อ 21 ตุลาคม 2026 เพื่อปิดช่องโหว่คู่ที่เรียกกันว่า PHP2Shell (รายละเอียดช่องโหว่) บทความนี้ไล่ทีละแพลตฟอร์มว่าเครื่องที่ดูแลเองต้องอัปเดตอย่างไร
คำตอบสั้น: อัปเดตจากช่องทางเดียวกับที่ติดตั้ง PHP มา ตั้งค่า config แล้วรีสตาร์ท PHP-FPM หรือ Apache ให้โหลด binary ตัวใหม่ จากนั้นเทียบเลขแพ็กเกจกับประกาศ แหล่งส่วนใหญ่มี build ที่แก้แล้วระหว่าง 21–23 ตุลาคม แต่ขึ้นกับแหล่งแพ็กเกจและ branch ที่ใช้ ตัวอย่างที่ยังไม่มี เช่น XAMPP บน Linux/macOS, AppServ และ Docker image ของ 8.1/8.0 เครื่องที่ยังไม่มี fix ไม่ควรเข้าถึงได้จากอินเทอร์เน็ต
ยังไม่รู้ว่าเครื่องไหนรัน PHP ตัวไหน เริ่มจากบทความเช็คเวอร์ชัน PHP ใครใช้ cPanel หรือ Plesk ดูบทความ hosting panel ส่วน appliance ดูบทความผลิตภัณฑ์ที่มี PHP ข้างใน
สถานะ build ที่แก้แล้ว ณ 25 ตุลาคม 2026
ภาพ ณ 25 ตุลาคม (วันที่เป็น UTC) ถ้าประกาศหรือ tracker ล่าสุดของ vendor ที่ลิงก์ไว้บอกต่างไป ให้ยึดของ vendor
| แพลตฟอร์ม | มี build ที่แก้แล้วไหม | เลขที่ต้องดู |
|---|
| Ubuntu 22.04 / 24.04 / 26.04 | มี, USN-8948-1 (21 ต.ค.) | เลขเดิม เช่น 8.3.6-0ubuntu0.24.04.13 บน 24.04 |
| Ubuntu 14.04–20.04 | เฉพาะ Ubuntu Pro, USN-8948-2 (21 ต.ค.) | ตาม USN |
| Debian 12 / 13 | มี, DSA-6574-1 (21 ต.ค.) และ DLA-4848-1 (tracker) | 8.2.35-1~deb12u1, 8.4.27-1~deb13u1 |
| PPA ondrej/php, packages.sury.org | มี (21 ต.ค.) | เลขตาม PHP |
| RHEL 8 / 9 / 10 | เกือบทุก stream, RHSA (21 ต.ค.) | php:8.4 บน 9 ยัง Affected |
| AlmaLinux 8 / 9 / 10 | ตาม stream ในประกาศ (21 ต.ค.) | เลขต่ำกว่า upstream ลงท้าย .alma.1 |
| Rocky Linux 8 / 9 / 10 | มี, RLSA (22 ต.ค.) | ยังไม่พบ RLSA ของ php:8.4 บน 9 |
| Remi (EL 8 ขึ้นไป) | มี, ประกาศ Remi (22 ต.ค.) | เลขตาม PHP |
| Windows (zip จาก php.net) | มี, windows.php.net (21 ต.ค.) | 8.2.35, 8.3.36, 8.4.27, 8.5.12 |
| XAMPP for Windows | 8.3.36, 8.4.27, 8.5.12 (Apache Friends, 23 ต.ค.) | ไม่มีรุ่น 8.2.35 |
| XAMPP for Linux | ไม่มี (SourceForge) | ล่าสุดคือ 8.2.12 (2023) |
| XAMPP for macOS | ไม่มี (SourceForge) | ล่าสุดคือ 8.2.4 |
| AppServ | ไม่มี (appserv.org) | 9.3.0 ใช้ PHP 7.3.10 (2019) |
Docker image php ทางการ | tag 8.2.35, 8.3.36, 8.4.27, 8.5.12 (Docker Hub) | ไม่มีของ 8.1 และ 8.0 |
เลขต่ำไม่ได้แปลว่ายังไม่แพตช์ Ubuntu และ AlmaLinux ใส่ fix ลงในเลขเดิมของตัวเอง
1. ก่อนรีสตาร์ท: ตั้งค่า config ให้เสร็จ
ตั้งค่าใน php.ini, FPM pool หรือ config ของ server ให้เสร็จก่อนขั้นรีสตาร์ทด้านล่าง (php.net บอกว่าอย่าพึ่งพา ini_set() หรือ .user.ini) หลังรีสตาร์ทให้ตรวจค่าที่มีผลจริงจาก request ของเว็บตามที่ Sophos แนะนำ ผ่านหน้าที่จำกัดสิทธิ์ ห้ามเปิด phpinfo() สู่สาธารณะ
session.upload_progress.enabled=0 php.net (23 ต.ค., CVE-2026-115560 ซึ่งแยกจาก PHP2Shell) แนะนำค่านี้จนถึงรอบ bugfix ปกติครั้งหน้า
memory_limit เฉพาะเครื่องที่เคยตั้ง -1 Sansec (บุคคลที่สาม) แนะนำให้กลับไปใช้ค่าจำกัด ส่วน GHSA-w8hw-w9fx-j79w ระบุว่า fix เพิ่ม hard OOM ด้วย _exit()
2. Ubuntu และ Debian
-
อัปเดตจาก repository ของ distro หน้า About CVEs ของ Ubuntu บอกว่าคำสั่งนี้อัปเกรดทุกแพ็กเกจที่ติดตั้ง ต้องรันด้วย sudo และไม่แนะนำให้เลือกอัปเป็นรายแพ็กเกจ
sudo apt update && sudo apt upgrade
Security FAQ ของ Debian ก็ให้ใช้ apt-get update แล้ว apt-get upgrade (สิทธิ์ root) ซึ่งอัปทุกแพ็กเกจเช่นกัน
-
ถ้าเลขเวอร์ชันแพ็กเกจมี deb.sury.org แปลว่า PHP มาจาก repository ของ Ondřej Surý ทั้ง PPA (Ubuntu 22.04, 24.04) และ packages.sury.org (Debian 12, 13) มี 8.2.35, 8.3.36, 8.4.27 และ 8.5.12 ตั้งแต่ 21 ตุลาคม คำสั่งข้างบนดึงมาให้เหมือนกัน ส่วน build ใหม่ของ 8.1, 8.0 และ 7.4 จากที่เดียวกันยังไม่มีหน้าทางการยืนยันว่าแก้ CVE แล้ว ดูบทความ PHP รุ่นเก่า ซึ่งครอบคลุม Ubuntu 14.04–20.04 ด้วย
-
รีสตาร์ท ThaiCERT ให้รีสตาร์ท PHP worker และ web server ที่เกี่ยวข้องหลังอัปเดตเพื่อให้โหลด binary ที่แก้แล้ว คือ Apache ถ้าใช้ mod_php และ service PHP-FPM ของเวอร์ชันนั้นถ้าใช้ FPM ให้ใช้ restart แทน reload เพราะคู่มือ PHP ไม่ได้บอกว่า reload จะโหลด binary ใหม่
-
ยืนยัน dpkg-query -W 'php*' 'libapache2-mod-php*' แสดงแพ็กเกจ PHP พร้อมเวอร์ชันที่ติดตั้งจริง ให้เทียบกับแพ็กเกจชื่อเดียวกันใน USN หรือ Debian tracker แล้วเช็คจากฝั่งเว็บ
3. RHEL, AlmaLinux และ Rocky Linux: AppStream และ Remi
-
RHEL RHSA วันที่ 21 ตุลาคม ครอบคลุมแพ็กเกจ PHP ใน AppStream ของ RHEL 8, 9 และ 10 เกือบทุก stream ยกเว้น module php:8.4 บน RHEL 9 ที่ยังขึ้น Affected ณ 25 ตุลาคม บทความของ Red Hat ที่ทุก RHSA ลิงก์ไปให้ใช้ dnf upgrade บน RHEL 9 และ dnf update บน RHEL 8 ซึ่งอัปเดตทั้งระบบและต้องรันด้วยสิทธิ์ root
-
AlmaLinux ประกาศของ AlmaLinux ให้ใช้
sudo dnf clean metadata && sudo dnf upgrade 'php*'
sudo systemctl restart php-fpm
ถ้าใช้ mod_php บน AlmaLinux 8 ให้ใช้ sudo systemctl restart httpd แทน
-
Rocky Linux ออก RLSA เลขเดียวกับ RHSA เมื่อ 22 ตุลาคม ครบ Rocky 8, 9 และ 10 ณ 25 ตุลาคม ยังไม่พบ RLSA ของ php:8.4 บน Rocky 9 และประกาศ AlmaLinux 9 ก็ไม่ได้ระบุ php:8.4 สถานะของ stream นี้จึงยังยืนยันไม่ได้ ให้ถามผู้ทำแพ็กเกจที่ใช้ (PHP 8.4 ของ Remi มี 8.4.27 ที่แก้แล้ว)
-
Remi ประกาศทั้งสี่เวอร์ชันใน remi-modular เมื่อ 22 ตุลาคม คำสั่งในประกาศคือ dnf module switch-to php:remi-8.4/common (ใช้ 8.4 ของ Remi แทน PHP เริ่มต้น) หรือ yum install php84 (ติดตั้งคู่กันแบบ SCL)
-
ยืนยัน เทียบ rpm -q php-common (หรือ php8.4-common สำหรับ PHP 8.4 บน 10) กับแพ็กเกจชื่อเดียวกันในประกาศ AlmaLinux, RHSA หรือ RLSA แล้วเช็คจากฝั่งเว็บ
4. Windows และ IIS/FastCGI
- ดาวน์โหลด หน้า Downloads ของ php.net (Windows) และโฟลเดอร์ releases มี zip ของ 8.2.35, 8.3.36, 8.4.27 และ 8.5.12 ลงวันที่ 21 ตุลาคม
- เลือกแบบ php.net เขียนว่าใช้กับ IIS แบบ FastCGI ให้เลือก NTS ใช้กับ Apache ให้เลือก TS
- IIS คู่มือ PHP ตั้งค่า handler mapping ของ
.php ให้ชี้ไปที่ php-cgi.exe (ไม่ใช่ php.exe) path นั้นจึงต้องชี้ไปที่ build ใหม่
- รีสตาร์ท เราไม่พบเอกสารทางการเรื่องรีสตาร์ท IIS หรือ FastCGI หลังเปลี่ยนไฟล์ PHP ให้ทำตามเอกสารของ Microsoft สิ่งที่ต้องได้คือไม่มี
php-cgi.exe จาก build เก่าค้างอยู่ ถ้าใช้ Apache ให้รีสตาร์ท service ของ Apache
- ยืนยัน ใน PowerShell ให้รัน
.\php.exe -v ในโฟลเดอร์ที่ handler ชี้ หรือใส่ path เต็ม (เอกสาร Microsoft บอกว่า PowerShell ไม่รันไฟล์ในโฟลเดอร์ปัจจุบันถ้าไม่ระบุ path) แล้วยืนยันจากฝั่งเว็บ
5. XAMPP
ถ้าโรงเรียน มหาวิทยาลัย หรือหน่วยงานของคุณยังมีเครื่องที่ลง XAMPP หรือ AppServ ไว้ สองหัวข้อนี้สำคัญที่สุด
- Windows Apache Friends มี XAMPP for Windows 8.5.12, 8.4.27 และ 8.3.36 ลงวันที่ 23 ตุลาคม แต่ไม่มีรุ่น 8.2.35 ผู้ใช้ 8.2 ต้องขยับไป 8.3.36 ขึ้นไปและทดสอบแอปก่อน เราไม่พบขั้นตอนอัปเกรดทับของเดิมจาก Apache Friends จึงควรวางแผนเหมือนติดตั้งใหม่ (เราแนะนำให้สำรอง htdocs และฐานข้อมูลก่อน) แล้วยืนยันจากฝั่งเว็บ
- Linux และ macOS ยังไม่มี build ที่แก้แล้ว ล่าสุดบน Linux คือ 8.2.12 (25 พฤศจิกายน 2023) และของ macOS คือ 8.2.4
- แล้วทำอะไรแทน FAQ ของ XAMPP เองเขียนว่า XAMPP "is not meant for production use" ถ้าเครื่องไหนเข้าถึงได้จากอินเทอร์เน็ต ThaiCERT ให้พิจารณาแยกออก หรือจำกัดให้เข้าได้เฉพาะเครือข่ายและ IP ที่อนุญาตจนกว่าจะแพตช์ เว็บที่ต้องเปิดสาธารณะควรย้ายไปอยู่บน PHP ที่มี fix ตามหัวข้อ 2–3
6. AppServ
AppServ ตัวล่าสุดคือ 9.3.0 ที่มากับ PHP 7.3.10 ออกวันที่ 29 กันยายน 2019 PHP 7.3 หมดอายุตั้งแต่ 6 ธันวาคม 2021 ทีม PHP ทำ source backport ให้แค่ 7.4, 8.0 และ 8.1 จึงไม่มี fix จาก PHP สำหรับ 7.3
อย่าให้เครื่อง AppServ เข้าถึงได้จากอินเทอร์เน็ต CISA บอกว่าองค์กรที่ยังใช้ PHP 8.1 หรือเก่ากว่าควรเอาระบบ PHP ออฟไลน์จนกว่าจะแพตช์หรืออัปเดตได้ ทางเลือกในการย้ายอยู่ในบทความ PHP รุ่นเก่า
7. Docker image php ทางการ
docker-library/php merge สี่เวอร์ชันที่แก้แล้วเมื่อ 21 ตุลาคม
- แก้
FROM ถ้า pin เลข patch ไว้ ให้เปลี่ยนเป็นตัวที่แก้แล้ว เช่น php:8.3.36-fpm ถ้าใช้ php:8.3-fpm ตอนนี้ tag นี้ชี้ไปที่ image เดียวกับ 8.3.36 แล้ว
- build ใหม่ เอกสาร Docker ให้ใช้
docker build --pull -t my-image:my-tag . ซึ่งบังคับให้ดึง base image ตัวใหม่
- deploy ใหม่ image เป็น snapshot การ build ใหม่ไม่เปลี่ยน container ที่รันอยู่ ThaiCERT ให้ deploy container ใหม่แล้วตรวจว่าตัวที่ให้บริการไม่ได้ใช้ PHP เดิม
- ยืนยัน
docker ps --quiet --filter "ancestor=OLD_IMAGE_ID" (แทนด้วย image ID เก่าจริง) ต้องไม่มีผลลัพธ์ คำสั่งนี้ดูเฉพาะ container ที่รันอยู่บน Docker daemon นั้น (เอกสาร Docker) จึงต้องเช็คจากฝั่งเว็บทุก replica ด้วย
ข้อจำกัดของบทความนี้
- การอัปเดตไม่ได้บอกว่าเครื่องเคยถูกเจาะหรือไม่ ให้ไล่ต่อด้วยการหาร่องรอยใน log และขั้นตอนเมื่ออาจโดนเจาะ
- ขั้นตอนรีสตาร์ทของ IIS/FastCGI, LiteSpeed และ OPcache ไม่มีแหล่งทางการที่เราอ่านเจอ ให้ทำตามเอกสารของ vendor โดยต้องไม่มี process ของ binary เก่าค้างอยู่
ลำดับงานแบบย่อ
- หาว่าแต่ละเครื่องได้ PHP มาจากไหน แล้วอัปเดตจากแหล่งนั้น
- ตั้ง
session.upload_progress.enabled=0 และคืนค่า memory_limit ถ้าเคยตั้ง -1 ใน php.ini หรือ FPM pool
- รีสตาร์ท PHP-FPM หรือ Apache เต็มรอบ ส่วน container ต้องถูกแทนที่
- เทียบเลขแพ็กเกจกับประกาศ แล้วเช็คเวอร์ชันและค่า config จากฝั่งเว็บ
- เครื่องที่ยังไม่มี fix ให้ตัดออกจากอินเทอร์เน็ตไว้ก่อน
ถ้ารายการเครื่องที่ต้องไล่ยาวจนตารางเริ่มตามไม่ไหว ดูตัวเลือกและราคาเครื่องมือได้ที่หน้าราคา
สำหรับรอบหน้า zcrX ช่วยติดตาม lifecycle และวันหมดซัพพอร์ต (EOL) ของซอฟต์แวร์แต่ละตัวได้ แต่ไม่ได้แทนการแพตช์
ติดต่อทีมงาน
อยากคุยว่าเครื่องในองค์กรควรอัปเดตตัวไหนก่อน คุยกับทีมเราได้ฟรี zcr ให้ซอฟต์แวร์ ส่วนงานลงมือจริงดำเนินการผ่าน channel partner
อ่านต่อ
เช็คเวอร์ชัน PHP ทุกเว็บ · PHP รุ่นเก่า 7.4/8.0/8.1 · อัปเดตผ่าน hosting panel · WAF ช่วยได้แค่ไหน
แหล่งข้อมูลอ้างอิง
- PHP News Archive 2026 — เวอร์ชันที่แก้แล้ว 21 ต.ค., Remi ไม่มีแพ็กเกจในวันปล่อย, ตั้งค่าใน php.ini/FPM pool/server config ไม่ใช่
ini_set() หรือ .user.ini, source backport 7.4/8.0/8.1, ประกาศ 23 ต.ค. เรื่อง session upload progress (CVE-2026-115560)
- GHSA-w8hw-w9fx-j79w (CVE-2026-109618) — soft OOM และ hard OOM ด้วย
_exit()
- Ubuntu USN-8948-1 และ USN-8948-2 — เวอร์ชันที่แก้แล้วต่อ release, Ubuntu Pro สำหรับ 14.04–20.04
- Ubuntu — About CVEs: Getting security updates —
sudo apt update && sudo apt upgrade อัปเกรดทุกแพ็กเกจที่ติดตั้ง
- Debian Security Tracker CVE-2026-109618 และ CVE-2026-109619 — เวอร์ชันที่แก้แล้วบน bookworm และ trixie; Debian Security Information — DSA-6574-1 วันที่ 21 ต.ค.
- Debian Security FAQ —
apt-get update, apt-get upgrade; dpkg-query(1) — -W แสดงชื่อแพ็กเกจและเวอร์ชันที่ติดตั้ง
- Launchpad — PPA for PHP (ondrej/php) และ DEB.SURY.ORG — build วันที่ 21 ต.ค.
- Red Hat — CVE-2026-109618, RHSA-2026:87070 และ How do I apply package updates to my RHEL system? — stream ที่แก้แล้ว,
php:8.4 บน RHEL 9 ยัง Affected, รายการแพ็กเกจรวม php-common, dnf upgrade/dnf update; rpm(8) — rpm -q
- AlmaLinux — php2shell: Patched PHP packages released — คำสั่ง dnf, รีสตาร์ท,
rpm -q, เวอร์ชันที่แก้แล้วต่อ stream
- Rocky Linux Errata — RLSA-2026:87070 (และ 87071, 87079, 87072, 87151, 87073, 87080) — เผยแพร่ 22 ต.ค., รายการแพ็กเกจ
- Remi's RPM repository — PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12 — 22 ต.ค.,
dnf module switch-to, yum install php84
- PHP for Windows — Downloads และ releases — build 21 ต.ค., NTS สำหรับ IIS, TS สำหรับ Apache
- PHP Manual — Installation with IIS for Windows และ Command line options — handler mapping ไปยัง
php-cgi.exe, ตัวเลือก -v; Microsoft — about_Command_Precedence — ใช้ .\ หรือ path เต็ม
- Apache Friends — Download XAMPP, SourceForge XAMPP Windows, XAMPP Linux และ ไฟล์ทั้งหมด — build วันที่ 23 ต.ค., Linux ล่าสุด 8.2.12, ไฟล์ล่าสุดของ macOS 8.2.4
- XAMPP Linux FAQ, Windows FAQ และ OS X FAQ — "not meant for production use"
- AppServ — Download — 9.3.0, PHP 7.3.10, 2019-09-29
- PHP — Unsupported Branches — PHP 7.3 หมดอายุ 6 ธ.ค. 2021
- docker-library/php PR #1694, Docker Hub — php และ Docker — Building best practices — tag ที่แก้แล้ว,
docker build --pull, image เป็น snapshot
- Docker — docker container ls —
--quiet, filter ancestor, แสดงเฉพาะ container ที่รันอยู่
- ThaiCERT — แจ้งเตือน พบช่องโหว่ PHP2Shell (22 ต.ค. 2026) — ข้อ 3.5 รีสตาร์ท, 3.6 container, 4.7 แยกระบบออกจากอินเทอร์เน็ต
- CISA — Critical Vulnerabilities in PHP Require Immediate Patching — PHP 8.1 หรือเก่ากว่าให้ออฟไลน์จนกว่าจะแพตช์
- Sophos — PHP2Shell advisory — ตรวจค่าที่มีผลจริงจาก request ของเว็บ ไม่ใช่ CLI
- Sansec — PHP2Shell — คำแนะนำจากบุคคลที่สามเรื่องการคืนค่า
memory_limit