league/commonmark เสี่ยง DoS: GHSA-jjv6-8j6v-6j52
แอปที่รับ Markdown จากผู้ใช้และเปิด SmartPunct หรือ Attributes ควรเร่งอัปเดตเป็น 2.9.1 หรือใหม่กว่า
1-minute summary
- Symptom / problem
- Markdown ที่ออกแบบมาเฉพาะทำให้การแปลงใช้ CPU มากผิดสัดส่วนจน PHP workers ไม่ว่างรับงานปกติ
- Who should read
- แอปที่ใช้ league/commonmark รุ่นที่กระทบและลงทะเบียน SmartPunctExtension หรือ AttributesExtension
- Fix in short
- อัปเดตเป็น 2.9.1 หรือใหม่กว่า หรือหยุดลงทะเบียนส่วนเสริมที่กระทบระหว่างรอแพตช์
พอดีไล่ฟีดความปลอดภัยเจอประกาศของ league/commonmark เรื่อง Denial of Service ในส่วนเสริม SmartPunct และ Attributes รหัส GHSA-jjv6-8j6v-6j52 จุดที่ต้องตรวจคือแอปลงทะเบียนส่วนเสริมเหล่านี้ไว้หรือไม่ เพราะการมีแพ็กเกจอยู่ในโปรเจกต์อย่างเดียวไม่ได้แปลว่าเข้าข่ายช่องโหว่นี้ ประกาศให้ระดับ High คะแนน CVSS 3.1 เท่ากับ 7.5 และยังไม่ระบุหมายเลข CVE
เกิดอะไรขึ้น
ประกาศผู้พัฒนาเผยแพร่วันที่ 9 สิงหาคม 2026 ส่วนรายการใน GitHub Advisory Database เข้าฐานวันที่ 1 กันยายน 2026 เวลา UTC ซึ่งตรงกับ 2 กันยายน 2026 ตามเวลาไทย
ส่วนเสริมทั้งสองใช้เวลาประมวลผลเพิ่มแบบกำลังสองตามขนาดข้อความ SmartPunct คัดลอกข้อความเดิมทั้งก้อนซ้ำเมื่อจัดการเครื่องหมายคำพูดที่ไม่มีคู่ ส่วน Attributes ย้อนอ่านโหนดข้างเคียงซ้ำในชุดแอตทริบิวต์ระดับบล็อก อีกจุดหนึ่งคือสร้างรายการ class ใหม่ทุกครั้งที่รวมค่า จุดหลังนี้กระทบทั้งแบบ inline และแบบบล็อก
ผู้โจมตีที่ส่ง Markdown เข้าแอปที่เข้าข่ายได้อาจไม่ต้องยืนยันตัวตน และใช้คำขอขนาดไม่มากกินเวลา CPU จน PHP workers ติดงาน ส่งผลให้คำขอปกติทำงานไม่สำเร็จ ผลกระทบตามประกาศคือบริการไม่พร้อมใช้งาน ไม่ได้ระบุข้อมูลรั่วหรือการข้ามตัวกรอง ช่องโหว่นี้ยังไม่อยู่ใน KEV ฉบับ 4 พฤศจิกายน 2026
แพตช์เปลี่ยนให้การรวมข้อความต่อข้อมูลโดยไม่คัดลอกข้อความเดิมทั้งก้อน บันทึกชุดโหนด Attributes ที่เดินผ่านแล้ว และรวบรวมแอตทริบิวต์ก่อนรวมรายการ class ในรอบเดียว รายละเอียดการแก้อยู่ใน release notes ของ 2.9.1
ใครโดนและรุ่นที่แก้
| แพ็กเกจ / ส่วนเสริม | รุ่นที่กระทบ | รุ่นที่แก้ |
|---|---|---|
| league/commonmark / SmartPunct | ตั้งแต่ 2.0.0 ถึง 2.9.0 | 2.9.1 หรือใหม่กว่า |
| league/commonmark / Attributes | ตั้งแต่ 1.5.0 ถึง 2.9.0 | 2.9.1 หรือใหม่กว่า |
ต้องลงทะเบียน SmartPunctExtension หรือ AttributesExtension บน Environment ถึงจะเข้าข่าย ทั้งสองไม่ได้เปิดมาพร้อม CommonMarkConverter, GithubFlavoredMarkdownConverter หรือ GithubFlavoredMarkdownExtension โดยอัตโนมัติ รุ่น 2.9.0 ยังไม่แก้ปัญหานี้ครบ ส่วนสาย 1.x หมดการสนับสนุนแล้ว ต้องย้ายไป 2.9.1 หรือใหม่กว่า
ต้องทำอะไร
ตรวจรุ่นที่ติดตั้งและจุดลงทะเบียนส่วนเสริมก่อน สำรอง composer.json และ composer.lock แล้วทดสอบอัปเดตในสภาพแวดล้อมทดสอบ ตัวอย่างนี้ใช้เมื่อข้อกำหนด dependency ของโปรเจกต์ยอมรับรุ่น 2.9.1 แล้ว หากยังล็อกสาย 1.x ต้องวางแผนย้ายรุ่นและตรวจความเข้ากันได้ก่อน
composer show league/commonmark
composer update league/commonmark --with-all-dependencies
composer show league/commonmark
composer audit
คำสั่ง update เลือกรุ่นตามข้อกำหนดใน composer.json หลังอัปเดตให้ตรวจว่าได้รุ่นแก้จริง แล้วทดสอบการแปลงเอกสารและส่วนเสริมก่อน deploy ตาม เอกสาร Composer รุ่น 2.9.1 แก้ปัญหาในประกาศนี้ แต่ยังมี DoS จากแอตทริบิวต์ชื่ออื่นตาม GHSA-8rr7-cvq3-gmfh ซึ่งแก้ใน 2.10.0 หากเปิด Attributes ควรเลือกรุ่นที่แก้ตัวนั้นด้วย
ถ้ายังอัปเดตไม่ได้ ผู้พัฒนาแนะนำให้หยุดลงทะเบียนส่วนเสริมที่กระทบเมื่อแปลง Markdown ที่ไม่น่าเชื่อถือ หากจำเป็นต้องใช้ ให้จำกัดความยาวข้อมูลก่อนแปลงอย่างเข้มงวด การจำกัดผู้ใช้ เวลา execution และอัตราคำขอช่วยลดความเสี่ยงได้ แต่แทนการอัปเดตไม่ได้
ค่าตั้ง attributes/allow, max_delimiters_per_line, max_nesting_level, html_input และ allow_unsafe_links ไม่บรรเทาช่องโหว่นี้ อย่าใช้ค่าตั้งเหล่านี้เป็นเหตุผลเลื่อนแพตช์
ส่วนตัวผมให้เร่งแพตช์ถ้ารับ Markdown จากบุคคลภายนอกและเปิดส่วนเสริมที่กระทบ เพราะคำขอเดียวอาจยึดเวลาประมวลผลไปจากงานปกติ ที่มา: GitHub Security Advisory GHSA-jjv6-8j6v-6j52 หากประกาศต้นทางมีรายละเอียดเพิ่มเติม เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ
Want us to set this up?
Get help with server setup, configuration, migration, or troubleshooting. Save time for the work that matters.
Hit something like this? Stuck somewhere?
Come trade notes on the LinuxThai board



Comments 0
No comments yet — be the first