สรุปสั้น
บริษัท GitLab ออกแพตช์เมื่อวันที่ 21 ตุลาคม 2569 แก้ช่องโหว่ CVE-2026-110264 คะแนน CVSS 10.0 ซึ่งเป็นคะแนนสูงสุด ช่องโหว่นี้เปิดให้ผู้โจมตีที่ไม่ได้ล็อกอินรันโค้ดใด ๆ บนเซิร์ฟเวอร์ GitLab แบบ self-managed ได้ภายใต้เงื่อนไขบางอย่าง ต้นเหตุคือ integer overflow ระหว่างคอมไพล์ regular expression ที่สร้างขึ้นเป็นพิเศษ และเพราะส่วนที่บกพร่องคือเอนจิน regex ของ Ruby ที่ GitLab ฝังมาเองในแพ็กเกจ ช่องโหว่จึงกระทบทุกเวอร์ชันย้อนไปถึง 7.0 ที่ออกในปี 2557 GitLab ถึงขั้น backport แพตช์ไปให้เวอร์ชันเก่ากว่ารอบซัพพอร์ตปกติถึง 4 สาย
จุดที่ผู้ดูแลต้องระวังคือ แม้จะเพิ่งอัปเดตแพตช์รอบ 12 ตุลาคมที่แก้ช่องโหว่ regex คะแนน 10.0 ตัวก่อนหน้า เวอร์ชันที่แก้ปัญหาใหม่อยู่สูงกว่ารอบนั้นหนึ่งขั้น เซิร์ฟเวอร์ที่อัปเดตตอนนั้นจึงยังอยู่ในขอบเขตและต้องอัปเดตซ้ำ GitLab ยังไม่พบการโจมตีจริง และช่องโหว่ยังไม่อยู่ในแคตตาล็อก KEV ของ CISA ณ วันที่ 22 ตุลาคม แต่บริษัทไม่เปิดเผยเงื่อนไขของการโจมตีและไม่มีวิธีแก้ชั่วคราว การอัปเดตจึงเป็นทางป้องกันเดียวที่แน่นอน
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 22 ตุลาคม 2569 ว่าการติดตั้งที่ต้องลงมือมีเฉพาะแบบ self-managed เท่านั้น เพราะ GitLab.com ใช้เวอร์ชันที่แก้แล้ว ส่วนลูกค้า GitLab Dedicated ที่อยู่บน internal release 19.3.5-internal0 และ 19.4.2-internal0 ขึ้นไปก็ได้รับแพตช์แล้วเช่นกัน GitLab แก้ช่องโหว่นี้ใน 7 เวอร์ชันพร้อมกัน ตามตารางด้านล่าง
| หากใช้อยู่ | อัปเดตเป็น |
|---|---|
| 19.5 ก่อน 19.5.1 | 19.5.1 |
| 19.4 ก่อน 19.4.3 | 19.4.3 |
| 19.3 ก่อน 19.3.6 | 19.3.6 |
| 19.2 ก่อน 19.2.9 | 19.2.9 |
| 19.1 ก่อน 19.1.9 | 19.1.9 |
| 19.0 ก่อน 19.0.10 | 19.0.10 |
| 7.0 ถึง 18.11 ก่อน 18.11.13 | 18.11.13 |
ตามนโยบายปกติ GitLab แพตช์เฉพาะรุ่นปัจจุบันและรุ่นรายเดือนย้อนหลัง 2 รุ่น ซึ่งตอนนี้คือ 19.5, 19.4 และ 19.3 แต่ครั้งนี้บริษัท backport ไปถึง 18.11.13, 19.0.10, 19.1.9 และ 19.2.9 ด้วย ซึ่งเป็นมาตรการที่สงวนไว้สำหรับปัญหาร้ายแรงเท่านั้น
ช่องโหว่นี้เป็นช่องโหว่รันโค้ดตัวที่สี่ในเอนจิน regex ของ GitLab ที่นักวิจัยผู้ใช้ชื่อ joaxcar รายงานภายในเดือนเดียว และเป็นตัวแรกที่ลามไปถึงเวอร์ชันก่อน 19.2 เมื่อวันที่ 12 ตุลาคม GitLab แก้ CVE-2026-97229 ซึ่งเป็น overflow ในตัวคอมไพล์ regex คะแนน 10.0 ที่ไม่ต้องล็อกอินเช่นกัน (2026/10/100 ) ในเวอร์ชัน 19.2.8, 19.3.5 และ 19.4.2 ส่วนวันที่ 23 กันยายน แก้อีก 2 ตัวคือ CVE-2026-93577 และ CVE-2026-89078 คะแนน 9.9 ทั้งคู่แต่ต้องมีบัญชีล็อกอิน ช่องโหว่ 3 ตัวก่อนหน้าหยุดอยู่ที่เวอร์ชัน 19.2 แต่ตัวนี้ไม่หยุด
รายละเอียดช่องโหว่
เหตุที่ช่องโหว่ย้อนหลังได้ไกลถึง 12 ปีอยู่ที่ส่วนประกอบที่ล้มเหลว ตัวคอมไพล์ regular expression คือ Onigmo ซึ่งเป็นเอนจิน regex ในตัวของ Ruby ที่ GitLab ใส่มาในแพ็กเกจของตัวเองและแพตช์ใน build ของตัวเอง จุดอ่อนในเอนจินนี้จึงมีอยู่ทุกที่ที่ GitLab ส่ง Onigmo ไปด้วย ซึ่งก็คือทุกรุ่นตั้งแต่ 7.0 เมื่อผู้โจมตีป้อน regular expression ที่สร้างขึ้นเป็นพิเศษ การคำนวณขนาดระหว่างคอมไพล์จะเกิด integer overflow และนำไปสู่การรันโค้ดบนเซิร์ฟเวอร์ GitLab ไม่เปิดเผยว่าผู้โจมตีต้องมีเงื่อนไขใดจึงจะส่ง regex ไปถึงตัวคอมไพล์ได้ ผู้ดูแลจึงยังตัดตัวเองออกจากความเสี่ยงด้วยการตั้งค่าไม่ได้
แพตช์รอบนี้แก้ปัญหาความปลอดภัยรวม 11 รายการ ระดับวิกฤต 1 รายการ ที่เหลือเป็นระดับสูง กลาง และต่ำ ในจำนวนนี้มี 2 รายการที่เกี่ยวกับการยืนยันตัวตน CVE-2026-15723 คะแนน 8.2 อาจเปิดให้ผู้ใช้ที่ล็อกอินแล้วยึดบัญชีผู้อื่นได้ แต่เฉพาะเมื่อผู้ดูแลเปิด auto-linking ทั้ง SAML และ LDAP พร้อมกัน ส่วน CVE-2026-112212 คะแนน 7.5 เป็น cache poisoning ใน endpoint ของ OAuth และ OpenID Connect ที่อาจทำให้ผู้โจมตีเบี่ยงขั้นตอนล็อกอินบางแบบไปยังเซิร์ฟเวอร์ที่ตนควบคุม ในการตั้งค่าที่ใช้ cache ร่วมกัน
GitLab ยังเผยแพร่กฎตรวจจับ 2 ตัวสำหรับผู้ดูแล self-managed ใช้ค้นหาความพยายามโจมตี ชื่อ “Onigmo native worker crash” และ “Org mode render error burst” กฎทั้งสองเป็นส่วนหนึ่งของเฟรมเวิร์กโอเพนซอร์ส TLDR ของบริษัท ซึ่งเขียนกฎตรวจจับในรูปแบบ Sigma สำหรับล็อกแอปพลิเคชันของ GitLab
ผลกระทบ
เซิร์ฟเวอร์ GitLab self-managed เป็นเป้าหมายมูลค่าสูง เพราะเก็บซอร์สโค้ด ความลับใน CI/CD ตัวแปรสภาพแวดล้อม และ token สำหรับดีพลอยไปยังระบบอื่น ช่องโหว่ที่รันโค้ดได้โดยไม่ต้องล็อกอินจึงเปิดทางไปสู่การขโมยทรัพย์สินทางปัญญาและการโจมตีห่วงโซ่อุปทานซอฟต์แวร์ ความเสี่ยงยิ่งสูงในองค์กรที่ยังรันเวอร์ชันเก่าหลายปี ซึ่งครั้งนี้อยู่ในขอบเขตทั้งหมด
การที่นักวิจัยคนเดียวพบช่องโหว่รันโค้ดในเอนจิน regex ถึง 4 ตัวในเดือนเดียว ชี้ว่าส่วนนี้ของ GitLab กำลังถูกตรวจอย่างเข้มข้นและอาจมีปัญหาตามมาอีก ผู้โจมตีเองก็มีแนวโน้มเทียบแพตช์ระหว่างรุ่นเพื่อหาจุดที่แก้ เหมือนที่เคยเกิดกับช่องโหว่ GitLab คะแนน 10 ที่ถูกใช้โจมตีจริงในเดือนกันยายน (2026/09/116 ) การไม่มีวิธีแก้ชั่วคราวจึงทำให้ช่วงเวลาก่อนอัปเดตเป็นช่วงเสี่ยงที่สุด
คำแนะนำ
- อัปเดต GitLab self-managed เป็นเวอร์ชันตามตารางข้างต้นทันที แม้จะเพิ่งอัปเดตรอบ 12 ตุลาคมไปแล้วก็ตาม
- วางแผน downtime สำหรับ 19.4.3 และ 19.3.6 ซึ่งมีการเปลี่ยนแปลงฐานข้อมูลระหว่างอัปเกรด เซิร์ฟเวอร์ node เดียวจะหยุดให้บริการจนกว่าจะเสร็จ ส่วนระบบหลาย node ใช้ขั้นตอน zero-downtime ของ GitLab ได้
- นำกฎ Sigma “Onigmo native worker crash” และ “Org mode render error burst” ไปใช้ใน SIEM เพื่อค้นหาความพยายามโจมตีย้อนหลัง
- จำกัดการเข้าถึง GitLab จากอินเทอร์เน็ตด้วย VPN หรือ allowlist ระหว่างรออัปเดต
- ตรวจการตั้งค่า SAML และ LDAP auto-linking (CVE-2026-15723) และการใช้ cache ร่วมใน OAuth/OIDC (CVE-2026-112212)
- หลังอัปเดต ให้หมุนเวียน token, runner registration token และความลับใน CI/CD หากพบสัญญาณผิดปกติในล็อก
