Skip to main content
Back to articles

Starman 0.4019 แก้ CVE-2026-115817, CVE-2026-115822, CVE-2026-115823 และ CVE-2026-115824

Starman ก่อน 0.4019 มีช่องโหว่สี่รายการในชั้น HTTP ทำให้ worker ค้าง ใช้ CPU หรือหน่วยความจำเกิน และอาจส่ง response ผิดลำดับบน keep-alive

Starman 0.4019 แก้ CVE-2026-115817, CVE-2026-115822, CVE-2026-115823 และ CVE-2026-115824

Starman 0.4019 แก้สี่ช่องโหว่ใน HTTP worker และการจัดการคำขอ

Starman เว็บเซิร์ฟเวอร์สำหรับแอป Perl PSGI ออกรุ่น 0.4019 เพื่อแก้ช่องโหว่สี่รายการที่มีจุดร่วมอยู่ในชั้นรับและส่ง HTTP ไม่ได้อยู่ในโค้ดธุรกิจของแอปโดยตรง ผลกระทบมีทั้งการทำให้ worker ค้างจาก request body ที่ส่งช้า การใช้ CPU หรือหน่วยความจำสูงจาก chunked body และการส่ง body ทั้งที่สถานะตอบกลับไม่อนุญาต ซึ่งอาจทำให้ลำดับ response บนการเชื่อมต่อที่ใช้ซ้ำคลาดเคลื่อน ผู้ดูแลที่ใช้ Starman ก่อน 0.4019 ควรตรวจเวอร์ชัน process จริงและอัปเดตโดยคำนึงถึง proxy ด้านหน้าด้วย

วันเปิดเผยและรุ่นที่แก้

แพตช์ของโครงการปรากฏใน GitHub วันที่ 23 ตุลาคม 2026 ตามเวลา UTC ได้แก่การจำกัดเวลารับ body เวลา 23:29, การจำกัดบรรทัดขนาด chunk เวลา 23:23, การไม่ส่ง body สำหรับสถานะที่ห้าม เวลา 23:26 และการอ่าน chunk แบบไม่กักทั้งก้อน เวลา 23:23 ทั้งสี่ commit ระบุเลข CVE ที่เกี่ยวข้องชัดเจน Starman 0.4019 บน MetaCPAN เผยแพร่วันที่ 24 ตุลาคม 2026 เวลา 09:03 UTC ระเบียน CVE ทั้งสี่เผยแพร่ครั้งแรกวันที่ 25 ตุลาคม 2026 ระหว่าง 16:50–16:51 UTC

CVE-2026-115817: ส่ง body ช้าจน worker ไม่ว่าง

ก่อน 0.4019 ค่า read_timeout ของ Starman ครอบคลุมการอ่าน header แต่การรอข้อมูล body แบบ Content-Length หรือ chunked ไม่มีเส้นตายที่เทียบกันได้ หลังส่ง header ครบ ผู้โจมตีจากเครือข่ายอาจหยุดส่ง body หรือค่อย ๆ ส่งข้อมูลเป็นช่วงสั้น ทำให้ worker รอต่อจนกว่าการเชื่อมต่อจะหลุด หากทำพร้อมกันหลายการเชื่อมต่อ worker ที่มีอยู่ก็อาจถูกยึดไว้หมด ค่าเริ่มต้นห้า worker ที่ระเบียน CVE ยกเป็นตัวอย่างทำให้เห็นว่าจำนวนคำขอที่ต้องใช้ไม่มาก การโจมตีนี้เป็นการลดความพร้อมใช้งาน ไม่ต้องมีสิทธิ์ในแอป

แพตช์ทำให้ read_timeout ใช้กับแต่ละช่วงที่รอ body และเพิ่ม body_timeout จำกัดเวลารวมในการรับ body โดยค่าเริ่มต้น 300 วินาที เมื่อหมดเวลาระบบตอบ 408 ผู้ดูแลที่รองรับอัปโหลดไฟล์ช้าควรทดสอบว่าค่าดังกล่าวเหมาะกับผู้ใช้จริงหรือไม่ แล้วปรับด้วยความระมัดระวัง การเพิ่มค่ามากเกินไปจะทำให้ worker ค้างได้นานขึ้นอีกครั้ง

CVE-2026-115822 และ CVE-2026-115824: ขนาด chunk ทำให้ CPU หรือหน่วยความจำหมด

