สรุปสั้น

มูลนิธิ Apache Software Foundation ออกประกาศความปลอดภัยแก้ช่องโหว่ 4 รายการในเฟรมเวิร์กเว็บแอปพลิเคชันภาษา Java อย่าง Apache Struts ซึ่งอาจทำให้แอปพลิเคชันที่ได้รับผลกระทบเสี่ยงต่อการถูกรันโค้ดระยะไกล (RCE) การปฏิเสธการให้บริการ (DoS) และข้อมูลรั่วข้ามผู้ใช้ รายการที่น่าจับตาที่สุดคือ CVE-2026-104711 ซึ่งเป็น OGNL injection ใน RESTful action mapper รุ่นเก่า และ CVE-2026-104713 ระดับ Important ที่ทำให้ REST plugin อ่าน request body เข้าหน่วยความจำโดยไม่จำกัดขนาด ส่วนอีกสามรายการได้ระดับ Moderate

ช่องโหว่แต่ละตัวอยู่คนละองค์ประกอบของเฟรมเวิร์ก ความเสี่ยงจริงจึงขึ้นกับการตั้งค่าและฟีเจอร์ที่แอปพลิเคชันใช้ เช่น CVE-2026-104711 กระทบเฉพาะแอปที่ใช้ legacy RESTful action mapper และใน Struts 7 จะกระทบเฉพาะเมื่อปิด OGNL allowlist เท่านั้น ประกาศไม่ได้ระบุว่าพบการโจมตีจริง แนะนำให้อัปเดตเป็น Struts 7.4.0 ขึ้นไป หรือ 6.12.0 ขึ้นไปสำหรับองค์กรที่ยังใช้สาย 6.x

รายละเอียดข่าว

เว็บไซต์ Cyber Security News รายงานเมื่อวันที่ 6 ตุลาคม 2569 อ้างประกาศความปลอดภัยของ Apache Struts ว่าช่องโหว่ทั้ง 4 รายการถูกรายงานโดยนักวิจัยหลายราย ได้แก่ LeaveSong (CVE-2026-104711), 0xCc.Zhang (CVE-2026-104712) และ n0mi1k (CVE-2026-104713 และ CVE-2026-104714)

ช่วงเวอร์ชันที่กระทบแตกต่างกันตามช่องโหว่ CVE-2026-104711 กระทบ 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 กระทบเฉพาะเมื่อปิด OGNL allowlist CVE-2026-104712 กระทบ 2.5.14–2.5.33, 6.0.0–6.11.0 และ 7.0.0–7.3.0 CVE-2026-104713 กระทบ 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 กระทบสาขาที่ระบุไว้จนถึง 6.11.0 และ 7.3.0

Apache Struts เป็นเฟรมเวิร์กที่มีประวัติช่องโหว่ OGNL injection ร้ายแรงหลายครั้ง และยังพบในระบบองค์กรรุ่นเก่าจำนวนมาก โดยเฉพาะแอปพลิเคชันที่ยังใช้สาย 2.x ซึ่งหมดอายุการสนับสนุนไปแล้ว ประกาศรอบนี้ไม่ได้ระบุการโจมตีจริง แต่ผู้ดูแลควรตรวจว่าแอปของตนใช้ mapper, plugin และฟีเจอร์ที่เกี่ยวข้องหรือไม่

รายละเอียดช่องโหว่

CVEระดับ (Apache)องค์ประกอบผลกระทบ
CVE-2026-104711Moderatelegacy RESTful action mapperOGNL injection → อาจรันโค้ดระยะไกล
CVE-2026-104712Moderateการแสดงผล BigDecimal ผ่าน tag libraryคำขอเล็กได้คำตอบใหญ่ → กิน CPU/แบนด์วิดท์
CVE-2026-104713ImportantREST plugin (request body)อ่าน body ไม่จำกัดขนาด → heap หมด
CVE-2026-104714Moderatelocalized message formatter ที่แชร์กันค่าของผู้ใช้หนึ่งไปโผล่ในคำตอบของอีกคน

CVE-2026-104711 — legacy RESTful action mapper ดึงชื่อ action และค่าพารามิเตอร์จาก URL ของคำขอ คำขอที่สร้างขึ้นเฉพาะสามารถแทรกนิพจน์ OGNL ซึ่งอาจนำไปสู่การรันโค้ดระยะไกลได้ แอปที่ใช้ default mapper, restful2 mapper หรือ Struts REST plugin ไม่ได้รับผลกระทบจากช่องโหว่นี้ และ Struts 7 ยังได้รับการป้องกันในค่าเริ่มต้น เพราะ OGNL allowlist เปิดไว้

