ข้ามไปยังเนื้อหา
กลับหน้ารายการบทความ

Bandit 1.14.0 แก้ 11 CVE ใน HTTP/2, HTTP/1.1 และ WebSocket

Bandit 1.14.0 แก้ 11 CVE ด้านการใช้ทรัพยากร HTTP/2, request smuggling ใน HTTP/1.1 และ WebSocket ตรวจเวอร์ชันที่กระทบและแนวทางอัปเดต

Bandit 1.14.0 แก้ 11 CVE ใน HTTP/2, HTTP/1.1 และ WebSocket

Bandit 1.14.0 แก้ 11 CVE ใน HTTP/2, HTTP/1.1 และ WebSocket

โครงการ Bandit ซึ่งเป็น HTTP server สำหรับแอป Plug และ WebSock บน Elixir เผยแพร่เวอร์ชัน 1.14.0 วันที่ 26 ตุลาคม 2026 พร้อมแก้ช่องโหว่ 11 รายการที่เกี่ยวข้องกับการจัดการ HTTP/2, HTTP/1.1 และ WebSocket หลายรายการเปิดทางให้ผู้ส่งคำขอที่ไม่ต้องยืนยันตัวตนใช้ทรัพยากรหน่วยความจำหรือ CPU มากผิดปกติ ส่วนหนึ่งเกี่ยวข้องกับการตีความคำขอไม่ตรงกันและข้อจำกัดขนาดข้อความ ผู้ดูแลแอปที่ใช้ Bandit ควรตรวจเวอร์ชันของแพ็กเกจที่ deploy อยู่จริง และอัปเดตเป็น 1.14.0 ขึ้นไป

Bandit เป็นส่วนประกอบด้านการรับคำขอของแอป ไม่ใช่หน้าเว็บที่ผู้ดูแลเห็นโดยตรง ความเสี่ยงจึงขึ้นกับว่าแอปเปิด Bandit รับทราฟฟิกจากใคร ใช้ HTTP/2 หรือ WebSocket หรือไม่ และมี proxy อยู่หน้าเซิร์ฟเวอร์อย่างไร การมี proxy หรือการจำกัดทราฟฟิกอาจช่วยลดภาระบางส่วน แต่ไม่ได้แทนแพตช์ที่แก้การประมวลผลคำขอในตัว Bandit

CVEบริเวณที่กระทบช่วงเวอร์ชันที่ได้รับผลกระทบตามคำเตือนโครงการ
CVE-2026-108525HTTP/2 รับ DATA เกิน flow control0.3.1 ถึงก่อน 1.14.0
CVE-2026-108529HTTP/2 SETTINGS และ WINDOW_UPDATE ทำให้ CPU ทำงานมาก0.3.6 ถึงก่อน 1.14.0 ตาม GHSA
CVE-2026-109584HTTP/2 HPACK ขยายข้อมูล cookie ในหน่วยความจำ0.3.3 ถึงก่อน 1.14.0
CVE-2026-110314WebSocket ยังส่งเฟรมถึง handler หลังเริ่มปิด0.5.1 ถึงก่อน 1.14.0
CVE-2026-110499HTTP/2 HPACK encoder table โตตามค่าที่ client กำหนด0.3.6 ถึงก่อน 1.14.0
CVE-2026-111101HTTP/1.1 body แบบ chunk ขนาดเล็กใช้หน่วยความจำมาก0.1.0 ถึงก่อน 1.14.0
CVE-2026-111103HTTP/2 stream error ข้ามข้อจำกัดระดับ connection1.9.0 ถึงก่อน 1.14.0
CVE-2026-113436ตัวเลข Content-Length และพอร์ตทำให้ใช้ CPU สูง1.0.0-pre.7 ถึงก่อน 1.14.0
CVE-2026-114213WebSocket เฟรมต่อเนื่องเล็กมากข้ามการจำกัดขนาด1.11.0 ถึงก่อน 1.14.0
CVE-2026-114216HTTP/1.1 chunk extension อาจนำไปสู่ request smuggling1.12.4 ถึงก่อน 1.14.0
CVE-2026-115269HTTP/2 เฟรมควบคุมรีเซ็ตเวลารอ body1.4.0 ถึงก่อน 1.14.0

