LOWNLAB News
โปรแกรมมิ่งระดับ 9/10Next.js Blog · 22 กันยายน 2026

Next.js ออก 16.3.6 อุดช่องโหว่ RCE ระดับ Critical ใน next/og ImageResponse (CVE-2026-94545)

Next.js Security Update for a Critical Upstream Issue

ต้นสัปดาห์ทีม Next.js ประกาศเตือนไว้ล่วงหน้า แล้ววันที่ 22 กันยายน 2026 ก็ปล่อยอัปเดตความปลอดภัยนอกรอบ (out-of-band) ออกมาจริงเป็น v16.3.6 (Active LTS) และ v15.5.26 (Maintenance LTS) อัปเดตนี้อัปเกรด dependency ต้นน้ำหลายตัว รวมถึง Satori ซึ่งเป็นตัวสร้าง SVG ให้ next/og เพื่อปิดช่องโหว่ที่อาจนำไปสู่ remote code execution (RCE)

ช่องโหว่หลักคือ GHSA-vcvr-r3jv-pc5j (CVE-2026-94545) ระดับ Critical ได้คะแนน CVSS 4.0 ที่ 9.5 ปัญหาอยู่ที่ ImageResponse เวอร์ชัน Node.js ของ next/og ภายใต้เงื่อนไขเฉพาะ SVG ที่ Satori สร้างออกมา escape ค่าไม่ถูกต้อง พอประกอบกับช่องโหว่ใน dependency ต้นน้ำตัวอื่น ผู้โจมตีก็อาจรันโค้ดบนเซิร์ฟเวอร์ได้ Next.js ที่โดนคือตั้งแต่ 16.2.0 จนถึงก่อน 16.3.6 ฝั่ง Satori มี advisory คู่กันคือ GHSA-wx4j-mvgx-mqwp (ระดับ Moderate) โดนตั้งแต่ 0.0.27 จนถึงก่อน 0.33.5 และแก้แล้วใน 0.33.5

ตาม advisory แอปจะเสี่ยงเมื่อเข้าเงื่อนไขครบสองข้อ ข้อแรกคือใช้ ImageResponse แบบ Node.js (ไม่ใช่แบบ Edge) ข้อสองคือเอาค่าที่ผู้ใช้ส่งมาใส่ลงในเนื้อหา, attribute หรือ style ของ SVG ตรง ๆ โดยไม่ sanitize ตัวอย่างโค้ดที่เปราะบางใน advisory อ่านค่า value จาก searchParams ของ request แล้วส่งเข้า new ImageResponse(<svg><title>{userValue}</title></svg>) ซึ่งหน้าตาคล้าย route สร้างรูป OG แบบ dynamic ที่หลายแอปทำกันอยู่ แอปที่ใช้ ImageResponse แบบ Edge ไม่โดน

ทางแก้คืออัปเกรดทันที ประกาศให้คำสั่งไว้ว่า npm install next@16.3.6 สำหรับสาย 16.3 และ npm install next@15.5.26 สำหรับสาย 15.5 ช่องโหว่ RCE ตัวนี้ไม่กระทบ Next.js 15.x ส่วน 15.5.26 ใส่ hardening ที่เกี่ยวข้องมาให้เท่านั้น ถ้ายังอัปเกรดไม่ได้ advisory แนะนำให้หยุดใส่ค่าที่ผู้โจมตีควบคุมได้ลงใน SVG content, attribute หรือ style ของ ImageResponse แบบ Node.js ไปก่อน

ผู้ค้นพบตามที่ advisory ระบุคือ RaghavMaheshwari124 และ rafabd1 เคสนี้เป็นอีกตัวอย่างที่ปัญหาใน dependency ต้นน้ำลามขึ้นมาถึงระดับ framework ทีมที่มี route สร้างรูปแชร์หรือ badge แบบ dynamic ควรไล่ดูด้วยว่าค่าจาก URL ไหลเข้า SVG ตรงไหนบ้าง แม้จะอัปเกรดแล้วก็ตาม

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

อ่านต้นฉบับที่ Next.js Blog

https://nextjs.org/blog/nextjs-security-update-september-22-2026