ก่อนหน้านี้เราเคยพูดถึง Apache Struts2 ไปแล้วว่ามีช่องโหว่ที่ทำให้เกิด Remote Code Execution ซึ่งก่อนหน้านี้เราพบว่าเป็นช่องโหว่ในส่วน Library จัดการไฟล์ upload ซึ่งเป็นที่ Header Content-Type แต่จริงๆแล้วมันยังมีอีก

@Alvaro_monoz ได้ทำการค้นคว้าช่องโหว่ดังกล่าวเพิ่มเติมใน library อื่นๆพบว่า Apache Struts2 นั้นไม่ได้มีช่องโหว่ที่ Content-Type เท่านั้นยังเป็นในส่วนของ Content-Disposition ซึ่งเป็นส่วน Upload Body Data อีกด้วย โดยเงื่อนไขการเกิดคือ

  • มีการใช้งาน JakartaStreamMultipartRequest Library ซึ่งไม่ใช่ Default Library ที่จะนำมาใช้งาน (<constant name=”struts.multipart.parser” value=”jakarta-stream” />)
  • ขนาดของ Content-Length > ค่า maximum ที่ Apache Struts2 กำหนดในการ upload (Default: 2GB)
  • ชื่อไฟล์มีลักษณะเป็น OGNL (ภาษาสำหรับการดึงค่าหรือการกำหนดของ Java Setting )

หากครบทุกเงื่อนไขตามที่กำหนดก็จะทำให้เกิด Remote Code Execution ได้ครับ

ตอนนี้ได้มี PoC Code การโจมตีออกมาเรียบร้อยแล้วอีกด้วย หากใครที่มีการใช้งานอยู่แนะนำให้ update ด่วนครับ

ระบบที่ได้รับผลกระทบ: Apache Struts 2.3.5 – Struts 2.3.31, Struts 2.5 – Struts 2.5.10

ผลกระทบ: Remote Code Execution (High Severity)

วิธีการแก้ไข: Update ไปเป็น Struts 2.3.32 หรือ Struts 2.5.10.1

Source::