CVE-2026-104712 — เกิดเมื่อพารามิเตอร์ของคำขอถูกนำไปใส่ property ชนิด java.math.BigDecimal แล้วแสดงผลผ่าน Struts tag library ผู้โจมตีที่ไม่ต้องยืนยันตัวตนส่งทราฟฟิกปริมาณน้อยแต่ต่อเนื่องเพื่อกิน CPU และแบนด์วิดท์ขาออกของเซิร์ฟเวอร์ได้ แอปที่ใช้ชนิดตัวเลขอื่น หรือส่งคำตอบผ่าน JSON/REST plugin อยู่นอกขอบเขต ทางแก้ชั่วคราวคือใช้ BigDecimal converter แบบกำหนดเองที่จำกัด scale ก่อนแสดงผล ลงทะเบียนทั้งแอปผ่านไฟล์ struts-conversion.properties ที่ root ของ classpath

CVE-2026-104713 — REST plugin ซึ่งเป็นส่วนเสริมสำหรับรับเนื้อหา XML และ JSON อ่าน request body ทั้งหมดเข้าหน่วยความจำโดยไม่มีขีดจำกัด คำขอขนาดใหญ่เพียงครั้งเดียวทำให้ heap หมดได้ เวอร์ชันที่แก้แล้วตั้งขีดจำกัดเริ่มต้นไว้ที่ 2,097,152 ตัวอักษร

CVE-2026-104714 — formatter ข้อความแบบ localized ที่ถูกแชร์ระหว่างคำขอ เมื่อจัดรูปแบบอาร์กิวเมนต์วันที่หรือเวลาพร้อมกันหลายคำขอ ค่าอาจปนกัน ทำให้ค่าของผู้ใช้คนหนึ่งไปปรากฏในคำตอบของอีกคน หรือเกิดข้อผิดพลาดในการแสดงผล ปัญหานี้เกิดได้จากทราฟฟิกพร้อมกันตามปกติ ไม่ต้องมีอินพุตมุ่งร้าย

ผลกระทบ

CVE-2026-104711 มีศักยภาพรุนแรงที่สุด แต่กระทบเฉพาะแอปที่เลือกใช้ legacy RESTful action mapper ซึ่งไม่ใช่ค่าเริ่มต้น กลุ่มที่เสี่ยงจริงคือแอปองค์กรรุ่นเก่าบน Struts 2.x และ 6.x ที่ตั้งค่า mapper ตัวนี้ไว้ ซึ่งมักเป็นระบบที่ไม่มีใครอยากแตะและอัปเดตช้า ส่วน CVE-2026-104713 แม้เป็น DoS แต่ยิงได้ด้วยคำขอเดียวต่อแอปที่ใช้ REST plugin รับ body จึงเป็นความเสี่ยงต่อความพร้อมใช้งานที่ใช้ต้นทุนต่ำมาก

CVE-2026-104714 น่าสนใจตรงที่เป็นการรั่วของข้อมูลข้ามผู้ใช้ที่ไม่ต้องมีผู้โจมตีเลย หากแอปแสดงวันที่หรือเวลาที่เป็นข้อมูลส่วนบุคคลผ่าน formatter นี้ ผู้ใช้ทั่วไปอาจเห็นข้อมูลของคนอื่นได้ในช่วงที่ทราฟฟิกหนาแน่น

คำแนะนำ

  • อัปเดตเป็น Apache Struts 7.4.0 ขึ้นไป หรือ 6.12.0 ขึ้นไปสำหรับสาย 6.x และวางแผนย้ายแอปที่ยังใช้สาย 2.x ซึ่งหมดการสนับสนุนแล้ว
  • ตรวจคอนฟิกว่าแอปใช้ legacy RESTful action mapper หรือไม่ หากใช้ให้ย้ายไป default mapper หรือ REST plugin และใน Struts 7 อย่าปิด OGNL allowlist
  • หากยังอัปเดตไม่ได้ ให้จำกัดขนาด request body ที่ reverse proxy หรือ servlet container เพื่อกัน CVE-2026-104713
  • ใช้ BigDecimal converter ที่จำกัด scale ผ่าน struts-conversion.properties เป็นทางแก้ชั่วคราวของ CVE-2026-104712
  • จัดรูปแบบวันที่ก่อนนำไปแทรกในข้อความ localized เป็นทางแก้ชั่วคราวของ CVE-2026-104714
  • ทำรายการแอปพลิเคชันที่ใช้ Struts ทั้งหมดผ่าน SBOM หรือการสแกน dependency เพราะ Struts มักฝังอยู่ในแอปองค์กรรุ่นเก่าที่ไม่มีใครจำได้

แหล่งอ้างอิง