EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Security Notice / 'league/commonmark แก้ DoS จาก slug ชนกัน GHSA-mh25-x5hq-wrqp'
Security Notice

'league/commonmark แก้ DoS จาก slug ชนกัน GHSA-mh25-x5hq-wrqp'

โดย Ton-Or ·3 ส.ค. 2026·อ่าน 3 นาที
'league/commonmark แก้ DoS จาก slug ชนกัน GHSA-mh25-x5hq-wrqp'

'นักพัฒนาและผู้ดูแลระบบที่รับ Markdown จากภายนอกผ่านส่วนขยายที่ได้รับผลกระทบควรเร่งอัปเดต league/commonmark เป็น 2.9.0'

สรุปใน 1 นาที

อาการ/ปัญหา
slug ที่ซ้ำกันทำให้การประมวลผลใช้ CPU มากจนบริการไม่พร้อมใช้งาน
ใครควรอ่าน
นักพัฒนาและผู้ดูแลระบบที่ใช้ league/commonmark รุ่น 2.0.0 ถึงก่อน 2.9.0 กับ Markdown ภายนอกและส่วนขยายที่เกี่ยวข้อง
ทางแก้แบบสั้น
อัปเดตเป็น 2.9.0 ทดสอบการแสดงผล แล้วนำแพ็กเกจและ composer.lock ที่แก้แล้วขึ้นใช้งาน
ข้ามไปขั้นตอน

พอดีไล่ฟีด Packagist เจอประกาศของไลบรารี PHP league/commonmark เรื่อง slug ของหัวข้อซ้ำกัน รหัส GHSA-mh25-x5hq-wrqp ผู้พัฒนาเผยแพร่เมื่อ 3 สิงหาคม 2026 ปัญหานี้ทำให้การแปลง Markdown ใช้ CPU มากจนบริการล่มได้ แอปที่รับข้อความจากคนนอกควรตรวจส่วนขยายที่สร้าง slug

Highระดับความรุนแรง
7.5/10CVSS 3.1
2.9.0รุ่นที่แก้ไข

ใครต้องทำอะไร

  • นักพัฒนา: ตรวจ dependency และส่วนขยายที่แอปใช้ แล้วเร่งอัปเดตเป็น 2.9.0 หากรับ Markdown จากผู้ใช้ภายนอกผ่านเส้นทางที่ได้รับผลกระทบ
  • ผู้ดูแลระบบ: ประสานทีมแอปให้นำแพตช์ขึ้นใช้งานโดยเร็วเมื่อบริการรับ Markdown ที่ไม่น่าเชื่อถือผ่านส่วนขยายที่เกี่ยวข้อง

เกิดอะไรขึ้น

slug คือชื่อที่ใช้ทำจุดอ้างอิงภายในเอกสาร เช่น ลิงก์กระโดดไปยังหัวข้อ เมื่อชื่อซ้ำ UniqueSlugNormalizer::normalize() จะหาเลขต่อท้ายที่ยังไม่ถูกใช้ แต่โค้ดเดิมเริ่มค้นใหม่จากเลข 1 ทุกครั้ง งานเลยเพิ่มแบบกำลังสอง หรือ O(K²) ตามจำนวน slug ที่ชนกัน เอกสารขนาดเล็กก็ทำให้เสียเวลา CPU หลายวินาทีได้

ปัญหาเกิดเมื่อข้อความที่ผู้โจมตีควบคุมถูกส่งให้ตัวสร้าง slug นี้ แอปอาจเรียกผ่าน HeadingPermalinkExtension หรือเชิงอรรถแบบ inline ของ FootnoteExtension ส่วน TableOfContentsExtension ก็เข้าข่าย เพราะต้องเปิดส่วนขยาย heading permalink ร่วมด้วย ค่าเริ่มต้นจะตรวจชื่อซ้ำทั้งเอกสาร ยิ่งมีชื่อซ้ำมากก็ยิ่งทำงานหนัก

