แจ้งเตือน ช่องโหว่ใน Next.js ImageResponse เสี่ยงถูกสั่งรันคำสั่งบนเซิร์ฟเวอร์

ยอดเข้าชม: 48 views

ศูนย์ประสานการรักษาความมั่นคงปลอดภัยระบบคอมพิวเตอร์แห่งชาติ (ThaiCERT) ได้ติดตามรายงานช่องโหว่ CVE-2026-94545 ใน Next.js ซึ่งอาจเปิดโอกาสให้ผู้โจมตีส่งข้อมูลที่สร้างขึ้นเป็นพิเศษผ่านฟังก์ชัน “ImageResponse” เพื่อสั่งรันคำสั่งบนเซิร์ฟเวอร์ได้โดยไม่ต้องมีบัญชีผู้ใช้ ช่องโหว่ดังกล่าวได้รับการจัดระดับความรุนแรงเป็นวิกฤตและได้รับการแก้ไขแล้วใน Next.js เวอร์ชัน 16.3.6 ผู้ดูแลระบบจึงควรตรวจสอบและอัปเดตโดยเร็ว [1]

1. รายละเอียดช่องโหว่ [2]
1.1 CVE-2026-94545 (CVSS v4.0: 9.5 ตาม Security Advisory ของ Next.js/GitHub) เป็นช่องโหว่ใน “ImageResponse” จากแพ็กเกจ “next/og” เมื่อทำงานด้วย Node.js runtime โดยเกี่ยวข้องกับไลบรารี Satori ซึ่ง Next.js ใช้สร้าง SVG ก่อนแปลงเป็นภาพ PNG
1.2 ช่องโหว่เกิดจากการจัดการและแปลงอักขระของข้อมูลบางประเภทใน SVG ไม่เหมาะสม ทำให้ข้อมูลที่ผู้โจมตีควบคุมสามารถถูกตีความเป็นโค้ด SVG แทนข้อความธรรมดา และอาจเชื่อมโยงกับช่องโหว่ในไลบรารีอื่นจนทำให้เกิดการสั่งรันคำสั่ง หรือ Remote Code Execution บนเซิร์ฟเวอร์ได้
1.3 แอปพลิเคชันมีความเสี่ยงเมื่อมีเงื่อนไขดังต่อไปนี้
– ใช้ “ImageResponse” จาก “next/og” บน Node.js runtime
– นำข้อมูลที่ผู้ใช้งานหรือผู้โจมตีควบคุมได้ไปใส่ในเนื้อหา แอตทริบิวต์ หรือ Style ของ SVG ระหว่างการสร้างภาพ
– ตัวอย่างข้อมูลดังกล่าว ได้แก่ ค่าที่รับจาก URL, Query Parameter หรือ HTTP Request แล้วนำไปใช้สร้าง Open Graph Image หรือ Social Preview Image โดยไม่มีการตรวจสอบที่เหมาะสม
1.4 แอปพลิเคชันที่ใช้ “ImageResponse” บน Edge runtime หรือไม่ได้ส่งข้อมูลที่ผู้ใช้งานควบคุมเข้าสู่ SVG ไม่ได้รับผลกระทบตามเงื่อนไขที่ผู้พัฒนาระบุ อย่างไรก็ตาม Edge runtime ถูกระบุว่าเลิกแนะนำให้ใช้งานแล้ว จึงไม่ควรเปลี่ยน Runtime เพื่อใช้แทนการอัปเดต

2. ผลิตภัณฑ์ที่ได้รับผลกระทบ [4]
2.1 ช่องโหว่ส่งผลกระทบต่อ Next.js ตั้งแต่เวอร์ชัน 16.2.0 จนถึงก่อนเวอร์ชัน 16.3.6 เมื่อใช้งาน “ImageResponse” บน Node.js runtime ตามเงื่อนไขที่ระบุข้างต้น
2.2 Next.js 15.x ไม่ได้รับผลกระทบจากช่องโหว่ Remote Code Execution นี้ อย่างไรก็ตาม ผู้พัฒนาได้เผยแพร่เวอร์ชัน 15.5.26 เพื่อเพิ่มมาตรการเสริมความปลอดภัยให้กับ “next/og”
2.3 นักพัฒนาที่ใช้งานไลบรารี Satori โดยตรง ควรตรวจสอบเวอร์ชัน เนื่องจาก Satori ตั้งแต่เวอร์ชัน 0.0.27 จนถึงก่อน 0.33.5 ได้รับผลกระทบจากช่องโหว่การจัดการข้อมูลใน SVG และได้รับการแก้ไขแล้วในเวอร์ชัน 0.33.5

3. แนวทางการแก้ไข
3.1 เร่งอัปเดต Next.js เป็นเวอร์ชัน 16.3.6 หรือใหม่กว่า โดยสามารถใช้คำสั่งดังนี้
3.2 แอปพลิเคชันที่ยังใช้ Next.js สาย 16.2 ควรย้ายไปใช้เวอร์ชัน 16.3.6 หรือใหม่กว่า
3.3 สำหรับ Next.js 15.5 แม้ไม่ได้รับผลกระทบจากการสั่งรันคำสั่งดังกล่าว ผู้ดูแลระบบสามารถอัปเดตเป็นเวอร์ชัน 15.5.26 เพื่อรับมาตรการเสริมความปลอดภัย
3.4 ตรวจสอบ Source Code เพื่อค้นหาการนำเข้าและใช้งาน “ImageResponse” จาก “next/og” โดยเฉพาะใน Route Handler และไฟล์ “opengraph-image” รวมถึงตรวจสอบว่ามีการนำค่าจาก URL, Query Parameter, Header หรือข้อมูลจากผู้ใช้งานไปใช้สร้าง SVG หรือไม่
3.5 หลังอัปเดต ให้ Build และ Deploy แอปพลิเคชันใหม่ พร้อมตรวจสอบว่าเซิร์ฟเวอร์หรือ Container ที่กำลังให้บริการใช้แพ็กเกจเวอร์ชันใหม่แล้ว

4. แนวทางปฏิบัติกรณีไม่สามารถอัปเดตได้
4.1 ห้ามนำข้อมูลที่ผู้ใช้งานหรือผู้โจมตีควบคุมได้ไปใส่ในเนื้อหา แอตทริบิวต์ หรือ Style ของ SVG ที่สร้างด้วย Node.js “ImageResponse”
4.2 ระงับหรือจำกัด Route ที่ใช้สร้างภาพจากข้อมูลภายนอกชั่วคราว โดยเฉพาะ Endpoint ที่รับค่าผ่าน URL หรือ HTTP Request แล้วนำไปสร้าง Open Graph Image
4.3 หากจำเป็นต้องรับข้อมูลจากผู้ใช้งาน ให้กำหนดค่าที่อนุญาตอย่างชัดเจน ตรวจสอบชนิดและความยาวของข้อมูล และปฏิเสธอักขระหรือรูปแบบที่ไม่จำเป็นก่อนนำไปใช้สร้างภาพ
4.4 เพิ่มการตรวจสอบ Access Log และ Application Log ของ Endpoint ที่ใช้งาน “ImageResponse” เพื่อค้นหาคำขอผิดปกติ ข้อมูล SVG หรืออักขระพิเศษที่ไม่สอดคล้องกับการใช้งานปกติ พร้อมจัดเก็บ Log ให้เพียงพอต่อการตรวจสอบย้อนหลัง

แหล่งอ้างอิง
[1] https://dg.th/u4m1lidsxq
[2] https://dg.th/kqohz2ue9f
[3] https://dg.th/qum6xge7jt