EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Security Notice / league/commonmark ข้ามตัวกรองลิงก์เสี่ยง CVE-2026-71478
Security Notice

league/commonmark ข้ามตัวกรองลิงก์เสี่ยง CVE-2026-71478

โดย Ton-Or ·3 ส.ค. 2026·อ่าน 3 นาที
league/commonmark ข้ามตัวกรองลิงก์เสี่ยง CVE-2026-71478

นักพัฒนาและผู้ดูแลระบบที่เปิด AttributesExtension รับ Markdown จากผู้ใช้ควรเร่งอัปเดต league/commonmark เป็นรุ่นที่แก้ไขแล้ว

สรุปใน 1 นาที

อาการ/ปัญหา
ไบต์ควบคุมใน URL ช่วยให้ลิงก์อันตรายผ่านตัวกรองและนำไปสู่ XSS ได้
ใครควรอ่าน
นักพัฒนาและผู้ดูแลระบบที่ใช้ league/commonmark รุ่น 1.5.0–2.8.3 พร้อม AttributesExtension กับข้อมูลที่ไม่เชื่อถือ
ทางแก้แบบสั้น
อัปเดตเป็น 2.9.0 ซึ่งเป็นรุ่นแก้ไขตามประกาศ แล้วทดสอบการแสดง Markdown และตรวจรุ่นที่นำขึ้นใช้งานจริง
ข้ามไปขั้นตอน

พอดีไล่ฟีดความปลอดภัยเจอประกาศ league/commonmark วันที่ 3 สิงหาคม 2026 เป็นไลบรารี PHP ที่แปลง Markdown เป็น HTML ช่องโหว่ CVE-2026-71478 หรือ GHSA-29pj-957v-52mc ทำให้ข้ามตัวกรองลิงก์ของ AttributesExtension ได้ แอปที่รับข้อความจากผู้ใช้ภายนอกยังเสี่ยง แม้ตั้ง allow_unsafe_links => false แล้ว

CommonMarkไลบรารี PHP
XSSผลกระทบ
6.1CVSS 3.1 ระดับปานกลาง
2.9.0รุ่นแก้ไข

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

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

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

ส่วนขยายนี้ให้ผู้เขียน Markdown กำหนดแอตทริบิวต์ HTML ได้ ปัญหาคือตัวกรอง href และ src ตรวจต้น URL โดยยังไม่ได้จัดการอักขระควบคุมแบบที่เบราว์เซอร์ทำ ลิงก์อันตรายบางรูปแบบเลยผ่านตัวกรอง

แท็บและอักขระขึ้นบรรทัดใหม่ที่แทรกในชื่อโพรโทคอล รวมถึงอักขระควบคุม C0 บางตัวที่อยู่ด้านหน้า ถูกเบราว์เซอร์ตัดทิ้งก่อนอ่านโพรโทคอล ลิงก์ที่ผ่านตัวกรองมาแล้วเลยกลับถูกอ่านเป็น javascript: และอาจรันสคริปต์ในบริบทของเว็บเมื่อเหยื่อคลิกลิงก์ นี่คือความเสี่ยง XSS ซึ่งอาจกระทบข้อมูลหรือบัญชีผู้ใช้ ไม่ใช่การรันคำสั่งบนเซิร์ฟเวอร์โดยตรง

ประกาศให้ระดับ Moderate และ CVSS 3.1 เท่ากับ 6.1 ผู้ใช้ต้องเปิดหรือคลิกลิงก์ด้วย ช่องโหว่นี้มีข้อจำกัด: การใส่ href ให้ส่วนที่ไม่ใช่ลิงก์ไม่ได้ทำให้เกิด XSS เอง ส่วน <img src> ไม่ได้รับผลในกรณีนี้ เพราะตัวแสดงภาพเขียนค่า src ทับจาก URL หลัก อ่านได้ใน ประกาศช่องโหว่

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

แพ็กเกจ รุ่นที่ได้รับผลกระทบ รุ่นที่แก้ตามประกาศ
league/commonmark ผ่าน Composer ตั้งแต่ 1.5.0 ถึง 2.8.3 รวมปลายช่วง 2.9.0

ตารางยึดช่อง Affected versions ใน advisory แต่คำอธิบายของระเบียน CVE ใช้ช่วงตั้งแต่ 1.5.0 ถึงก่อน 2.9.0 ซึ่งระบุขอบบนต่างกัน รุ่นแก้ที่ทั้งสองแหล่งยืนยันคือ 2.9.0

ต้องตรวจด้วยว่าเปิด AttributesExtension รับข้อความจากผู้ใช้ภายนอกหรือไม่ ประกาศไม่ได้ให้แพตช์แยกสำหรับสาย 1.x ส่วน บันทึกรุ่น 2.9.0 ยืนยันการแก้ตัวกรองนี้แล้ว

แพตช์แก้ด้วยการลบแท็บและอักขระขึ้นบรรทัดใหม่ พร้อมตัดอักขระควบคุมด้านหน้า ก่อนตรวจความอันตรายของโพรโทคอล โดยทำในฟังก์ชันตรวจ URL ส่วนกลาง เพื่อให้จุดเรียกใช้อื่นได้รับการป้องกันด้วย ดูได้จาก การเปลี่ยนแปลงต้นทาง

ต้องทำอะไร

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

composer show league/commonmark
composer update league/commonmark --with-all-dependencies
composer show league/commonmark
composer audit

Composer ยังเลือกรุ่นตามข้อกำหนดใน composer.json ถ้าตรึงไว้ที่ 1.x หรือแพ็กเกจอื่นบังคับรุ่นเก่า ต้องแก้ข้อกำหนดหรืออัปเดตแพ็กเกจนั้นก่อน คำสั่งทำงานจบไม่ได้แปลว่าได้รุ่นแก้แล้ว ให้ตรวจเลขรุ่นและรายการ dependency ที่เปลี่ยนด้วย เพราะตัวเลือกนี้อัปเดต dependency ที่เกี่ยวข้องได้ ตาม คู่มือ Composer

หลังทดสอบให้เก็บ composer.lock ที่อัปเดตแล้วและนำชุด dependency เดียวกันขึ้นใช้งาน ตรวจหน้าแสดง Markdown โดยเฉพาะลิงก์และแอตทริบิวต์ที่แอปอนุญาต ประกาศไม่ได้ให้ workaround แยกไว้ และการตั้ง allow_unsafe_links => false เพียงอย่างเดียวใช้แทนแพตช์นี้ไม่ได้

ส่วนตัวผมให้เร่งแพตช์ถ้าเว็บเปิดรับ Markdown จากผู้ใช้พร้อมส่วนขยายนี้ เพราะการตั้งค่าปิดลิงก์อันตรายเดิมยังกันช่องโหว่นี้ไม่ครบ ที่มา: GitHub Security Advisory (GHSA-29pj-957v-52mc) หากมีรายละเอียดเพิ่มเติม เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

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

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

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

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

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

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

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

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