ประกาศจัดเป็น High คะแนน CVSS 3.1 เท่ากับ 7.5 ผู้โจมตีไม่ต้องยืนยันตัวตน และผลกระทบที่ระบุจำกัดอยู่ที่ความพร้อมใช้งานของบริการ ประกาศไม่ได้ระบุผลกระทบต่อความลับหรือความถูกต้องของข้อมูล และยังไม่มีหมายเลข CVE ให้ใช้อ้างอิง ควรใช้ GHSA-mh25-x5hq-wrqp ในรายการติดตามแพตช์แทน

ใครโดนและรุ่นที่แก้

แพ็กเกจ / สายรุ่น รุ่นที่ได้รับผลกระทบ รุ่นที่แก้
league/commonmark 2.x ตั้งแต่ 2.0.0 แต่ต่ำกว่า 2.9.0 2.9.0
league/commonmark 1.x ไม่ได้รับผลกระทบจากปัญหานี้ ไม่เกี่ยวข้อง

ข้อมูลช่วงรุ่นไม่ตรงกัน: ช่อง Affected versions ใน ประกาศผู้พัฒนา ระบุ >=2.0.0, <2.8.4 แต่คำอธิบายบอกว่ากระทบถึงสาย 2.8.x ส่วน GitHub Advisory Database ระบุ >=2.0.0, <2.9.0 ตารางนี้ใช้ช่วงหลัง ทั้งสองหน้าระบุรุ่นแก้เป็น 2.9.0 ตรงกัน

Release notes ของ 2.9.0 ยืนยันการแก้ตัวค้นเลขต่อท้าย slug ที่ทำงานซ้ำแบบกำลังสอง ให้ตรวจทั้งรุ่นแพ็กเกจและส่วนขยายที่แอปเปิดใช้

ต้องทำอะไร

ตรวจรุ่นที่ติดตั้งในโฟลเดอร์โปรเจกต์ สำรองไฟล์ dependency แล้วอัปเดตในสภาพแวดล้อมทดสอบก่อน ตัวอย่างนี้อ้างอิง คำสั่ง Composer และกำหนดรุ่นเป้าหมายไว้ชัดเจน:

composer show league/commonmark
composer update league/commonmark:2.9.0 --with-dependencies
composer show league/commonmark

ถ้า constraint ใน composer.json หรือแพ็กเกจแม่ไม่ยอมรับ 2.9.0 ต้องแก้ข้อจำกัดหรืออัปเดตแพ็กเกจที่เกี่ยวข้องก่อน คำสั่งนี้ไม่ได้เปลี่ยน constraint ให้เอง หลังอัปเดตให้ตรวจผลลัพธ์ว่าติดตั้ง 2.9.0 แล้ว ทดสอบลิงก์หัวข้อ สารบัญ และเชิงอรรถ จากนั้นนำ composer.lock และชุด dependency ที่ผ่านการทดสอบขึ้นใช้งาน ตรวจรุ่นบนระบบปลายทางอีกครั้งด้วย

ทางแก้ชั่วคราวจากผู้พัฒนา

ตั้ง slug_normalizer/unique เป็น false เพื่อหยุดตรวจชื่อซ้ำ แต่หัวข้ออาจใช้ anchor เดียวกัน อีกทางคือปิดส่วนขยายที่เกี่ยวข้องเมื่อรับ Markdown จากภายนอก และจำกัดขนาดเอกสารกับจำนวนหัวข้อ วิธีเหล่านี้อาจทำให้บางฟีเจอร์ใช้ไม่ได้หรือผลลัพธ์เปลี่ยนไป ผู้พัฒนาแนะนำให้อัปเกรดเป็นหลัก

ส่วนตัวผมให้เร่งแพตช์หากเปิดรับ Markdown จากภายนอกและใช้ส่วนขยายที่เข้าข่าย เพราะจุดรับข้อความอาจกลายเป็นภาระ CPU ของบริการได้ ที่มา: GitHub Security Advisory GHSA-mh25-x5hq-wrqp เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

อยากให้เราทำให้ไหม?

ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า

คุยเรื่องงานกับเรา

เคยเจองานแบบนี้ไหม? ติดตรงไหน?

มาแลกวิธีกันต่อในบอร์ด LinuxThai

→ คุยต่อในบอร์ด

ความคิดเห็น 0

ยังไม่มีความคิดเห็น — เป็นคนแรกเลย