ค้นพบช่องโหว่ Path Traversal ระดับวิกฤต (CVE-2026-21440) ใน AdonisJS ซึ่งเป็น web framework ที่ใช้ TypeScript ช่องโหว่นี้ส่งผลกระทบต่อโมดูล bodyparser และอนุญาตให้ผู้โจมตีจากระยะไกลสามารถเขียนไฟล์ใดๆ ลงบนระบบไฟล์ของเซิร์ฟเวอร์ได้ ซึ่งอาจนำไปสู่การควบคุมระบบได้อย่างสมบูรณ์ โดยมีสาเหตุมาจากเมธอด MultipartFile.move() ที่ใช้ตัวเลือกเริ่มต้นที่ไม่ปลอดภัยในการจัดการชื่อไฟล์ที่ส่งมาจากผู้ใช้งาน

     

Severity: วิกฤต (Critical)

      
     

System Impact:

     

  • AdonisJS web framework (โดยเฉพาะโมดูล @adonisjs/bodyparser)
  • ระบบไฟล์ของเซิร์ฟเวอร์ (สามารถเขียนไฟล์ใดๆ ได้)
  • โค้ดแอปพลิเคชัน, สคริปต์เริ่มต้นระบบ, หรือไฟล์กำหนดค่า (เสี่ยงต่อการถูกเขียนทับ ซึ่งอาจนำไปสู่การรันโค้ดจากระยะไกล)
  • เวอร์ชันที่ได้รับผลกระทบ: @adonisjs/bodyparser ≤ 10.1.1 และ 11.0.0-next.5 หรือเวอร์ชันก่อนหน้า

      
     

Technical Attack Steps:

     

  1. ผู้โจมตีระบุตำแหน่ง endpoint สำหรับการอัปโหลดที่เข้าถึงได้ในแอปพลิเคชัน AdonisJS ที่ใช้โมดูล bodyparser ที่มีช่องโหว่
  2. ส่งการอัปโหลด multipart/form-data โดยใช้ชื่อไฟล์ที่ถูกสร้างขึ้นมาเป็นพิเศษ ซึ่งมีลำดับ Path Traversal (เช่น “../”)
  3. ใช้ประโยชน์จากตัวเลือกเริ่มต้นที่ไม่ปลอดภัยของเมธอด MultipartFile.move() เพื่อหลบเลี่ยงไดเรกทอรีการอัปโหลดที่ตั้งใจไว้ และเขียนไฟล์ไปยังตำแหน่งใดก็ได้บนเซิร์ฟเวอร์
  4. หากสำเร็จ ผู้โจมตีอาจเขียนทับไฟล์แอปพลิเคชันที่สำคัญ สคริปต์เริ่มต้น หรือไฟล์กำหนดค่า ซึ่งอาจนำไปสู่การรันโค้ดจากระยะไกล (Remote Code Execution) ขึ้นอยู่กับสิทธิ์ของระบบไฟล์และการกำหนดค่าการใช้งาน

      
     

Recommendations:

     

Short Term:

     

  • นักพัฒนาควรอัปเกรดแพ็คเกจ @adonisjs/bodyparser เป็นเวอร์ชัน 10.1.2 หรือ 11.0.0-next.6 ทันที เพื่อแก้ไขช่องโหว่

     

Long Term:

     

  • องค์กรที่ใช้เวอร์ชันที่ได้รับผลกระทบควรตรวจสอบ endpoint การอัปโหลดทั้งหมด และนำกลไกการตรวจสอบชื่อไฟล์ (filename sanitization) มาใช้เป็นชั้นความปลอดภัยเพิ่มเติม แม้ว่าจะมีการอัปเดตแพตช์แล้วก็ตาม

      
     

Source: https://cybersecuritynews.com/adonisjs-vulnerability-write-files-on-server/

   

Share this content:

Leave a Reply

Your email address will not be published. Required fields are marked *