"PHP แก้ RCE ร้ายแรง CVE-2026-109618 และ CVE-2026-109619"
"ผู้ดูแล PHP ที่รับคำขอเว็บควรอัปเดตทันที โดยให้ความสำคัญกับ Apache mod_php เป็นลำดับแรก"
สรุปใน 1 นาที
- อาการ/ปัญหา
- การจัดการ OOM และสถานะค้างข้ามคำขออาจเปิดทางให้รันโค้ดโดยไม่ต้องยืนยันตัวตน
- ใครควรอ่าน
- ระบบ PHP ที่รับคำขอเว็บ รวมถึง PHP-FPM, mod_php, php-cgi, FrankenPHP และ LiteSpeed
- ทางแก้แบบสั้น
- อัปเดตเป็น 8.2.35, 8.3.36, 8.4.27 หรือ 8.5.12 ตามสายรุ่น หรือใช้แพ็กเกจที่ผู้จัดทำยืนยันว่ารวมแพตช์แล้ว
พอดีเห็น PHP ออกประกาศวันที่ 21 ตุลาคม 2026 เตือนช่องโหว่รันโค้ดจากระยะไกลโดยไม่ต้องยืนยันตัวตนสองรายการ กระทบ PHP ที่รับคำขอเว็บ รวมถึง PHP-FPM, Apache mod_php, php-cgi, FrankenPHP และ LiteSpeed โครงการแนะนำให้อัปเดตทันที โดย mod_php มีการสาธิตโจมตีสำเร็จก่อนโค้ดแอปเริ่มทำงาน ประกาศ PHP
เกิดอะไรขึ้น
CVE-2026-109618: RCE via OOM corruption เกิดเมื่อหน่วยความจำไม่พอ หรือ OOM ขณะ PHP ยังเตรียมข้อมูลคำขอไม่เสร็จ PHP หยุดงาน แต่ขั้นตอนเก็บกวาดคำขอยังนำข้อมูลที่ไม่สมบูรณ์ไปใช้ ผู้พัฒนาทดสอบแล้วว่ารันโค้ดด้วยสิทธิ์บัญชี web worker ได้บน mod_php รายละเอียด OOM
CVE-2026-109619: RCE via stale global state เกิดเมื่อ worker ยังเก็บตัวชี้ไปยังหน่วยความจำของคำขอที่คืนไปแล้ว คำขอถัดไปที่เข้า worker เดิมอาจใช้ข้อมูลเก่านั้น เกิด use-after-free และนำไปสู่ RCE กรณีที่ทดสอบยืนยันแล้วเกี่ยวข้องกับ session upload progress และ fatal error backtrace ใน PHP 8.5 เงื่อนไขขึ้นกับแอปและการตั้งค่า ทั้งสองรายการอยู่ระดับ Critical คะแนน CVSS v4.0 9.2 รายละเอียด stale state
ใครโดนและรุ่นที่แก้
ผู้ดูแลเว็บควรตรวจทุกสายรุ่น ตารางนี้เป็นรุ่นที่โครงการ PHP แก้ช่องโหว่ทั้งสองรายการ
| สายรุ่น | รุ่นที่กระทบในสายนั้น | รุ่นที่แก้ |
|---|---|---|
| PHP 8.2 | ก่อน 8.2.35 | 8.2.35 |
| PHP 8.3 | ก่อน 8.3.36 | 8.3.36 |
| PHP 8.4 | ก่อน 8.4.27 | 8.4.27 |
| PHP 8.5 | ก่อน 8.5.12 | 8.5.12 |
PHP 8.1 และเก่ากว่าไม่ได้รับอัปเดตตามปกติจากโครงการแล้ว ผู้ใช้ Linux distribution หรือ LTS ต้องตรวจแพตช์ backport กับผู้จัดทำแพ็กเกจ ทีม PHP ให้ minimal source-backport สำหรับ 7.4, 8.0 และ 8.1 เป็นกรณีพิเศษ รุ่นแก้และแนวทางอัปเดต
ต้องทำอะไร
อัปเดตตามตาราง หรือใช้แพ็กเกจที่ distribution ยืนยันว่ารวมแพตช์ ตรวจ runtime ของเว็บและเปลี่ยน worker ให้ใช้ไบนารีใหม่ อย่าตรวจเฉพาะ CLI
ถ้ายังอัปเดตไม่ได้ ผู้พัฒนาแนะนำชั่วคราวดังนี้
- สำหรับ OOM บังคับ
memory_limit=-1ผ่านค่าระดับผู้ดูแลและตรวจว่าไม่มีค่าระดับอื่นกำหนดเพดานกลับมา วิธีนี้ตัดเส้นทางจาก PHP memory limit แต่ allocation ของระบบยังล้มเหลวได้ - ตั้ง
post_max_sizeเป็น8Mเมื่อไม่ต้องอัปโหลด หรือ32Mเมื่อต้องอัปโหลด โดยให้upload_max_filesizeต่ำกว่า ที่เว็บเซิร์ฟเวอร์หรือ proxy ให้จำกัดขนาดคำขอหลังถอดรหัส จำนวน field, multipart part, header และความลึกของข้อมูลด้วย ข้อจำกัดต้องครอบคลุมคำขอที่ไม่มีContent-Lengthที่ใช้งานได้ - ใช้ container หรือ cgroup จำกัดหน่วยความจำ โดยควรหยุดเฉพาะ worker ที่มีปัญหา ห้ามใช้
RLIMIT_ASหรือRLIMIT_DATAแทน เพราะอาจทำให้เกิด allocation failure ที่เข้าเส้นทางช่องโหว่ ข้อจำกัดของมาตรการ OOM - สำหรับ stale state ตั้ง
session.upload_progress.enabled=0ในphp.ini, FPM pool หรือ server configuration ที่มีผลก่อน PHP อ่านคำขอ แล้วรีสตาร์ตทุก worker อย่าพึ่งพาini_set()หรือ FPM.user.iniส่วน PHP 8.5 ให้ตั้งfatal_error_backtraces=0และรีสตาร์ตทุก worker เช่นกัน - แก้ค่าตั้งที่ถูกนำมาใช้ต่อคำขอแล้วเกิด warning, notice หรือ deprecation ก่อนเริ่มต้นระบบตามปกติ พร้อมแก้จุดที่ผู้โจมตีทำให้เกิด fatal error หรือ timeout ได้ การซ่อนข้อความด้วย
error_reporting,display_errorsหรือ@ไม่แก้ปัญหา ข้อจำกัดของมาตรการ stale state
มาตรการชั่วคราวลดความเสี่ยงบางเส้นทาง การอัปเดตที่รวมแพตช์เป็นวิธีแก้สมบูรณ์
ส่วนตัวผมให้เรื่องนี้เป็นงานแพตช์ทันทีสำหรับระบบที่รับคำขอเว็บ โดยจัด mod_php ไว้ลำดับแรก ที่มา: Security advisory: Critical remote code execution vulnerabilities, update now (https://www.php.net/index.php#2026-10-21-5) หากมีรายละเอียดที่ต้องขยาย เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ
อยากให้เราทำให้ไหม?
ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า
เคยเจองานแบบนี้ไหม? ติดตรงไหน?
มาแลกวิธีกันต่อในบอร์ด LinuxThai


ความคิดเห็น 0
ยังไม่มีความคิดเห็น — เป็นคนแรกเลย