Apache Software Foundation ประกาศแพตช์ช่องโหว่ 4 รายการ ใน Apache Struts ครอบคลุมความเสี่ยงตั้งแต่ Remote Code Execution (RCE) ไปจนถึง Denial of Service (DoS) และ การรั่วไหลข้อมูลข้ามผู้ใช้งาน องค์กรที่ใช้งาน Struts 2.x, 6.x หรือ 7.x ในแอปพลิเคชัน Web ควรตรวจสอบเวอร์ชันและอัปเดตโดยด่วน โดยเฉพาะช่องโหว่ CVE-2026-104711 ที่มีความเสี่ยงสูงสุดในระดับ Important
รายละเอียดทางเทคนิค
CVE-2026-104711 — OGNL Injection → Remote Code Execution (Important)
- ▸ ช่องโหว่: OGNL Expression Injection ใน Legacy RESTful Action Mapper ของ Struts — ผู้โจมตีส่ง Crafted HTTP Request ที่มี OGNL Expression ใน URL เพื่อ Inject คำสั่งที่ Server จะ Execute ในฐานะ Application Process
- ▸ เงื่อนไขที่เสี่ยง: แอปพลิเคชันต้องใช้ Legacy RESTful Action Mapper — หากใช้ Default Mapper,
restful2mapper หรือ Struts REST Plugin จะ ไม่ได้รับผลกระทบ จากช่องโหว่นี้ สำหรับ Struts 7 จะเสี่ยงเฉพาะเมื่อปิด OGNL Allowlist - ▸ เวอร์ชันที่ได้รับผลกระทบ: Struts 2.0.0–2.3.37, 2.5.0–2.5.33, 6.0.0–6.11.0, 7.0.0–7.3.0 (เมื่อปิด Allowlist)
CVE-2026-104712 — BigDecimal DoS (Moderate)
- ▸ ช่องโหว่: Request ขนาดเล็กที่มี Parameter ประเภท
java.math.BigDecimalสามารถบังคับให้ Server สร้าง Response ขนาดใหญ่มากผิดปกติ ส่งผลให้ CPU และ Network Bandwidth ถูกใช้งานหนักจาก Sustained Low-Volume Traffic แบบ Unauthenticated - ▸ Workaround ชั่วคราว: กำหนด Custom BigDecimal Converter ที่จำกัด Scale ก่อน Rendering ผ่าน
struts-conversion.propertiesใน Classpath Root - ▸ เวอร์ชันที่ได้รับผลกระทบ: Struts 2.5.14–2.5.33, 6.0.0–6.11.0, 7.0.0–7.3.0
CVE-2026-104713 — Unbounded REST Request Body → Heap Memory Exhaustion (Important)
- ▸ ช่องโหว่: REST Plugin ของ Struts อ่าน Request Body เข้า Memory โดยไม่มีการจำกัดขนาด — ผู้โจมตีส่ง Request ขนาดใหญ่เพียงครั้งเดียวเพื่อ Exhaust Heap Memory ของ Server ทำให้เกิด OutOfMemoryError และ Application ล่ม
- ▸ Fix: เวอร์ชันที่แก้ไขแล้วกำหนด Default Limit ที่ 2,097,152 characters (~2MB) — องค์กรที่ยังไม่สามารถ Upgrade ควร Enforce Request Body Limit ที่ Reverse Proxy หรือ Servlet Container แทน
- ▸ เวอร์ชันที่ได้รับผลกระทบ: Struts 2.1.8–2.3.37, 2.5.0–2.5.33, 6.0.0–6.11.0, 7.0.0–7.3.0
CVE-2026-104714 — Localized Message Formatter Race Condition → Data Leakage (Moderate)
- ▸ ช่องโหว่: Shared Message Formatter สำหรับ Date/Time ใน Struts ไม่ Thread-Safe — เมื่อมี Concurrent Requests หลายรายการพร้อมกัน ค่าวันที่/เวลาของ User คนหนึ่งอาจปรากฏใน Response ของ User อีกคน หรือทำให้เกิด Rendering Error โดยไม่ต้องมี Malicious Input
- ▸ Workaround ชั่วคราว: Format Date/Time ก่อนนำไปใช้ใน Message Interpolation เพื่อหลีกเลี่ยงการใช้ Shared Formatter
- ▸ เวอร์ชันที่ได้รับผลกระทบ: Struts ทุก Branch ที่ระบุถึง 6.11.0 และ 7.3.0
เวอร์ชันที่แนะนำให้อัปเดต
- ▸ Struts 7.x: อัปเดตเป็น 7.4.0 หรือใหม่กว่า
- ▸ Struts 6.x: อัปเดตเป็น 6.12.0 หรือใหม่กว่า
- ▸ ยังไม่มีรายงานการโจมตีแบบ Active Exploitation ณ เวลาที่เผยแพร่
ผลกระทบที่อาจเกิดขึ้น
- ▸ RCE บน Production Server: CVE-2026-104711 ที่ประสบความสำเร็จให้สิทธิ์ผู้โจมตีรันคำสั่งบน Server ในฐานะ Application Process — หากแอปพลิเคชันรันด้วยสิทธิ์สูงหรืออยู่ในเครือข่ายที่เชื่อมต่อ Internal Systems ผลลัพธ์อาจรุนแรงถึงการเข้าถึงฐานข้อมูล, Internal APIs และ Credentials
- ▸ DoS กระทบ Service Availability: CVE-2026-104712 และ CVE-2026-104713 สามารถทำให้ Application หยุดทำงานได้ด้วย Traffic ปริมาณน้อย เหมาะสำหรับ Targeted Attack เพื่อ Disrupt Service โดยเฉพาะในช่วง Peak Period
- ▸ Data Leakage ผิด PDPA/GDPR: CVE-2026-104714 อาจทำให้ข้อมูลส่วนบุคคล (วันเดือนปีเกิด, วันที่ Transaction) ของ User คนหนึ่งรั่วไหลไปยัง User อื่น ซึ่งเป็นความเสี่ยงด้าน Regulatory Compliance
สิ่งที่องค์กรควรทำ
- ▸ Inventory และ Prioritize: สำรวจแอปพลิเคชันที่ใช้ Apache Struts ทั้งหมดในองค์กร ระบุเวอร์ชันและ Configuration (โดยเฉพาะการใช้ Legacy Mapper และ REST Plugin) เพื่อ Prioritize การ Patch ตามความเสี่ยงจริง
- ▸ อัปเกรดเป็น Struts 7.4.0 / 6.12.0: แผนก Development ควรทดสอบ Compatibility กับ Struts 7.4.0+ หรือ 6.12.0+ ในสภาพแวดล้อม Staging ก่อน Deploy Production — หากไม่สามารถ Upgrade ได้ทันที ให้ Apply Workaround ตามที่ Apache แนะนำสำหรับแต่ละ CVE
- ▸ Review Mapper Configuration: ตรวจสอบว่าแอปพลิเคชันใช้ Legacy RESTful Action Mapper หรือไม่ หากไม่จำเป็น ให้ Migrate ไปยัง Default Mapper หรือ Restful2 ซึ่งไม่ได้รับผลกระทบจาก CVE-2026-104711
- ▸ กำหนด Request Body Limit ที่ Reverse Proxy: เพิ่ม
client_max_body_size(Nginx) หรือLimitRequestBody(Apache HTTP Server) เป็น Defense-in-Depth ลด Attack Surface ของ CVE-2026-104713
แนวทางลดความเสี่ยงระยะยาว
- ▸ Software Composition Analysis (SCA): ใช้เครื่องมือ SCA เช่น Snyk, Dependabot หรือ OWASP Dependency-Check ใน CI/CD Pipeline เพื่อ Detect Framework Vulnerability โดยอัตโนมัติ ก่อนที่โค้ดจะ Deploy สู่ Production
- ▸ WAF Rule สำหรับ OGNL Injection: กำหนด WAF Rule เฉพาะสำหรับ Block Request ที่มีรูปแบบ OGNL Expression ใน URL Parameter — เป็น Mitigation ระยะสั้นที่ช่วยลด Exposure ระหว่างรอ Patch
- ▸ Least Privilege สำหรับ Application Process: ให้ Web Application รันด้วยสิทธิ์ต่ำสุดที่จำเป็น (Non-root User, Read-only Filesystem ที่ไม่จำเป็น) เพื่อจำกัดผลกระทบหาก RCE สำเร็จ
- ▸ Secure SDLC Policy: กำหนด Policy ที่ไม่อนุญาตให้ Deploy Framework Version ที่มี Known Critical/Important CVE โดยไม่ผ่านกระบวนการ Risk Acceptance อย่างเป็นทางการ
วิเคราะห์ในมุมมองจาก TXEC
Apache Struts มีประวัติยาวนานในฐานะ Framework ที่ถูกโจมตีผ่านช่องโหว่ OGNL Injection — CVE-2017-5638 ซึ่งใช้ในการโจมตี Equifax ปี 2017 เป็นบทเรียนที่ชัดเจนว่า การ Patch Struts ล่าช้าแม้เพียงไม่กี่สัปดาห์สามารถนำไปสู่ Data Breach ระดับชาติ
CVE-2026-104711 มีรูปแบบใกล้เคียงกับช่องโหว่ที่เคยถูก Weaponize มาแล้ว แม้ปัจจุบันยังไม่มีรายงาน Active Exploitation แต่ในอดีต PoC Exploit มักปรากฏภายใน 1-2 สัปดาห์หลังเปิดเผย CVE ที่มีรายละเอียดเพียงพอ
สำหรับองค์กรในประเทศไทยที่ใช้ Custom Java Web Application หรือ Government/Enterprise Portal ที่พัฒนาบน Struts ทีม TXEC แนะนำให้ อัปเกรดเป็นลำดับแรกสุดในไตรมาสนี้