ใน CVE-2026-115822 ตัวถอดรหัส chunked body เดิมใช้ regular expression จับบรรทัดขนาด chunk โดยไม่มีขีดจำกัดความยาว เงื่อนไขบรรทัดที่ไม่ตรงรูปแบบบางชนิดทำให้ regex ลองย้อนกลับซ้ำมากขึ้นตามความยาวข้อมูล จน CPU ของ worker ถูกใช้หนัก แม้คำขอนั้นจะยังไม่ถึงแอป ส่วน CVE-2026-115824 เกี่ยวกับการกัก chunk ไว้ในหน่วยความจำก่อนอ่านครบ ผู้ส่งคำขออาจประกาศขนาด chunk ใหญ่มากแล้วส่งข้อมูลต่อเนื่อง หรือไม่ปิดบรรทัดบอกขนาด ทำให้บัฟเฟอร์โตขึ้นเรื่อย ๆ ความเสี่ยงทั้งสองชนิดอยู่คนละทรัพยากรและควรดู CPU กับหน่วยความจำแยกกันใน log และระบบติดตาม

บันทึกการออกรุ่นระบุว่าตัวแยกขนาด chunk ใหม่ทำงานเชิงเส้น จำกัดบรรทัดไว้ 4 KiB และตอบ 400 เมื่อรูปแบบผิด ส่วนการรับข้อมูลจะส่งต่อเข้า temporary buffer เป็นช่วง แทนการเก็บ chunk ทั้งก้อนในหน่วยความจำ ผู้ดูแลควรทดสอบคำขอแบบ chunked ที่ถูกต้องกับ proxy หรือ load balancer ของตน เพราะระบบบางชุดแปลงการส่ง body ระหว่าง client กับ Starman ก่อนถึงแอป

CVE-2026-115823: body ที่ไม่ควรส่งทำให้ response ผิดลำดับ

สำหรับคำขอ HEAD มาตรฐาน HTTP คาดหวัง header โดยไม่มี response body แต่ Starman เดิมยังเขียน body ที่แอปสร้างออกไป แม้จะไม่ใส่ chunked framing และยังมีปัญหากับ response สถานะ 1xx, 204 และ 304 ด้วย เมื่อ client หรือ reverse proxy ใช้ keep-alive แล้วส่งคำขอถัดไป bytes ที่เกินมาอาจถูกอ่านเป็นจุดเริ่มของ response ใหม่ ทำให้การจับคู่คำขอกับคำตอบคลาดเคลื่อน ผลกระทบจึงขึ้นกับรูปแบบการใช้ connection pooling และการทำงานของ proxy ด้านหน้า ไม่ควรเหมาว่าทุกการติดตั้งเกิดการรั่วข้อมูลทันที

แพตช์ตัด body สำหรับ HEAD และสถานะที่ไม่อนุญาตทั้งเส้นทางตอบกลับแบบ array และ streaming หลังอัปเดตควรทดสอบ request ที่ใช้ connection เดิมซ้ำ โดยเฉพาะ endpoint ที่คืน 204 หรือ 304 และแอปที่สร้าง streaming response เพื่อยืนยันว่า proxy และ client เห็นลำดับ response ถูกต้อง

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

ตรวจเวอร์ชัน Starman ที่ติดตั้งใน environment ของ process ไม่ใช่ดูเพียงไฟล์ dependency ที่ repository อัปเดตแล้ว จากนั้นอัปเดตเป็น 0.4019 หรือใหม่กว่า รีสตาร์ต worker ให้โหลดโค้ดใหม่ครบทุกตัว และตรวจการเชื่อมต่อผ่าน reverse proxy ตามที่ใช้งานจริง หากยังแพตช์ไม่ได้ทันที ให้ตั้ง timeout และขนาด request ที่ proxy อย่างเหมาะสม จำกัดจำนวนการเชื่อมต่อที่ค้าง และติดตาม worker ที่ CPU หรือหน่วยความจำสูงผิดปกติ มาตรการเหล่านี้ช่วยลดผลกระทบ แต่การแก้ parser และการส่ง response อยู่ที่ Starman รุ่นใหม่

หากสงสัยเหตุการณ์ในอดีต ให้เก็บช่วงเวลาที่ worker หยุดตอบ log ของคำขอ body ที่ค้างหรือผิดรูปแบบ และข้อมูล connection reuse จาก proxy เพื่อวิเคราะห์ร่วมกัน อย่าทดสอบกับระบบของผู้อื่น และอย่าใช้การมีเลข CVE เป็นข้อยืนยันว่าระบบตนถูกโจมตีแล้ว

แหล่งข้อมูลต้นทาง: Starman 0.4019 และ Changes, CVE-2026-115817, CVE-2026-115822, CVE-2026-115823 และ CVE-2026-115824