Skip to main content
Back to articles

Fastify ออกแพตช์ 6 CVE ใหม่ใน proxy, session, upload และ timeout

Fastify และปลั๊กอินออกแพตช์ 6 CVE วันที่ 2 พฤศจิกายน 2026 ครอบคลุม proxy path bypass, session cookie และช่อง DoS ตรวจเงื่อนไขกับเวอร์ชันแก้ไข

Fastify ออกแพตช์ 6 CVE ใหม่ใน proxy, session, upload และ timeout

Fastify ออกแพตช์ 6 CVE ใหม่: proxy หลุดเส้นทาง session เก่าใช้งานได้ และบางค่าอาจทำเซิร์ฟเวอร์ล่ม

โครงการ Fastify เผยแพร่คำเตือนและแพ็กเกจแก้ไขหลายรายการในวันที่ 2 พฤศจิกายน 2026 ครอบคลุมตัว framework และปลั๊กอินที่ใช้ทำ reverse proxy, อัปโหลดไฟล์, จัดการ session และ CORS บทความนี้สรุป หก CVE ที่ตรวจสอบได้ทั้งเวลาคำเตือนของโครงการ เวลาที่ระเบียน CVE เผยแพร่ครั้งแรก และเวลาปล่อยแพ็กเกจแก้ไขในกรอบ 48 ชั่วโมงก่อนรอบข่าว ได้แก่ CVE-2026-117518, CVE-2026-117531, CVE-2026-117549, CVE-2026-120213, CVE-2026-120215 และ CVE-2026-120216 ผลกระทบแตกต่างตามปลั๊กอินและค่าที่แอปตั้งไว้ จึงต้องเทียบ dependency กับการใช้งานจริงก่อนประเมินความเสี่ยง

สองจุดในเส้นทาง proxy

CVE-2026-120213 อยู่ใน @fastify/http-proxy ตั้งแต่ 9.0.0 ถึงก่อน 11.6.6 เมื่อแอปใช้ prefix แบบมีพารามิเตอร์ร่วมกับ rewritePrefix เพื่อบังคับให้คำขอไปยังเส้นทางต้นทางที่กำหนด ปลั๊กอินนำค่าพารามิเตอร์ที่ถอดรหัส URL แล้วไปแทนใน prefix โดยไม่เข้ารหัสซ้ำ ผู้โจมตีที่ส่งอักขระคั่นเส้นทางพร้อมตัวคั่น fragment หรือ query ในค่าที่เข้ารหัสไว้ อาจทำให้คำขอไปยังส่วนอื่นของ upstream และตัดส่วนต่อท้ายที่แอปตั้งใจบังคับออกได้ เงื่อนไขนี้ไม่ต้องใช้ .. และอาจนำไปสู่การข้ามข้อจำกัดเส้นทางหรือการเข้าถึง endpoint ที่ไม่ควรเปิด ความเสียหายต่อไปขึ้นกับการตั้งค่าและสิทธิ์ของ upstream โครงการจัดคำเตือนนี้ระดับ Critical และแก้ใน 11.6.6

CVE-2026-117518 อยู่ใน @fastify/reply-from ก่อน 12.8.1 ปลั๊กอินเดิมตรวจ dot-segment ที่ใช้เครื่องหมาย / แต่ตัวแยก URL มาตรฐาน WHATWG มอง backslash และรูปที่ percent-encode ไว้เป็นตัวคั่นเส้นทางใน URL แบบ HTTP, HTTPS, WS และ WSS คำขอที่แทรก dot-segment ผ่าน backslash จึงอาจผ่านการตรวจเดิมแล้วเปลี่ยนตำแหน่งปลายทางจริง หากแอปจำกัดให้ proxy ได้เพียงบาง prefix หรือมี route guard หน้า forwarding call ผู้ไม่ผ่านการยืนยันตัวตนอาจเข้าถึง upstream path ที่อยู่นอกขอบเขตนั้นได้ โครงการระบุผลกระทบหลักด้านการเปิดเผยข้อมูล และมีผลต่อความถูกต้องของข้อมูลได้จำกัด รุ่น 12.8.1 ปรับการ normalize และปฏิเสธ segment ที่กลายเป็น . หรือ .. รวมถึงอักขระควบคุมและ whitespace ที่กำกวมก่อนสร้าง URL