เวอร์ชันแก้ไขของทั้ง 11 รายการคือ 1.14.0 ตารางใช้ช่วงเวอร์ชันจาก GitHub Security Advisory ของผู้พัฒนา มีจุดที่ต้องระวังคือ GHSA ของ CVE-2026-108529 ระบุเริ่มที่ 0.3.6 แต่ ระเบียน CVE ระบุเริ่มที่ 0.3.4 หากยังใช้ 0.3.4 หรือ 0.3.5 ไม่ควรถือว่าปลอดภัยจากความต่างของข้อมูลสองแหล่ง ให้ยึดการอัปเดตไป 1.14.0 เป็นแนวทางที่ชัดเจน

กลุ่ม HTTP/2: การใช้ทรัพยากรเกินขอบเขต

ช่องโหว่ HTTP/2 หลายตัวเกี่ยวกับการบังคับใช้ขอบเขตทรัพยากรที่สัมพันธ์กัน แต่มีจุดกระตุ้นต่างกัน CVE-2026-108525 ระบุว่าการรับ DATA ไม่บังคับ flow control อย่างเหมาะสม ทำให้ client คิวข้อมูลได้มากในกระบวนการของ stream; CVE-2026-115269 เกิดเมื่อเฟรม WINDOW_UPDATE หรือ SETTINGS ทำให้การรออ่าน request body เริ่มนับเวลาใหม่ ผู้ส่งคำขอจึงสามารถตรึงงานค้างไว้ได้นานกว่าที่ควร โครงการแก้ด้วยการจำกัด receive window และใช้เส้นตายสำหรับการอ่าน body ที่เฟรมซึ่งไม่มีข้อมูลไม่สามารถรีเซ็ตได้

ด้าน CPU CVE-2026-108529 เกี่ยวกับงานที่เพิ่มขึ้นมากเมื่อ SETTINGS หรือ WINDOW_UPDATE ระดับ connection กระทบ stream ที่รออยู่หลายรายการ ขณะที่ CVE-2026-113436 เกี่ยวกับการ parse ตัวเลขยาวผิดปกติใน Content-Length หรือพอร์ต ซึ่งทำให้ใช้เวลาคำนวณไม่สมส่วนกับข้อมูลที่ส่งเข้ามา

การจัดการ header และสถานะ connection ก็ถูกแก้หลายจุด CVE-2026-109584 เกี่ยวกับการขยายข้อมูล cookie ที่ถูกบีบอัดใน HTTP/2 header ให้กลายเป็นการจัดสรรหน่วยความจำมาก CVE-2026-110499 เกี่ยวกับการยอมใช้ขนาด HPACK encoder table ที่ client เลือกโดยไม่จำกัด และ CVE-2026-111103 เกี่ยวกับการกู้คืนหลัง stream error ที่ทำให้สถานะ connection ถูกย้อน จนข้อจำกัดที่ตั้งไว้ไม่ทำงานต่อเนื่อง รุ่น 1.14.0 จำกัดขนาด header และตาราง HPACK พร้อมรักษาสถานะเมื่อตรวจพบข้อผิดพลาด

กลุ่ม HTTP/1.1 และ WebSocket

CVE-2026-111101 ใช้ body แบบ chunk จำนวนมากที่แต่ละชิ้นมีข้อมูลเพียงเล็กน้อย ทำให้หน่วยความจำที่ใช้สะสมสูงกว่าขนาด body จริง ส่วน CVE-2026-114216 เกี่ยวกับการยอมรับรูปแบบ chunk extension และตัวจบบรรทัดที่ผิดข้อกำหนด จึงอาจเกิด HTTP request smuggling เมื่อส่วนประกอบหน้าและหลังตีความขอบเขตคำขอไม่ตรงกัน ผู้พัฒนาเปลี่ยนการรวบรวม body และตรวจไวยากรณ์ให้ตรง RFC 9112

