- 22
- ตุลาคม
"PHP2Shell คืออะไร? ช่องโหว่ PHP ร้ายแรงที่ทำให้เว็บทั่วโลกต้องปิดชั่วคราว ใครกระทบ แก้อย่างไร 2569" — คำตอบสั้นที่สุดคือ PHP2Shell เป็นชื่อเรียกรวมของช่องโหว่ 2 รายการในตัวภาษา PHP เอง (CVE-2026-109618 และ CVE-2026-109619) ที่เปิดให้คนนอกสั่งรันโค้ดบนเซิร์ฟเวอร์ได้โดยไม่ต้องล็อกอิน ทีม PHP ออกเวอร์ชันแก้เมื่อ 21 ตุลาคม 2569 และเขียนไว้ตรง ๆ ว่า "ไม่มีมาตรการชั่วคราวที่ปิดช่องได้สมบูรณ์ การอัปเดตเป็นทางเลือกเดียวที่ปลอดภัย" บทความนี้สรุปว่าช่องโหว่คืออะไร ใครกระทบบ้าง ร้ายแรงแค่ไหน ต้องทำอะไรตามลำดับ พร้อมเช็กลิสต์สำหรับทีม IT ไทย และโยงกับมาตรฐาน Website Security ของ สกมช. ที่หน่วยงานรัฐต้องทำตามอยู่แล้ว
สรุปสั้นๆ: PHP2Shell = ช่องโหว่ 2 ตัวในตัว PHP ทุกเวอร์ชันตั้งแต่ 5.4 ถึง 8.5.11 คะแนน CVSS 9.2 ให้คนนอกรันโค้ดบนเซิร์ฟเวอร์ได้โดยไม่ต้องล็อกอิน แก้ได้ทางเดียวคืออัปเดตเป็น PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 แล้ว restart worker ทุกตัว ส่วน PHP 8.1 ลงไปไม่มีรุ่นทางการ ต้องพึ่งแพตช์ของผู้ให้บริการ Linux หรืออัปเกรด
หมายเหตุก่อนอ่าน: ข้อมูลในบทความตรวจ ณ 22 ตุลาคม 2569 จากประกาศของทีม PHP (php.net และ GitHub advisory 2 ฉบับ) หน่วยงานรัฐ (CISA สหรัฐฯ, NCSC สหราชอาณาจักร, อว. และ สกมช.) และรายงานของ Rapid7, Wiz, Google Cloud, AWS, Qualys, Cloudflare สถานการณ์ยังเปลี่ยนเป็นรายชั่วโมง ตัวเลขการโจมตีทุกตัวระบุผู้รายงานกำกับไว้ ถ้าข้อมูลขัดกันให้ยึดประกาศของ php.net เป็นหลัก
1. เกิดอะไรขึ้น ไทม์ไลน์ 3 วันที่ทำให้เว็บทั่วโลกปิดชั่วคราว
PHP เป็นภาษาที่อยู่เบื้องหลังเว็บไซต์ 69.3% ของเว็บทั้งหมดที่ระบุภาษาฝั่งเซิร์ฟเวอร์ได้ (W3Techs, 22 ตุลาคม 2569) ตั้งแต่ WordPress, Joomla, Drupal ไปจนถึงระบบภายในองค์กรที่จ้างพัฒนา เมื่อทีม PHP ประกาศล่วงหน้าคืนวันที่ 20 ตุลาคมว่าจะออกแพตช์ "ช่องโหว่ระดับวิกฤต 2 รายการ" และเลข CVE (Common Vulnerabilities and Exposures คือรหัสกลางที่ทั่วโลกใช้อ้างถึงช่องโหว่) หลุดออกมาก่อนกำหนด หน่วยงานหลายประเทศจึงเลือกปิดเว็บชั่วคราวแทนการรอ
| วันที่ | เหตุการณ์ | ที่มา |
|---|---|---|
| ปี 2567 | PHP จ้างตรวจสอบความปลอดภัยจากภายนอกครั้งแรกในรอบหลายปี (Quarkslab ผ่าน OSTIF) ระหว่างแก้ประเด็นหนึ่ง นักพัฒนาหลักพบร่องรอยบั๊กเรื่องหน่วยความจำหมด แต่ทีมตกลงวิธีแก้กันไม่ได้ งานค้างข้ามปี | PHP Foundation |
| 11 ส.ค. 2569 | บริษัท Calif (ตรวจสอบ PHP ภายใต้โครงการ Patch the Planet ของ OpenAI) รายงานช่องโหว่รันโค้ดจากระยะไกลที่มีต้นตอเดียวกับบั๊กปี 2567 · 24 ส.ค. Wiz รายงานต้นตอเดียวกันแยกต่างหาก · 18 ก.ย. OpenAI รายงานทางโจมตีเพิ่มเติม | PHP Foundation, Wiz |
| 17 ต.ค. 2569 | เซ็นเซอร์ล่อเป้า (honeypot) MadPot ของ Amazon บันทึกความพยายามโจมตีครั้งแรก 4 วันก่อนเปิดเผยต่อสาธารณะ จาก IP ของบริการปกปิดตัวตนเชิงพาณิชย์ ยังไม่รู้ว่าผู้โจมตีได้ข้อมูลมาจากไหน | AWS Security Blog |
| 20 ต.ค. 2569 | ราว 15:00 UTC เลข CVE ทั้งสองหลุดออนไลน์พร้อมคะแนน 10.0 ที่ไม่ถูกต้อง · 19:30 UTC ทีม PHP ประกาศล่วงหน้าและเลื่อนวันออกแพตช์จาก 22 เป็น 21 ต.ค. · Calif เผยแพร่วิดีโอสาธิตโดยไม่ตั้งใจ ลบแล้วแต่มีสำเนากระจาย | PHP Foundation |
| 21 ต.ค. 07:41 UTC | Chainguard ปล่อย container image ที่แก้แล้วก่อนเวลานัดหมาย 6 ชั่วโมง ทำให้ใครก็ตามเทียบโค้ดที่เปลี่ยนได้ | PHP Foundation |
| 21 ต.ค. 14:00 UTC (21:00 น. ไทย) | PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 ออก พร้อมคำเตือนว่าไม่มีมาตรการชั่วคราวที่สมบูรณ์ · CISA และ NCSC สหราชอาณาจักรออกคำเตือนวันเดียวกัน ทั้งคู่บอกตรง ๆ ว่าถ้าอัปเดตทันทีไม่ได้ให้ปิดระบบไปก่อน (สื่อรายงานว่า NSA ออกคำแนะนำทำนองเดียวกัน) | php.net, CISA, NCSC |
| 21–22 ต.ค. 2569 | เว็บหน่วยงานรัฐ โรงพยาบาล และท่าเรือบางแห่งในเยอรมนี ฝรั่งเศส เนเธอร์แลนด์ ฟินแลนด์ เบลเยียม เช็ก รวมถึงบางระบบของ Wikimedia ปิดชั่วคราวเพื่อป้องกันไว้ก่อน · ญี่ปุ่น กระทรวงการคลังและกลุ่มธนาคาร MUFG ระงับบริการออนไลน์บางส่วน · เกาหลีใต้ส่งคำเตือนถึงบริษัทราว 28,000 แห่ง · จีน (MIIT) สั่งตรวจระบบ อัปเกรด และเปลี่ยนบัญชี รหัสผ่าน คีย์ | กรุงเทพธุรกิจ, ผู้จัดการออนไลน์ |
| 22 ต.ค. 2569 | ไทย: รมว.อว. สั่งหน่วยงานในสังกัดดำเนินการ 3 ขั้น · สกมช./ThaiCERT ออกมาตรการ 4 ด้าน · Rapid7 รายงานว่ามีโค้ดสาธิต (PoC, Proof of Concept) สาธารณะหลายตัว แต่ยังไม่มีตัวที่ใช้ได้ทั่วไป | กรุงเทพธุรกิจ, ทีนิวส์, Rapid7 |
2. ช่องโหว่ 2 ตัวคืออะไร อธิบายแบบไม่ต้องอ่านโค้ด
ทั้งสองรายการอยู่ใน "ตัวเครื่องยนต์" ของ PHP เอง ไม่ใช่ในปลั๊กอิน ธีม หรือโค้ดที่คุณเขียน Wiz ซึ่งเป็นหนึ่งในผู้ค้นพบสรุปว่า แอป Hello World ที่ไม่มีอะไรเลยบน PHP เวอร์ชันที่กระทบก็โจมตีได้ และแอปไม่จำเป็นต้องเรียกใช้ session เลยด้วยซ้ำ
| รหัส / ชื่อในประกาศ | เกิดจากอะไร | ผลที่ตามมา |
|---|---|---|
| CVE-2026-109618 "RCE via OOM corruption" | เมื่อหน่วยความจำของ request หมด (OOM, Out of Memory) ในจังหวะที่ PHP ยังเตรียมข้อมูลของ request ไม่เสร็จ PHP จะกระโดดออกจากงานกลางคัน แล้วขั้นตอนเก็บกวาดตอนจบ request ไปอ่านข้อมูลที่ยังไม่สมบูรณ์เหมือนเป็นของจริง ผู้โจมตีทำให้หน่วยความจำหมดได้ด้วย multipart request ที่ดูเหมือนไม่เกินลิมิต เช่น ไม่ส่ง Content-Length ที่ใช้ได้ หรือยัด header ในแต่ละส่วนจำนวนมากจนกิน memory_limit | รันโค้ดจากระยะไกล (RCE, Remote Code Execution) ในสิทธิ์ของ worker เว็บ โดยไม่ต้องล็อกอิน บน Apache mod_php ใช้ request เดียวต่อหนึ่งความพยายาม ยิ่ง worker เยอะยิ่งต้องยิงหลายครั้ง แต่ไม่ได้ทำให้ปลอดภัย |
| CVE-2026-109619 "RCE via stale global state" | ข้อมูลบางอย่างของ request ก่อนหน้า (error, session, object, extension) ยังค้างอยู่ในตัวแปรส่วนกลางหลังหน่วยความจำถูกคืนไปแล้ว request ถัดไปที่ตกมาบน worker ตัวเดิมหยิบของค้างนั้นไปใช้ก่อนที่ระบบจะรีเซ็ต (use-after-free) เส้นทางที่ยืนยันแล้วคือ session.upload_progress และ fatal_error_backtraces ของ PHP 8.5 ซึ่งเปิดอยู่โดยค่าเริ่มต้น | รันโค้ดจากระยะไกล และอ่านหน่วยความจำของ worker ออกมาได้ เช่น รหัสผ่านฐานข้อมูลหรือคีย์ที่ค้างอยู่ ผ่านคุกกี้ PHPSESSID ที่ผิดปกติ ต้องใช้ 2 request ที่ตกบน worker เดียวกัน |
ทั้งคู่ได้คะแนน CVSS (Common Vulnerability Scoring System คือมาตรวัดความรุนแรงของช่องโหว่) เวอร์ชัน 4.0 เท่ากันที่ 9.2 จาก 10 ระดับวิกฤต เวกเตอร์ระบุว่าโจมตีผ่านเครือข่าย ไม่ต้องมีสิทธิ์ ไม่ต้องให้ผู้ใช้คลิกอะไร แต่ "ความซับซ้อนสูง" เพราะผู้โจมตีต้องจัดเรียงหน่วยความจำให้ตรงกับ PHP แต่ละรุ่น แต่ละ build และแต่ละเว็บเซิร์ฟเวอร์ Wiz บอกว่าโมเดล AI ช่วยปรับโค้ดโจมตีให้เข้ากับแต่ละเวอร์ชันได้เร็วขึ้นมาก และนักวิจัยคนเดียวทำงานที่เคยต้องใช้ทีมระดับโลกหลายเดือนเสร็จในสัปดาห์เดียว ส่วน watchTowr ให้คะแนนเองที่ 10.0
ร้ายแรงแค่ไหน (สถานะ ณ 22 ตุลาคม 2569)
- ทีม PHP: มีโค้ดโจมตีที่ใช้ได้จริงกับ Apache mod_php ด้วยค่าตั้งต้นทั้งหมด ทริกเกอร์ได้ก่อนโค้ดของแอปรันแม้แต่บรรทัดเดียว และยืนยัน RCE บน PHP-FPM ผ่านเส้นทาง session แล้ว
- AWS: เห็นความพยายามโจมตีตั้งแต่ 17 ต.ค. ก่อนเปิดเผย 4 วัน และระบุว่าตอนนี้ "ถูกโจมตีในวงกว้างแล้ว" · Cloudflare (Dane Knecht, CTO): เห็นการโจมตีระลอกแรกตั้งแต่ก่อนแพตช์ออก และปล่อยกฎ WAF ให้ลูกค้าทุกระดับรวมแผนฟรี · ซีอีโอ Cloudflare ให้ข้อมูลผ่านสื่อว่าความพยายามโจมตีเพิ่มจากหลักพันก่อนประกาศ เป็นหลักแสนภายใน 2 ชั่วโมง และเกินหนึ่งล้านครั้งแล้ว (รายงานโดยผู้จัดการออนไลน์, 22 ต.ค.)
- ฝั่งที่ยังระวังการตีความ: Rapid7 (22 ต.ค.) พบโค้ดสาธิตสาธารณะหลายตัว แต่ละตัวใช้ได้กับชุด OS + PHP + เว็บเซิร์ฟเวอร์เฉพาะเจาะจง "ยังไม่มีตัวที่ใช้ได้ทั่วไป" และ Rapid7 เองยังไม่เห็นการเจาะสำเร็จในระบบจริง · CISA (21 ต.ค.) ยังไม่พบการโจมตีที่ยืนยันได้
- สรุป: ยังไม่ใช่ "กดปุ่มเดียวเจาะได้ทุกเครื่อง" แต่ผู้เชี่ยวชาญทุกรายเห็นตรงกันว่าเป็นเรื่องของเวลา ไม่ใช่เรื่องว่าจะเกิดหรือไม่ และเครื่องที่ยังไม่แพตช์ในสัปดาห์หน้าคือเป้าแรก
3. ใครกระทบบ้าง
3.1 ทุกเวอร์ชันในรอบสิบกว่าปี ทุกวิธีติดตั้งที่รับ request จากเว็บ
ช่วงเวอร์ชันที่กระทบคือ PHP 5.4 (ออกปี 2555) จนถึง 8.5.11 ทีม PHP ระบุว่าความเสี่ยงครอบคลุม "ทุกการติดตั้ง PHP ที่รับ request จากเว็บ" ไม่ว่าจะรันผ่านวิธีไหน (SAPI, Server API คือตัวกลางที่เว็บเซิร์ฟเวอร์ใช้เรียก PHP) ระดับความเสี่ยงต่างกันตามวิธีรัน
| วิธีรัน PHP | พบบ่อยที่ไหน | ระดับความเสี่ยงตามประกาศของทีม PHP |
|---|---|---|
| Apache + mod_php | เซิร์ฟเวอร์ที่ติดตั้ง LAMP แบบค่าเริ่มต้น โฮสติ้งเก่า cPanel บางแผน | สูงสุด ยืนยันโค้ดโจมตีทั้ง 2 รายการ ทริกเกอร์ได้ก่อนโค้ดแอปรัน เพราะ mod_php เรียกขั้นตอนเก็บกวาดเสมอแม้ startup ล้มเหลว |
| PHP-FPM (FastCGI Process Manager) + nginx หรือ Apache | การติดตั้งสมัยใหม่ส่วนใหญ่ Docker image ทางการ | 109618: FPM ฆ่า worker เมื่อ startup ล้มเหลว จึงปิดเส้นทางหนึ่งไปได้ แต่ยังเสี่ยงหลัง startup (ยังไม่มีโค้ดโจมตีสมบูรณ์) · 109619: ยืนยัน RCE ผ่าน session แล้ว |
| php-cgi | ระบบเก่า Windows IIS บางชุด | อยู่ในรายการกระทบ |
| LiteSpeed / LSAPI | โฮสติ้ง WordPress ที่ใช้ LiteSpeed | เสี่ยงแบบมีเงื่อนไข ยังไม่ได้ยืนยันในค่าเริ่มต้น |
| FrankenPHP | ระบบใหม่ที่รัน Go + PHP | น่าจะเสี่ยงคล้าย mod_php จากการอ่านซอร์สโค้ด |
| PHP แบบ CLI อย่างเดียว (cron, สคริปต์เบื้องหลัง) | งานประมวลผลเบื้องหลัง | ประกาศพูดถึงเฉพาะการรับ request จากเว็บ แต่ให้อัปเดตไปพร้อมกันเพราะใช้แพ็กเกจชุดเดียวกัน |
3.2 ซอฟต์แวร์ที่หน่วยงานไทยใช้แล้ว "มี PHP ซ่อนอยู่"
หลายองค์กรตอบว่า "เราไม่ได้เขียน PHP" แต่มี PHP รันอยู่โดยไม่รู้ตัว รายการนี้คือซอฟต์แวร์ที่เขียนด้วย PHP ซึ่งพบบ่อยในหน่วยงานรัฐ มหาวิทยาลัย และบริษัทไทย
| กลุ่ม | ตัวอย่าง | ข้อสังเกต |
|---|---|---|
| เว็บไซต์หน้าบ้าน (CMS, Content Management System) | WordPress, Joomla, Drupal | เว็บหน่วยงานรัฐและมหาวิทยาลัยไทยจำนวนมากใช้สามตัวนี้ การอัปเดตปลั๊กอินหรือธีมไม่ช่วย ต้องอัปเดตตัว PHP ที่โฮสต์ |
| ระบบการเรียนการสอน (LMS) | Moodle | มหาวิทยาลัยและโรงเรียนแพทย์ ตรงกับที่ รมว.อว. สั่งให้ตรวจฐานข้อมูลนักศึกษาเป็นลำดับแรก |
| เครื่องมือของผู้ดูแลระบบ | phpMyAdmin, หน้าเว็บของ Zabbix, GLPI, Nextcloud, Roundcube webmail, MediaWiki, LimeSurvey, Matomo | มักติดตั้งบนเซิร์ฟเวอร์เดียวกับระบบอื่น เป็นทางเข้าที่คนลืมบ่อยที่สุด |
| ร้านค้าออนไลน์ | WooCommerce, Magento, PrestaShop, OpenCart | ร้านค้า SME ส่วนใหญ่อยู่บนโฮสติ้งแชร์ ต้องถามผู้ให้บริการ |
| แอปภายในที่จ้างพัฒนา | Laravel, CodeIgniter, Yii, Symfony | ผู้รับจ้างส่งมอบแล้วหมดสัญญา ไม่มีใครดูแลเวอร์ชัน PHP ที่รันอยู่ |
| แผงควบคุมโฮสติ้ง | cPanel, Plesk, DirectAdmin | ผู้ให้บริการเป็นคนอัปเดตตัว PHP แต่บัญชีของคุณอาจเลือก PHP เวอร์ชันเก่าค้างไว้ (เช่นใน MultiPHP Manager) |
| อุปกรณ์และเครื่องใช้สำเร็จรูป | Palo Alto Networks แจ้งว่า PAN-OS และ Panorama ทุกเวอร์ชันกระทบ (22 ต.ค. ยังไม่มีรุ่นแก้) · Fortinet ตรวจ 12 ผลิตภัณฑ์ · Cisco ตรวจ 31 ผลิตภัณฑ์ ยังไม่พบ | ไฟร์วอลล์ที่ "ปกป้อง" เครือข่ายก็มี PHP อยู่ข้างใน ต้องตามประกาศของผู้ผลิตและปิดหน้าผู้ดูแลจากอินเทอร์เน็ต |
3.3 ขนาดของปัญหาเป็นตัวเลข
- W3Techs (22 ต.ค. 2569): PHP ใช้ใน 69.3% ของเว็บที่ระบุภาษาได้ และในกลุ่มเว็บ PHP นั้น PHP 7 ยังมี 26.9% PHP 5 อีก 7.7% รวมแล้วราว 1 ใน 3 เป็นเวอร์ชันที่หมดอายุและไม่มีแพตช์ทางการ
- Qualys (ข้อมูลจากลูกค้า 12,000 ราย): พบ PHP 167 ล้านชุดติดตั้ง 73% อยู่บนเครื่องที่ต่ออินเทอร์เน็ต และ 71% ของชุดที่รู้เวอร์ชันเป็นรุ่นหมดอายุ (5.4 ถึง 8.1) ใน 12 ชั่วโมงแรกหลังเปิดเผย อัปเดตไปแล้วเพียง 199,000 ชุด
- VirusTotal (ผ่าน BleepingComputer): โฮสต์ PHP ที่มองเห็นจากอินเทอร์เน็ตมากกว่า 5.1 ล้านเครื่อง ราว 3.8 ล้านเครื่องมีพอร์ตเปิดอย่างน้อยหนึ่งพอร์ต
3.4 ในประเทศไทย
22 ตุลาคม 2569 ศ.ดร.ยศชนัน วงศ์สวัสดิ์ รองนายกรัฐมนตรีและรัฐมนตรีว่าการกระทรวงการอุดมศึกษา วิทยาศาสตร์ วิจัยและนวัตกรรม (อว.) สั่งหน่วยงานในกำกับ โดยเฉพาะมหาวิทยาลัย โรงพยาบาล และโรงเรียนแพทย์ ดำเนินการ 3 ขั้น (1) ให้ฝ่าย IT ตรวจทุกเว็บและระบบที่ใช้ PHP เริ่มจากระบบข้อมูลผู้ป่วยและฐานข้อมูลนักศึกษา (2) เปิดมาตรการชั่วคราว เช่น WAF (Web Application Firewall คือด่านกรอง request ก่อนถึงเว็บ) และเฝ้าระวังการใช้งานผิดปกติ (3) ทดสอบและอัปเกรด PHP โดยเร็ว เพราะมาตรการชั่วคราวแทนการแก้ซอฟต์แวร์ไม่ได้
ด้านนายภราดร ปริศนานันทกุล รัฐมนตรีประจำสำนักนายกรัฐมนตรี ซึ่งกำกับ สกมช. (สำนักงานคณะกรรมการการรักษาความมั่นคงปลอดภัยไซเบอร์แห่งชาติ) ให้ ThaiCERT ดำเนินการ 4 ด้าน แจ้งเตือนหน่วยงานรัฐและโครงสร้างพื้นฐานสำคัญ ประเมินความเสี่ยงระบบที่ต่ออินเทอร์เน็ต เฝ้าระวังพฤติกรรมการโจมตี และติดตามผลการแก้ไข ยังไม่มีการเปิดเผยจำนวนระบบของไทยที่กระทบ และยังไม่มีรายงานยืนยันว่าหน่วยงานใดถูกเจาะ
สำหรับหน่วยงานรัฐ เรื่องนี้ต่อเนื่องกับมาตรฐาน Website Security ของ สกมช. ที่เริ่มบังคับใช้เดือนกันยายน 2569 ซึ่งกำหนดเรื่องการอัปเดตซอฟต์แวร์และการจัดการช่องโหว่ไว้อยู่แล้ว และย้ำภาพที่เราเขียนไว้ในบทความภัยไซเบอร์ไทยสูงกว่าค่าเฉลี่ยโลก ว่าเครื่องที่ต่ออินเทอร์เน็ตในไทยถูกสแกนตลอดเวลา
ใครไม่อยู่ในขอบข่าย (แต่ยังต้องตรวจ)
เว็บไซต์ที่เป็น HTML ล้วนไม่มี PHP และแอปที่เขียนด้วย Java, .NET, Node.js, Python หรือ Go ตัวแอปเองไม่กระทบ แต่ถ้าบนเครื่องเดียวกันมี phpMyAdmin หรือเว็บ CMS อยู่ด้วย ทางเข้านั้นกระทบเต็ม ๆ ตัวอย่างในบริษัทเรา เว็บ grandlinux.com เป็น HTML ล้วนบน nginx และระบบ Saeree ERP เขียนด้วย Java รันบน WildFly ไม่มีส่วนประกอบ PHP จึงไม่อยู่ในขอบข่ายของช่องโหว่นี้ ส่วนลูกค้าที่มีเว็บ CMS หรือเครื่องมือผู้ดูแลที่เป็น PHP บนเซิร์ฟเวอร์อื่นในหน่วยงาน ให้ไล่ตามเช็กลิสต์ท้ายบทความ
4. ต้องแก้ยังไง ทำตามลำดับนี้
ขั้นที่ 1 หาให้เจอก่อนว่ามี PHP อยู่ตรงไหน
คำสั่ง php -v บอกแค่ PHP ตัวที่อยู่ใน PATH ของ shell ซึ่งอาจไม่ใช่ตัวที่รับเว็บอยู่จริง (Qualys และ Datadog เตือนตรงกัน) ให้ดูจาก process ที่รันอยู่และแพ็กเกจที่ติดตั้ง รวมถึง container ทุกตัว
# Linux: มี PHP ตัวไหนรันรับเว็บอยู่บ้าง
ps -eo pid,user,cmd | grep -E 'php-fpm|php-cgi|httpd|apache2|litespeed|frankenphp' | grep -v grep
# Apache โหลด mod_php หรือไม่
apachectl -M 2>/dev/null | grep -i php
# แพ็กเกจบน Debian / Ubuntu
dpkg -l | grep -E '^ii\s+(php|libapache2-mod-php)'
# แพ็กเกจบน RHEL / Rocky / AlmaLinux
rpm -qa | grep -E '^php'
# Docker: image ที่มี PHP
docker ps --format '{{.Names}} {{.Image}}' | grep -i php
เวอร์ชันที่ผู้ให้บริการ Linux แก้ให้แบบ backport มักยังแสดงเลขเวอร์ชันเดิม เช่น 8.1.2 บน Ubuntu 22.04 ให้ดูจาก changelog ของแพ็กเกจว่ามีเลข CVE-2026-109618 หรือไม่ ไม่ใช่ดูจากเลขเวอร์ชันอย่างเดียว
apt changelog php8.1-fpm | head -30 # Debian / Ubuntu
rpm -q --changelog php-fpm | head -30 # RHEL ตระกูล
ขั้นที่ 2 อัปเดต แล้ว restart worker ทุกตัว
| สภาพแวดล้อม | ทำอะไร |
|---|---|
| PHP 8.2–8.5 จากแพ็กเกจของ Linux | อัปเดตเป็น 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 หรือแพ็กเกจของผู้ให้บริการที่ใส่แพตช์แล้ว (ผู้ให้บริการ Linux และ LTS ได้แพตช์ล่วงหน้า) แล้ว restart php-fpm และ Apache ทุกตัว ติดตั้งอย่างเดียวโดยไม่ restart ยังรันโค้ดเก่าในหน่วยความจำ |
| Docker / Kubernetes | rebuild image ด้วยแท็กที่แก้แล้ว เช่น php:8.4.27-fpm หรือ php:8.3.36-apache แล้ว deploy ใหม่ ลบ container เก่าทั้งหมด Google ระบุว่า GKE ต้องอัปเดต image และ redeploy pod เอง ส่วน Cloud Run ที่เปิด automatic base image updates ได้รับแพตช์อัตโนมัติ |
| Cloud PaaS | ตรวจประกาศผู้ให้บริการ เช่น Google App Engine standard แพตช์ให้อัตโนมัติสำหรับ PHP 8.2 ขึ้นไป แต่ App Engine flexible ต้อง redeploy เอง |
| โฮสติ้งแชร์ cPanel / Plesk / DirectAdmin | ผู้ให้บริการอัปเดตตัว PHP ให้ แต่ให้เข้าไปดูว่าเว็บของคุณเลือก PHP เวอร์ชันไหนอยู่ ถ้าเป็น 7.4 หรือ 8.0 / 8.1 ให้เปลี่ยนเป็น 8.2 ขึ้นไปที่แก้แล้ว และถามผู้ให้บริการเป็นลายลักษณ์อักษรว่าแพตช์เมื่อไร |
| Windows (IIS / XAMPP / WampServer) | ดาวน์โหลดไบนารีใหม่จาก windows.php.net แทนที่โฟลเดอร์ PHP แล้ว restart IIS หรือ Apache ชุด XAMPP / Wamp ให้รอชุดใหม่จากผู้ทำชุดหรือเปลี่ยนไบนารีเอง |
| PHP 7.4 / 8.0 / 8.1 (หมดอายุแล้ว) | ไม่มีรุ่นทางการ ทางเลือกคือ (ก) แพ็กเกจ backport จากผู้ให้บริการ เช่น Ubuntu ESM หรือ RHEL (ข) โค้ด backport ขั้นต่ำที่ทีม PHP ให้ไว้สำหรับคนที่คอมไพล์เอง (ค) อัปเกรดเป็น 8.2 ขึ้นไป ซึ่งเป็นทางเดียวที่แก้ถาวร ถ้าทำไม่ได้ทันที CISA และ NCSC แนะนำให้ปิดระบบชั่วคราว |
| ใช้ repo ของ Remi (rpms.remirepo.net) | ทีม PHP แจ้งว่า Remi ไม่มีอัปเดตในวันที่ 21 ต.ค. ให้ย้ายไปใช้แพ็กเกจของ distro หรือคอมไพล์จากซอร์ส |
| อุปกรณ์สำเร็จรูป (ไฟร์วอลล์, NAS, กล้อง, ตู้สาขาโทรศัพท์) | ติดตามประกาศผู้ผลิต ระหว่างนี้ปิดหน้าเว็บผู้ดูแลไม่ให้เข้าถึงจากอินเทอร์เน็ต |
PHP 8.2 เองจะหมดอายุในวันที่ 31 ธันวาคม 2569 นี้ (อีกราว 2 เดือน) ถ้าจะลงแรงอัปเกรดรอบนี้ ให้ข้ามไป 8.3 หรือ 8.4 ที่ได้รับแพตช์ความปลอดภัยถึงสิ้นปี 2570 และ 2571 ตามลำดับ
ขั้นที่ 3 ถ้ายังอัปเดตไม่ได้ในชั่วโมงนี้ มาตรการชั่วคราวที่ทีม PHP ให้ไว้
คำเตือนจากทีม PHP เอง: "ไม่มีมาตรการชั่วคราวที่สมบูรณ์ การอัปเดตเป็นทางเลือกเดียวที่ปลอดภัย" มาตรการด้านล่างลดโอกาสโดนเฉพาะเส้นทางที่ยืนยันแล้ว ไม่ได้ปิดช่องโหว่ ให้จดวันเวลาที่ใส่มาตรการ และกำหนดเส้นตายอัปเดตจริงไว้ด้วย
| มาตรการ | ตั้งที่ไหน | ลดความเสี่ยงของ | ข้อควรระวัง |
|---|---|---|---|
memory_limit = -1 | php_admin_value ใน FPM pool หรือ Apache config ที่แอปแก้ทับไม่ได้ | 109618 | เพิ่มความเสี่ยงหน่วยความจำหมดทั้งเครื่อง ต้องใช้ cgroup จำกัดต่อ worker แทน · ห้ามใช้ RLIMIT_AS หรือ RLIMIT_DATA เพราะกลับไปกระตุ้นเส้นทางเดิม |
post_max_size = 8M (ถ้าไม่มีอัปโหลด) หรือ 32M · upload_max_filesize ต่ำกว่า post_max_size · ลด max_input_nesting_level จากค่าเริ่มต้น 64 และ max_file_uploads | php.ini / pool + จำกัดขนาด body ที่ reverse proxy | 109618 | ต้องจำกัดที่ proxy ด้วย สำหรับ request ที่ไม่ส่ง Content-Length |
บล็อก multipart/form-data ที่ proxy ถ้าแอปไม่ใช้ | nginx / Apache / WAF | ทั้งสอง | แอปที่มีฟอร์มอัปโหลดจะพัง ต้องตรวจก่อน (AWS แนะนำให้ประเมินผลกระทบก่อนทำ) |
session.upload_progress.enabled = 0 แล้ว restart worker ทุกตัว | php.ini / FPM pool / server config เท่านั้น ไม่ใช่ ini_set() หรือ .user.ini เพราะทำงานช้าเกินไป | 109619 (เส้นทาง session) | ปิดถาวรได้ถ้าไม่ใช้แถบความคืบหน้าอัปโหลด ทีม PHP แนะนำให้ปิดต่อแม้แพตช์แล้ว |
fatal_error_backtraces = 0 (เฉพาะ PHP 8.5) | เหมือนข้างบน | 109619 (เส้นทาง backtrace บน mod_php) | ปิดเฉพาะเส้นทางที่ยืนยัน ไม่ครอบคลุม state ชนิดอื่น |
pm.max_requests = 1 ใน FPM | FPM pool | 109619 | worker ถูกสร้างใหม่ทุก request ประสิทธิภาพลด ใช้ถ้ารับได้ |
| เปิดกฎ WAF | Cloudflare (มีกฎให้ทุกแผนรวมฟรี), Google Cloud Armor (หมวด File Upload + RFI), AWS WAF | ทั้งสอง | เป็นด่านเสริม Cloudflare รายงานว่าผู้โจมตีพยายามหลบกฎอยู่ ไม่ใช่การแก้ |
ลบค่า ini ต่อ request ที่ผิดหรือเลิกใช้แล้ว (php_value ใน .htaccess, PHP_VALUE ของ FastCGI) และแก้ fatal error / timeout ที่คนนอกกระตุ้นได้ | แอป / เซิร์ฟเวอร์ | 109619 | การซ่อน error ด้วย error_reporting, display_errors หรือ @ ไม่ช่วย และ log ที่สะอาดไม่ได้พิสูจน์ว่าปลอดภัย |
; ตัวอย่างใน php.ini ของ FPM หรือใส่เป็น php_admin_value[...] ใน pool (เช่น /etc/php/8.3/fpm/pool.d/www.conf)
memory_limit = -1
post_max_size = 8M
upload_max_filesize = 4M
max_input_nesting_level = 16 ; ปรับตามที่แอปต้องการ ค่าเริ่มต้น 64
session.upload_progress.enabled = 0
fatal_error_backtraces = 0 ; เฉพาะ PHP 8.5
; แล้ว restart ทุก worker
; systemctl restart php8.3-fpm apache2
ขั้นที่ 4 ตรวจว่าโดนไปแล้วหรือยัง ย้อนหลังถึง 17 ตุลาคม
AWS แนะนำให้เริ่มสืบสวนจากวันที่เห็นการโจมตีครั้งแรกคือ 17 ตุลาคม ไม่ใช่วันที่แพตช์ออก สัญญาณที่ Wiz, Datadog และ AWS ให้ไว้มีดังนี้
- log ของ PHP มีข้อความ
Allowed memory size of … bytes exhaustedตามด้วยUnknown on line 0(หมายถึงหน่วยความจำหมดตั้งแต่ก่อนรันโค้ดแอป) และ log ของ Apache มีAH00052 … Segmentation fault (11)ถี่ผิดปกติ - POST แบบฟอร์มอัปโหลดที่มีข้อความ
PHP_SESSION_UPLOAD_PROGRESSในช่วงเวลาที่ไม่มีใครอัปโหลดไฟล์ - request แบบ form-urlencoded ที่ชื่อฟิลด์ยาวผิดปกติระดับ 3.5 MB หรือมีข้อมูลไบนารีในฟิลด์ที่ไม่มีชื่อ (ตรวจว่า WAF หรือ proxy ไม่ได้ตัด body ยาว ๆ ทิ้งก่อนบันทึก)
- response ที่ตั้งคุกกี้
PHPSESSIDยาวผิดปกติหรือมีตัวอักษรแปลก ซึ่งเป็นสัญญาณของการอ่านหน่วยความจำออกไป - multipart request จำนวนมากตามด้วย HTTP 500 หรือ worker ถูกสร้างใหม่บ่อยโดยไม่มีสาเหตุ
- สัญญาณที่หนักที่สุด: process ของ PHP (php-fpm, apache2 หรือ httpd) ไปเรียก shell (sh, bash), curl, wget หรือมีไฟล์ .php ใหม่โผล่ในโฟลเดอร์เว็บ การเจาะสำเร็จอาจตอบ HTTP 200 ตามปกติและ worker ไม่ล้ม จึงดูจากรหัสสถานะอย่างเดียวไม่ได้
หน่วยความจำหมดอย่างเดียวไม่ได้แปลว่าถูกโจมตี และ log ที่สะอาดก็ไม่ได้พิสูจน์ว่าปลอดภัย (ทีม PHP เขียนไว้ตรง ๆ) ถ้าพบสัญญาณข้างต้นบนเครื่องที่ยังไม่ได้แพตช์ ให้ถือเป็นเหตุการณ์ (incident) แยกเครื่องออกจากเครือข่าย เปลี่ยนรหัสผ่านฐานข้อมูล คีย์ API และ secret ที่เคยอยู่ในหน่วยความจำของ worker (เป็นข้อแนะนำเดียวกับที่กระทรวงอุตสาหกรรมฯ ของจีนสั่งหน่วยงานของตน) แล้วกู้จาก backup ที่เชื่อถือได้ ดูวิธีซ้อมกู้คืนระบบให้กู้ได้จริง
5. เช็กลิสต์สำหรับทีม IT ไทย
รวบจากคำแนะนำของ CISA, NCSC สหราชอาณาจักร และคำสั่ง 3 ขั้นของ อว. เรียงตามลำดับที่ควรทำ
| # | รายการ | สถานะ |
|---|---|---|
| 1 | ทำบัญชีระบบที่มี PHP ทั้งหมด รวมที่ฝังในซอฟต์แวร์อื่นและอุปกรณ์ เรียงระบบที่ต่ออินเทอร์เน็ตไว้ก่อน | ☐ |
| 2 | ระบุวิธีรันของแต่ละระบบ (mod_php / FPM / cgi / LiteSpeed) ให้ mod_php เป็นคิวแรก | ☐ |
| 3 | อัปเดตระบบที่ใช้ PHP 8.2–8.5 เป็นเวอร์ชันแก้แล้ว และ restart worker ทุกตัว | ☐ |
| 4 | ระบบที่ใช้ 8.1 ลงไป: ขอ backport จากผู้ให้บริการ หรืออัปเกรด หรือปิดชั่วคราว ตัดสินใจภายในวันนี้ ไม่ใช่สัปดาห์นี้ | ☐ |
| 5 | ระบบบนโฮสติ้งแชร์และคลาวด์: ถามผู้ให้บริการเป็นลายลักษณ์อักษรว่าแพตช์เมื่อไร และเปลี่ยนเวอร์ชัน PHP ที่ตั้งไว้ในแผงควบคุม | ☐ |
| 6 | ระบบที่ยังแพตช์ไม่ได้: ใส่มาตรการชั่วคราวจากขั้นที่ 3 และกฎ WAF แล้วจดเส้นตายของมาตรการ | ☐ |
| 7 | อุปกรณ์สำเร็จรูป: ตามประกาศผู้ผลิต (Palo Alto, Fortinet, Cisco ฯลฯ) และปิดหน้าผู้ดูแลจากอินเทอร์เน็ต | ☐ |
| 8 | ตรวจ log ย้อนหลังตั้งแต่ 17 ตุลาคม ตามสัญญาณในขั้นที่ 4 | ☐ |
| 9 | ถ้าพบสัญญาณ: แยกเครื่อง เปลี่ยนรหัสผ่านและคีย์ แจ้ง สกมช./ThaiCERT (หน่วยงานรัฐและโครงสร้างพื้นฐานสำคัญ) และกู้จาก backup | ☐ |
| 10 | ยืนยันหลังแพตช์: ดู changelog ของแพ็กเกจหรือ phpinfo ว่าเวอร์ชันถูกต้อง และ session.upload_progress ปิดอยู่ถ้าไม่ใช้ | ☐ |
| 11 | รายงานผู้บริหารเป็นตาราง ระบบ / เวอร์ชันเดิม / เวอร์ชันใหม่ / วันเวลาแพตช์ / สิ่งที่ค้าง (หน่วยงานในสังกัด อว. ต้องรายงานตามคำสั่ง) | ☐ |
| 12 | วางแผนระยะยาว: PHP 8.2 หมดอายุ 31 ธันวาคม 2569 และกำหนดกติกาว่าช่องโหว่วิกฤตบนระบบที่ต่ออินเทอร์เน็ตต้องแพตช์ภายในหลักชั่วโมง ไม่ใช่ 30 วัน (คำแนะนำของ AWS) | ☐ |
6. บทเรียนที่ใหญ่กว่า PHP
บั๊กที่ "ยังไม่มีใครเจาะได้" ไม่ได้แปลว่าปลอดภัย ร่องรอยของบั๊กตัวแรกอยู่ในรายงานตรวจสอบปี 2567 แต่ทีมความปลอดภัยของ PHP ที่ตัดสินใจแบบฉันทามติเลือกวิธีแก้ไม่ได้ งานจึงค้างข้ามปี PHP Foundation เรียกเรื่องนี้เองว่า "ความล้มเหลวเชิงโครงสร้าง" และประกาศเปลี่ยนเป็นตัดสินใจด้วยเสียงข้างมาก พร้อมตั้งทีม Ecosystem Security ตั้งแต่พฤษภาคม 2569 องค์กรที่มี "ช่องโหว่ที่รู้อยู่แล้วแต่ยังไม่ได้แก้เพราะยังไม่มีใครเจาะ" ควรดูกรณีนี้เป็นกระจก
AI หาช่องโหว่ได้เร็วกว่าคน ทั้งฝ่ายดีและฝ่ายร้าย ผู้ค้นพบทั้ง Calif (ใช้ GPT-5.6 Sol ของ OpenAI ในโครงการ Patch the Planet) และ Wiz (Gemini 4 Argon, GPT-5.6 Sol และเครื่องมือ Wiz Atlas) ใช้โมเดล AI ทั้งค้นหาและเขียนโค้ดโจมตี ทีม PHP เองบอกว่า Alpha-Omega กับ Claude Mythos ของ Anthropic สแกน PHP ไปก่อนหน้านี้ในปี 2569 และเพิ่ม Daybreak Red ของ OpenAI เข้ามาหลังเหตุการณ์ เรื่องนี้ต่อจากที่เราเขียนไว้ในบทความโมเดล AI ไซเบอร์ของสามค่าย ครั้งนี้ฝ่ายดีเจอก่อนราว 2 เดือน แต่ Wiz ก็ยอมรับว่าเครื่องมือเดียวกันช่วยปรับโค้ดโจมตีให้เข้ากับแต่ละเวอร์ชันได้เร็วขึ้นด้วย ช่วงเวลาระหว่างแพตช์ออกกับการโจมตีจริงจึงสั้นลงเรื่อย ๆ เหมือนกรณี Langflow ที่ถูกโจมตีภายใน 20 ชั่วโมง
องค์กรที่รอดในสัปดาห์นี้คือองค์กรที่รู้ว่าตัวเองมีอะไรอยู่ตรงไหน ไม่ใช่องค์กรที่มีไฟร์วอลล์แพงที่สุด (ซึ่งบางยี่ห้อก็มี PHP อยู่ข้างในเหมือนกัน) บัญชีระบบที่ครบและกระบวนการแพตช์ที่ซ้อมมาแล้วคือสิ่งที่ทำให้ตอบคำสั่งของรัฐมนตรีได้ภายในวันเดียว ดูแนวทางวาง Patch Management ในบทความกรณีช่องโหว่ SharePoint และหลักคิดเรื่องความปลอดภัยของข้อมูลในระบบ ERP ที่ใช้กับทุกระบบในองค์กร
สรุป
- PHP2Shell = CVE-2026-109618 (หน่วยความจำหมดระหว่างเตรียม request) + CVE-2026-109619 (state ค้างข้าม request) CVSS 9.2 ทั้งคู่ รันโค้ดจากระยะไกลโดยไม่ต้องล็อกอิน อยู่ในตัว PHP เอง แอปทุกตัวบน PHP 5.4 ถึง 8.5.11 กระทบ
- เวอร์ชันที่แก้แล้ว 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (21 ตุลาคม 2569) · 7.4 / 8.0 / 8.1 ไม่มีรุ่นทางการ ต้องพึ่ง backport ของผู้ให้บริการ Linux หรืออัปเกรด
- เสี่ยงสุดคือ Apache mod_php (โจมตีได้ก่อนโค้ดแอปรัน) รองลงมา PHP-FPM · ไฟร์วอลล์และอุปกรณ์ที่ฝัง PHP ก็กระทบ (Palo Alto PAN-OS ยืนยันแล้ว)
- ยังไม่มีโค้ดโจมตีสาธารณะที่ใช้ได้ทั่วไป (Rapid7, 22 ต.ค.) แต่มีความพยายามโจมตีตั้งแต่ก่อนเปิดเผย (AWS, 17 ต.ค.) และ Cloudflare เห็นการโจมตีก่อนแพตช์ออก
- ลำดับทำ: หาให้เจอ → อัปเดตและ restart ทุก worker → มาตรการชั่วคราวเฉพาะเครื่องที่ยังแพตช์ไม่ได้ → ตรวจ log ย้อนถึง 17 ต.ค. → รายงาน · PHP 8.2 หมดอายุ 31 ธันวาคม 2569 วางแผนข้ามไป 8.3 หรือ 8.4
"ช่องโหว่ระดับนี้ไม่ถามว่าโค้ดของคุณเขียนดีแค่ไหน มันถามแค่สองอย่าง คุณรู้ไหมว่ามี PHP อยู่ตรงไหนบ้าง และคุณอัปเดตได้ภายในกี่ชั่วโมง"
- ไพฑูรย์ บุตรี ผู้เชี่ยวชาญด้านระบบเน็ตเวิร์คและระบบความปลอดภัยเซิร์ฟเวอร์ แกรนด์ลีนุกซ์ โซลูชั่น
แหล่งอ้างอิง
- PHP: PHP Security Release, 21 October 2026 (เวอร์ชันแก้ไข + มาตรการชั่วคราว)
- PHP: Upcoming Critical PHP Security Release — ประกาศล่วงหน้า 20 ตุลาคม 2569
- GitHub Security Advisory GHSA-w8hw-w9fx-j79w — CVE-2026-109618 RCE via OOM corruption
- GitHub Security Advisory GHSA-6wmf-4rv5-p3rp — CVE-2026-109619 RCE via stale global state
- The PHP Foundation: Today's PHP security release and how we're strengthening PHP security (21 ตุลาคม 2569)
- PHP: Supported Versions (วันหมดอายุของ PHP 8.2–8.5)
- CISA: Critical Vulnerabilities in PHP Require Immediate Patching (21 ตุลาคม 2569)
- NCSC (สหราชอาณาจักร): Critical security issue affecting PHP (21 ตุลาคม 2569)
- Wiz Research: PHP2Shell — AI uncovers critical RCE vulnerabilities in PHP (21 ตุลาคม 2569)
- Rapid7: CVE-2026-109618 and CVE-2026-109619 — Critical Unauthenticated RCE in PHP (อัปเดต 22 ตุลาคม 2569)
- Google Cloud: Responding to core PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619 (22 ตุลาคม 2569)
- AWS Security Blog: Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot (22 ตุลาคม 2569)
- Qualys: Two Critical PHP Flaws Could Hand Attackers Your Web Servers — ตัวเลขการติดตั้ง 167 ล้านชุด (อัปเดต 22 ตุลาคม 2569)
- Datadog Security Labs: PHP2Shell — detection, analysis, and remediation
- BleepingComputer: PHP ships emergency patches for critical PHP2Shell flaws (21 ตุลาคม 2569)
- Help Net Security: PHP2Shell — Critical PHP vulnerabilities patched, update now (อัปเดต 22 ตุลาคม 2569 สถานะ Palo Alto / Fortinet / Cisco)
- W3Techs: Usage statistics and market share of PHP for websites (22 ตุลาคม 2569)
- ผู้จัดการออนไลน์: จับตาช่องโหว่ PHP ร้ายแรงสะเทือนเอเชีย เกาหลีใต้-จีนเร่งให้อัปเดต ญี่ปุ่นระงับบริการบางส่วน (22 ตุลาคม 2569)
- กรุงเทพธุรกิจ: ยศชนันสั่งยกระดับความปลอดภัย หลัง OpenAI พบช่องโหว่ PHP เสี่ยงถูกเจาะข้อมูล (22 ตุลาคม 2569)
- ทีนิวส์: ภราดรสั่งทุกหน่วยรับมือช่องโหว่ เสี่ยงถูกแฮกระยะไกล — มาตรการ 4 ด้านของ สกมช./ThaiCERT (22 ตุลาคม 2569)
ต้องการคนช่วยดูแลเซิร์ฟเวอร์และระบบ ERP ให้ปลอดภัยต่อเนื่อง?
ทีมแกรนด์ลีนุกซ์ โซลูชั่น ดูแลระบบ Saeree ERP บน Linux ให้หน่วยงานรัฐและเอกชนมาตั้งแต่ปี 2545 ปรึกษาเรื่องการวางระบบ การแพตช์ และการสำรองข้อมูลได้
ขอ Demo ฟรีโทร 02-347-7730 | sale@grandlinux.com