ทั้งสองกรณีต้องตรวจว่าแอปนำค่าจากผู้ใช้ไปกำหนดเส้นทาง proxy อย่างไรและ upstream มี endpoint อะไรอยู่หลังขอบเขตที่ตั้งใจ คำเตือนโครงการไม่ระบุวิธีแก้ชั่วคราวที่เทียบเท่าการอัปเดตสำหรับสองกรณีนี้

Session cookie: ลายเซ็นผิดแต่ยังถอดรหัส

CVE-2026-117549 กระทบ @fastify/secure-session ตั้งแต่ 7.5.0 ถึงก่อน 8.4.2 เฉพาะการตั้งค่าที่ใช้ signed cookie ปลั๊กอินเรียกตรวจลายเซ็นแล้ว หากตรวจไม่ผ่านก็ยังส่งค่าคุกกี้เดิมเข้าสู่ตัวถอดรหัส session ผลในทางปฏิบัติจะเห็นชัดเมื่อแอปใช้ secret สำหรับเซ็นคุกกี้แยกจากกุญแจเข้ารหัส session แล้วหมุนเฉพาะ secret ลายเซ็นเพื่อยกเลิก session เก่า ผู้ที่ครอบครองคุกกี้ session เก่าซึ่งยังไม่หมดอายุสามารถลบลายเซ็นที่ใช้ไม่ได้แล้ว และยังนำ session เดิมมาใช้ต่อได้

ขอบเขตของช่องโหว่นี้สำคัญ: ผู้โจมตีต้องมี คุกกี้ session ที่เข้ารหัสอยู่แล้ว ไม่สามารถสร้างข้อมูล session ใหม่ ยืดอายุคุกกี้ หรือใช้ต่อหลังหมุนกุญแจเข้ารหัส session ได้ โครงการแก้ใน 8.4.2 โดยไม่ถอดรหัสคุกกี้เมื่อเปิด signed cookie แต่ลายเซ็นตรวจไม่ผ่าน ระหว่างรออัปเดต โครงการแนะนำให้หมุนกุญแจเข้ารหัส session แทนการพึ่งการหมุน secret ของลายเซ็นอย่างเดียว

สามกรณีที่กระทบความพร้อมใช้งาน

CVE-2026-117531 กระทบ @fastify/multipart ตั้งแต่ 5.3.0 ถึงก่อน 10.1.7 เมื่อคำขอ multipart จบลงระหว่าง file part โดยไม่มี closing boundary แต่ Content-Length ครบและ client ไม่ตัดการเชื่อมต่อ parser มีข้อผิดพลาดแต่ไม่ส่งข้อผิดพลาดนั้นต่อไปยัง file stream หาก handler ไล่ส่วนข้อมูลแล้วทำงานแบบ asynchronous ก่อนค่อยอ่านไฟล์ ตัวอ่านอาจรอ stream ที่ไม่ส่งสัญญาณจบหรือข้อผิดพลาด คำขอจึงค้างและผู้โจมตีที่ไม่ได้เข้าสู่ระบบสามารถส่งซ้ำเพื่อสะสม connection ได้ เงื่อนไขนี้ขึ้นกับรูปแบบการอ่านไฟล์ของแอป โครงการแก้ใน 10.1.7 โดยส่ง parser error ไปยัง stream เพื่อให้ตัวอ่านจบด้วยข้อผิดพลาด

CVE-2026-120215 กระทบ @fastify/cors ตั้งแต่ 8.2.0 ถึงก่อน 11.4.0 ในแอปที่ตั้งค่า hook: 'onSend' ซึ่ง ไม่ใช่ค่าเริ่มต้น เมื่อได้รับ CORS preflight ที่มี Origin และ Access-Control-Request-Method การเรียกส่งคำตอบซ้ำภายใน hook อาจโยน ERR_HTTP_HEADERS_SENT แบบไม่ถูกจับและทำให้ process Node.js หยุด ผู้โจมตีที่ไม่ได้เข้าสู่ระบบอาจกระตุ้นได้ด้วยคำขอเดียวหากตั้งค่าตรงเงื่อนไข รุ่น 11.4.0 ไม่รับค่า hook นี้อีกและแจ้งข้อผิดพลาดตอนลงทะเบียนปลั๊กอิน แทนที่จะล่มตอนรับคำขอ ระหว่างรออัปเดตใช้ hook อื่น เช่น onRequest ค่าเริ่มต้น หรือปิด preflight ตามคำแนะนำโครงการ