ใน WebSocket CVE-2026-114213 ใช้ continuation frame ขนาดเล็กจำนวนมาก ทำให้ข้อจำกัดขนาดข้อความแบบ fragmented ไม่สะท้อนหน่วยความจำที่ใช้จริง ผู้พัฒนาจึงรวมเฟรมเล็กเมื่อรับเข้ามา ส่วน CVE-2026-110314 คือเฟรมและข้อความยังไปถึง WebSock handler หลังเซิร์ฟเวอร์เริ่มปิดการเชื่อมต่อ รุ่นใหม่หยุดส่งต่อหลังเริ่มปิด

วันเปิดเผยครั้งแรก วันเผยแพร่ CVE และแพตช์

Changelog 1.14.0 ของโครงการ ลงวันที่ 26 ตุลาคม 2026 และระบุเลข CVE พร้อมการแก้ในรุ่นนี้ Hex.pm บันทึกการเผยแพร่แพ็กเกจ 26 ตุลาคม 2026 เวลา 13:12:37 UTC ส่วนคำเตือน GitHub Security Advisory ของผู้พัฒนาทั้ง 11 รายการเผยแพร่สู่สาธารณะครั้งแรกช่วง 13:35:21–13:35:39 UTC วันเดียวกัน จึงยืนยันวันเปิดเผยช่องโหว่ต่อสาธารณะครั้งแรกและวันออกแพตช์เป็น 26 ตุลาคม 2026

ระเบียน CVE ทั้ง 11 รายการเผยแพร่ครั้งแรกวันที่ 26 ตุลาคม 2026 ตามเวลาของ CVE Program ระหว่าง 13:29:42–13:35:26 UTC เวลานี้แยกจากเวลาเผยแพร่คำเตือนของโครงการและเวลาออกแพ็กเกจ ไม่ใช่วันที่มีการอัปเดตระเบียนภายหลัง ผู้ดูแลควรอ้างอิงเวลาของแต่ละรายการในระเบียนเมื่อทำบันทึกเหตุการณ์ละเอียด

แนวทางรับมือ

ตรวจไฟล์ล็อก dependency และแพ็กเกจที่ถูก deploy ของแอป Elixir/Phoenix ว่า Bandit อยู่ที่เวอร์ชันใด แล้วอัปเดตเป็น 1.14.0 หรือใหม่กว่า ผ่าน Hex.pm ทดสอบการรับ HTTP/1.1, HTTP/2 และ WebSocket ของแอป รวมถึง proxy และ load balancer ที่อยู่ด้านหน้า เพราะรุ่นใหม่เข้มงวดกับคำขอที่ผิดรูปแบบและจำกัดขนาดบางชนิดมากขึ้น สำหรับระบบที่รับทราฟฟิกจากอินเทอร์เน็ต ควรติดตามหน่วยความจำ CPU จำนวน connection และอัตรา error หลังอัปเดตเพื่อแยกการปฏิเสธคำขอผิดรูปแบบออกจากปัญหาความเข้ากันได้ของ client ที่ใช้งานจริง

หากยังอัปเดตไม่ได้ ให้จำกัดการรับทราฟฟิกจากแหล่งที่ไม่เชื่อถือและใช้ขีดจำกัด connection หรือ request ที่ edge ตามความสามารถของระบบ แต่ต้องวางแผนติดตั้งแพตช์ เพราะคำเตือนหลายรายการเกี่ยวข้องกับสถานะภายในของ Bandit เอง การลดทราฟฟิกไม่ยืนยันว่าปิดช่องโหว่ทั้งหมดแล้ว

แหล่งต้นทาง: Bandit CHANGELOG, Bandit 1.14.0 บน Hex.pm และคำเตือนของโครงการที่เชื่อมจากเลข CVE ในตาราง