มีเผยการถึงโจมตี DoS ผ่าน HTTP/2 ที่อาจทำให้เซิร์ฟเวอร์หยุดการทำงานได้ที่เรียกว่า ‘CONTINUATION Flood’ โดยขึ้นอยู่กับปลายทางว่ามีการอิมพลิเม้นต์การรับมือกับ TCP อย่างไร ที่หลายกรณีอาจได้รับผลกระทบเพียงแค่การเชื่อมต่อเดียวที่เข้ามา
HTTP/2
โปรโตคอล HTTP/2 เริ่มต้นขึ้นในปี 2015 ด้วยความหวังว่าจะเพิ่มประสิทธิภาพการทำงานของเว็บ โดยมีฟีเจอร์ใหม่เข้ามาเช่น Binary Framing, Multiplexing Multiple Request & Response ผ่าน 1 การเชื่อมต่อ รวมถึงการทำ Header compression เพื่อลด overhead
ประเด็นคือ HTTP/2 Message ประกอบด้วย Header และ Trailer ที่วางเรียงกันเป็นบล็อกอย่างที่หลายคนทราบกัน โดยบล็อกสามารถถูกทำให้แตกย่อย(fragmentation))เป็นหลาย frame สำหรับการส่งได้ และ CONTINUATION frame คือสิ่งที่จะร้อยเรียงกระแสเนื้อหาข้อมูลนั้น
ไอเดียของ CONTINUATION Flood
นักวิจัยชื่อ Barket Nowotarski ได้ออกมาเผยว่าการใช้งาน CONTINUATION frame อาจไม่ถูกจำกัดอย่างเหมาะสมหรือขาดการตรวจสอบในบางการอิมพลีเม้นต์ในโลกการใช้งานจริง ทำให้ผู้ไม่หวังดีสามารถส่ง Frame ที่ยาวยืดด้วยการไม่ตั้งค่า ‘END_HEADERS’ flag ส่งผลให้เกิดการใช้งานทรัพยากรของเซิร์ฟเวอร์จนเกิดขนาดและนำไปสู่อาการหยุดชะงักได้ต่อไป
เมื่อเรื่องเป็นเช่นนี้ก็ต้องไปสืบทราบต่อว่าเซิร์ฟเวอร์ที่ใช้กันอยู่มีการรับมือกับการเชื่อมต่อของ TCP นี้อย่างไร
ผลกระทบเกิดขึ้นจริง หลายช่องทาง
CERT-CC มีการออก CVE สำหรับรูปแบบการโจมตีดังกล่าวแล้ว ที่อาจทำให้เกิดความเสียหายแตกต่างกันของแอปพลิเคชัน ดังนี้
- CVE-2024-27983 – เกิดขึ้นกับเซิอร์ฟเวอร์ Node.js
- CVE-2024-27919 – ส่งผลกระทบกับ oghttp codec ของ Envoy ที่กระทบกับการใช้หน่วยความจำอย่างไม่สิ้นสุด โดยไม่มีกลไกรีเซ็นการเชื่อมต่อเมื่อ header ขยายเกินกำหนด
- CVE-2024-27316 – กระทบกับ Apache Httpd
- CVE-2024-31309 – กระทบกับเซิร์ฟเวอร์ Apache
นอกจากนี้ยังมี CVE หมายเลขอื่นอีกเช่น CVE-2024-2758, CVE-2024-2653, CVE-2023-45288, CVE-2024-28182 และ CVE-2024-30255 เป็นต้น
จากข้อมูล CVE ที่กล่าวถึง และคำบอกเล่าจาก Vendor และไลบรารี HTTP/2 แล้ว ปัจจุบันมีผู้ที่ได้รับผลกระทบในวงกว้างหลายราย เช่น Red Hat, SUSE Linux, Arista Networks, the Apache HTTP Server Project, nghttp2, Node.js, AMPHP และภาษาโปรแกรม Go
อย่างไรก็ดีผู้เชี่ยวชาญชี้ว่าการป้องกันก็ทำได้ยากเช่นกัน เพราะการโจมตีไม่สามารถรับรู้ได้โดยง่ายจาก Log แต่ต้องมีการเปิดวิเคราะห์ frame เอาไว้ซึ่งการทำงานส่วนใหญ่ไม่ได้ทำ ทั้งยังต้องมีความรู้ความเข้าใจเกี่ยวกับ HTTP/2 เป็นอย่างดี