CVE-2026-120216 อยู่ในตัว fastify ตั้งแต่ 5.8.0 ถึงก่อน 5.12.8 เมื่อกำหนด handlerTimeout เป็นค่ามากกว่าศูนย์และ route ตอบแบบ streaming หากส่ง header ไปแล้วแต่ stream ยังเปิดอยู่เมื่อ timeout ทำงาน Fastify พยายามส่ง error response ใหม่ จนเกิด ERR_HTTP_HEADERS_SENT ที่อาจทำให้ process หยุดและกระทบคำขออื่นด้วย ผู้โจมตีไม่จำเป็นต้องเข้าสู่ระบบหากเข้าถึง streaming endpoint ที่เข้าเงื่อนไขได้ ค่าเริ่มต้น handlerTimeout: 0 ไม่เข้าเงื่อนไขช่องโหว่ รุ่น 5.12.8 แก้ปัญหาแล้ว ระหว่างรออัปเดตสามารถตั้งค่า timeout นี้เป็น 0 ตามคำเตือน แต่ต้องพิจารณาผลต่อการควบคุมคำขอที่ใช้เวลานาน

วันเปิดเผย ระเบียน CVE และวันออกแพตช์

คำเตือน GHSA ที่โครงการ Fastify เผยแพร่เป็นหลักฐานวันเปิดเผยต่อสาธารณะที่ตรวจสอบได้ในรอบนี้ โดยเผยแพร่ 2 พฤศจิกายน 2026: @fastify/cors เวลา 08:50:58 UTC, @fastify/http-proxy เวลา 08:55:12 UTC, @fastify/secure-session เวลา 09:08:42 UTC, @fastify/reply-from เวลา 09:02:11 UTC, @fastify/multipart เวลา 09:13:20 UTC และ fastify เวลา 10:49:36 UTC โครงการออกแพ็กเกจแก้ไขใน npm registry วันเดียวกันตามลำดับที่เกี่ยวข้อง: 11.4.0 เวลา 08:52:17, 11.6.6 เวลา 08:55:53, 8.4.2 เวลา 09:09:42, 12.8.1 เวลา 09:04:11, 10.1.7 เวลา 09:13:01 และ 5.12.8 เวลา 10:46:39 UTC บางแพ็กเกจเผยแพร่ก่อนคำเตือนเพียงไม่กี่นาที

ระเบียน CVE เผยแพร่ครั้งแรกในวันเดียวกัน โดย CVE-2026-117518 เวลา 10:39:22 UTC, CVE-2026-117531 เวลา 10:32:38 UTC, CVE-2026-117549 เวลา 10:26:30 UTC, CVE-2026-120213 เวลา 10:15:08 UTC, CVE-2026-120215 เวลา 10:20:47 UTC และ CVE-2026-120216 เวลา 11:08:00 UTC เวลาที่ต่างกันระหว่างแพ็กเกจ คำเตือน และระเบียน CVE ไม่ควรนำมาเรียงเป็นลำดับการโจมตี แต่ใช้ยืนยันเกณฑ์ความสดของข่าวจากต้นทาง

สิ่งที่ผู้ดูแลควรทำ

ตรวจ package-lock.json, pnpm-lock.yaml หรือ lockfile ที่ใช้งานจริงเพื่อดูเวอร์ชันของ ตัว Fastify และปลั๊กอินแต่ละตัว แล้วอัปเดตแพ็กเกจที่เข้าข่ายเป็นรุ่นแก้ไขหรือใหม่กว่า การอัปเดตตัว framework อย่างเดียวไม่จำเป็นต้องอัปเดตปลั๊กอินที่ lockfile ยังตรึงไว้ ทดสอบ proxy routing และสิทธิ์ของ upstream, การเข้าสู่ระบบหลังหมุน secret, การอัปโหลด multipart ที่ไม่สมบูรณ์, CORS preflight และ streaming endpoint ที่มี timeout ก่อนปล่อยระบบจริง หากพบว่าระบบเคยรับเส้นทาง proxy ที่ไม่ควรเข้าถึงหรือคุกกี้เก่ากลับมาใช้งานได้ ให้ตรวจ log และ session ตามขั้นตอนรับมือเหตุการณ์ขององค์กร

แหล่งต้นทาง: คำเตือน reply-from, คำเตือน multipart, คำเตือน secure-session, คำเตือน http-proxy, คำเตือน cors, คำเตือน Fastify, ระเบียน CVE-2026-117518, ระเบียน CVE-2026-117531, ระเบียน CVE-2026-117549, ระเบียน CVE-2026-120213, ระเบียน CVE-2026-120215, ระเบียน CVE-2026-120216, npm registry