Cloudflare ตั้งกฎ php2shell ไว้ก่อนประกาศเก้าชั่วโมง
ตามบล็อกก่อนหน้าของ Cloudflare ทีมเริ่มทำกฎตั้งแต่ต้นเดือนตุลาคม แล้วเปิดใช้ตั้งแต่ 21 ต.ค. ตีสาม UTC ราวเก้าชั่วโมงก่อนประกาศ CVE-2026-109618 และ CVE-2026-109619 ต่อสาธารณะ ทุก plan ได้กฎชุดนี้ รวมถึง Free
- plan Free ได้กฎเจ็ดตัวใน Cloudflare Managed Free Ruleset ชื่อ "PHP Remote Code Execution Attack (CVE-2026-109618, CVE-2026-109619)" #1 ถึง #7
- plan ที่เสียเงิน ได้กฎชุดเดียวกันใน Cloudflare Managed Ruleset ซึ่งควรเข้าไปเช็คว่าเปิดไว้ในโหมด block จริง
- 23 ต.ค. เพิ่มกฎ #6 ให้ครอบ CVE-2026-115560 ที่เพิ่งเจอทีหลัง
ดูได้ว่ากฎทำงานกับเว็บของเราแค่ไหนจาก Security › Security Analytics › Events แล้วกรองด้วย ID ของกฎ
full transaction detection ดูทั้งขาไปและขากลับ
ตัวใหม่ที่ Cloudflare ปล่อยมาพร้อมกฎชุดนี้คือ full transaction detection ปกติ WAF ตัดสินจาก request อย่างเดียว ซึ่งบางครั้งแยก payload โจมตีออกจาก request ปกติได้ยาก ตัวนี้จึงดู response ที่เครื่องเราตอบกลับใน transaction เดียวกันด้วย ถ้าเห็นว่าการโจมตีสำเร็จ เช่น มีข้อมูลจากหน่วยความจำหลุดออกมา ก็ block response นั้นไม่ให้ถึงผู้โจมตีได้ และดู response ประกอบด้วยก็ช่วยลด false positive ด้วย กฎ php2shell เป็นกฎชุดแรกที่ใช้วิธีนี้
ข้อจำกัดที่ Cloudflare บอกเองคือ block response ได้แค่กันข้อมูลไม่ให้ออกไป แต่ไม่ได้ย้อนสิ่งที่เกิดบนเครื่องเราไปแล้ว ถ้าโค้ดของผู้โจมตีรันไปแล้ว ไฟล์ที่เขียนหรือคำสั่งที่รันก็ยังอยู่
CTF ตั้งเครื่องที่ยังไม่แพตช์ไว้ให้ลองเจาะ
ประกาศ CTF เขียนโดย Celso Martinho และ Sven Sauleau เมื่อ 27 ต.ค. เหตุผลคือ AI ทำให้ผู้โจมตีหาทางใหม่ได้เร็ว Cloudflare จึงอยากได้ข้อมูลจริงมาทดสอบสมมติฐานของ WAF เรื่อย ๆ แทนการทดสอบครั้งเดียวแล้วจบ
| เรื่อง | รายละเอียด |
|---|---|
| เครื่องเป้าหมาย | PHP 8.5.11 พร้อม extension มาตรฐาน, Apache 2 กับ mod_php และ index.php ว่าง ๆ บน Cloudflare Container |
| ที่ขวางอยู่ | WAF ที่เปิดกฎ php2shell ตามค่าเริ่มต้น |
| เป้าหมาย | ผ่าน WAF ไปรันโค้ด แล้วอ่าน /flag และยืนยัน flag ก่อน sandbox รีเซ็ตทุกไม่กี่นาที |
| ส่งที่ไหน | รายงานแบบ private บน HackerOne ในชื่อ "PHP CTF" พร้อม request ทั้งหมด วิธีผ่าน และ attempt ID จาก header X-Attempt-ID |
| ขอบเขต | POST เข้า /php/* เท่านั้น ห้าม DoS ห้ามสแกนหนัก และต้องถอยเมื่อเจอ 429 หรือ 503 |
ที่ไม่นับคือการอ่านไฟล์ได้แต่รันโค้ดไม่ได้ รันได้แต่ไม่มี flag ที่ยืนยันแล้ว exploit ที่ใช้ได้แค่ในเครื่อง การยิง CVE เดิมซ้ำ และ chain ที่ยังไม่ครบ รางวัลให้เฉพาะวิธีผ่านที่ต่างจากของเดิมจริง ถ้าแค่เปลี่ยนวิธี encode ก็นับเป็นตัวซ้ำ และให้เฉพาะรายงานแรกที่ทำซ้ำได้ครบ Cloudflare บันทึก payload ทุกตัวไว้ จึงให้ส่งแต่ข้อมูลทดสอบ ส่วนยอดเงินรางวัลและวันปิด ประกาศไม่ได้บอก ต้องดูจากหน้าโปรแกรมบน HackerOne
WAF ช่วยซื้อเวลา แต่การแก้จริงยังเป็นการอัปเดต PHP
ช่องโหว่ทั้งสองตัวอยู่ใน PHP runtime อัปเดต Laravel หรือ package ไม่ช่วย ต้องอัปเดตตัว PHP หรือให้ host อัปเดตให้ ตามที่ไล่ไว้ในโพสต์วิธีตรวจว่าแพตช์ครบหรือยัง Cloudflare แนะนำให้เปิด WAF ไว้ระหว่างแพตช์ และบอกว่ามีคนดัดแปลง payload หลบกฎอยู่เรื่อย ๆ ทีมจึงต้องคอยอัปเดตกฎตาม การเปิด CTF ครั้งนี้ก็คือการยอมรับตรง ๆ ว่ากฎยังมีช่องได้
อีกเรื่องที่ควรรู้คือกฎ #6 ที่กัน CVE-2026-115560 ใช้ได้เฉพาะเว็บที่ใช้ session.upload_progress.name ตามค่าเริ่มต้น ถ้าเคยเปลี่ยนชื่อนี้ไว้ WAF จะไม่ช่วย ทางกันที่แน่นอนกว่าคือปิด session.upload_progress.enabled ตามที่ php.net แนะนำ จนกว่า PHP release รอบถัดไปจะออก
ถ้าเว็บอยู่หลัง Cloudflare อยู่แล้ว ช่วงนี้ก็เป็นจังหวะดีที่จะไล่ดูทีละ zone ว่ากฎ managed ตัวไหนยังเป็นโหมด log อยู่บ้าง ส่วนกฎ WAF ที่แอปประกาศไว้เอง laravel-cloudflare ตั้งให้ตอน deploy ได้





