แจ้งเตือน ช่องโหว่ใน Next.js ImageResponse เสี่ยงถูกสั่งรันคำสั่งบนเซิร์ฟเวอร์ - Thailand Computer Emergency Response Team (ThaiCERT)警报:Next.js ImageResponse 存在漏洞;存在服务器端执行风险 - 泰国计算机应急响应小组 (ThaiCERT)
ศูนย์ประสานการรักษาความมั่นคงปลอดภัยระบบคอมพิวเตอร์แห่ง

ศูนย์ประสานการรักษาความมั่นคงปลอดภัยระบบคอมพิวเตอร์แห่งชาติ (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
泰国国家计算机安全事件响应中心 (ThaiCERT) 一直在监控 Next.js 中报告的一个漏洞 CVE-2026-94545。该漏洞可能允许攻击者通过“ImageResponse”函数发送特制数据,从而无需帐户即可在服务器上执行命令。该漏洞被评为严重级别,已在 Next.js 版本 16.3.6 中修复。因此,系统管理员应尽快检查并更新。[1]
1. 漏洞详情 [2] 1.1 CVE-2026-94545(根据 Next.js 安全公告/GitHub,CVSS v4.0 评分为 9.5)是 Node.js 运行时环境中“next/og”包中的“ImageResponse”组件的一个漏洞。该漏洞涉及 Satori 库,Next.js 使用 Satori 库创建 SVG 图像,然后再将其转换为 PNG 图像。1.2 该漏洞源于对 SVG 中某些数据类型处理不当以及字符转换错误,攻击者可以利用该漏洞将受控数据解释为 SVG 代码而非纯文本。此外,该漏洞还可能与其他库中的漏洞相关联,从而导致服务器端远程代码执行。1.3 当满足以下条件时,应用程序将面临风险:– 在 Node.js 运行时环境中使用“next/og”包中的“ImageResponse”组件。– 在图像创建过程中,将用户控制或攻击者控制的数据添加到 SVG 的内容、属性或样式中。此类数据的示例包括从 URL、查询参数或 HTTP 请求接收的值,这些数据随后被用于创建 Open Graph 图像或社交预览图像,而未经过适当的验证。1.4 在开发者指定的条件下,使用 Edge 运行时上的“ImageResponse”或不向 SVG 发送用户控制数据的应用程序不受影响。但是,Edge 运行时已不再推荐使用,因此不建议为了进行更新而更改运行时。
2. 受影响产品 [4] 2.1 在上述条件下,当在 Node.js 运行时使用“ImageResponse”时,Next.js 16.2.0 至 16.3.6 版本会受到此漏洞的影响。2.2 Next.js 15.x 不受此远程代码执行漏洞的影响。但是,开发人员已发布 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 检查源代码中是否从“next/og”导入和使用了“ImageResponse”包,尤其是在路由处理程序和“opengraph-image”文件中。此外,还要检查是否使用了 URL、查询参数、标头或用户数据中的值来生成 SVG。3.5 更新后,重新构建并部署应用程序,并验证运行该应用程序的服务器或容器是否使用了新的软件包版本。
4. 更新失败时的最佳实践 4.1 不要将用户控制或攻击者控制的数据包含在使用 Node.js “ImageResponse” 创建的 SVG 的内容、属性或样式中。4.2 暂时中止或限制用于从外部数据生成图像的路由,特别是那些通过 URL 或 HTTP 请求接收值并使用这些值创建 Open Graph 图像的端点。4.3 如果必须从用户接收数据,则在将其用于生成图像之前,应明确定义允许的值,检查数据类型和长度,并拒绝不必要的字符或格式。4.4 在使用 “ImageResponse” 的端点的访问日志和应用程序日志中添加检查,以检测异常请求、SVG 数据或不符合正常用法的特殊字符,并存储足够的日志以供事后调查。
参考文献 [1] https://dg.th/u4m1lidsxq [2] https://dg.th/kqohz2ue9f [3] https://dg.th/qum6xge7jt