สรุปสั้น

มีการเปิดเผยช่องโหว่ระดับวิกฤตใน Gogs ซอฟต์แวร์ Git แบบ self-hosted โอเพนซอร์สที่ได้รับความนิยม ช่องโหว่นี้ถูกจัดคะแนน CVSS 9.4 โดย Rapid7 แต่ยังไม่มีหมายเลข CVE กำกับ จุดอันตรายคือผู้ใช้ที่ล็อกอินคนใดก็ได้ (authenticated user) สามารถสั่งรันโค้ดจากระยะไกล (RCE) บนเซิร์ฟเวอร์ วิธีโจมตีคือสร้าง pull request ที่มีชื่อ branch ประสงค์ร้ายเพื่อ inject แฟลก --exec เข้าไปในคำสั่ง git rebase ตอน merge การโจมตีไม่ต้องใช้สิทธิ์ admin และไม่ต้องอาศัยการโต้ตอบจากผู้ใช้คนอื่น ช่องโหว่นี้ยังไม่มีแพตช์ แม้จะแจ้งผู้พัฒนาตั้งแต่ 17 มีนาคม 2569 จึงควรปิดความเสี่ยงด้วยการตั้งค่าทันที

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 28 พฤษภาคม 2569 ว่า มีการเปิดเผยช่องโหว่ความปลอดภัยระดับวิกฤตในซอฟต์แวร์ Gogs ซึ่งเป็นบริการ Git แบบ self-hosted ที่องค์กรและนักพัฒนาจำนวนมากนิยมติดตั้งใช้งานภายในเอง นักวิจัยจาก Rapid7 ชื่อ Jonah Burgess เป็นผู้ค้นพบและรายงานปัญหานี้ โดยให้คะแนนความรุนแรงที่ CVSS 9.4 แต่ ณ เวลาที่รายงานยังไม่มีการกำหนดหมายเลข CVE ช่องโหว่เปิดทางให้ผู้ใช้ที่มีบัญชีและล็อกอินเข้าระบบสามารถสั่งรันโค้ดจากระยะไกลบนเซิร์ฟเวอร์ได้ ภายใต้เงื่อนไขที่เปิดใช้งานฟังก์ชัน rebase merge สิ่งที่น่ากังวลคือ ในอินสแตนซ์ที่ตั้งค่าแบบปริยาย ผู้โจมตีเพียงสมัครบัญชีและสร้าง repository ของตัวเองก็เริ่มโจมตีได้ทันที เพราะผู้สร้าง repo จะกลายเป็นเจ้าของโดยอัตโนมัติ และเปิด rebase merging ได้ด้วยการกดสวิตช์เพียงปุ่มเดียว Rapid7 ระบุว่ามีเซิร์ฟเวอร์ Gogs ที่เปิดสู่อินเทอร์เน็ตประมาณ 1,141 เครื่อง แต่ตัวเลขจริงน่าจะสูงกว่านี้ เพราะส่วนใหญ่ติดตั้งอยู่หลัง VPN หรือเครือข่ายภายใน ที่ร้ายแรงกว่านั้น ช่องโหว่ยังนำไปสู่การรั่วไหลข้ามผู้เช่า (cross-tenant) ทำให้ผู้โจมตีอ่าน private repository ของผู้ใช้รายอื่นบนเซิร์ฟเวอร์เดียวกันได้ ช่องโหว่นี้กระทบทุกแพลตฟอร์มที่รองรับ ทั้ง Windows, Linux และ macOS

รายละเอียดช่องโหว่

แก่นของช่องโหว่อยู่ที่คำสั่ง git rebase ซึ่งเป็นการนำชุด commit จาก branch หนึ่งมาเล่นซ้ำบน branch ฐานอีกอันเพื่อให้ประวัติโครงการเป็นเส้นตรง คำสั่ง git rebase รองรับแฟลก --exec ที่ใช้สั่งรันคำสั่ง shell หลังจากแต่ละ commit ถูกเล่นซ้ำเสร็จ ผู้โจมตีอาศัยการตั้ง ชื่อ branch ที่เป็นอันตราย เพื่อ inject แฟลก --exec พร้อมคำสั่ง shell เข้าไปในขั้นตอน “Rebase before merging” ที่ Gogs เรียกใช้ภายใน เมื่อสร้าง pull request และสั่ง merge แบบ rebase คำสั่งที่ฝังไว้ก็จะถูกรันบนเซิร์ฟเวอร์ทันที — เข้าข่าย argument injection แบบคลาสสิก หากโจมตีสำเร็จ ผู้โจมตีสามารถยึดเซิร์ฟเวอร์ เข้าถึงทุก repository ดูดข้อมูล credential เคลื่อนตัวต่อไปยังระบบอื่นในเครือข่าย และแก้ไขซอร์สโค้ดที่โฮสต์อยู่ได้ Rapid7 ยังปล่อยโมดูล Metasploit ที่ทำงานอัตโนมัติทั้งห่วงโซ่การโจมตีทั้งบน Linux และ Windows ทำให้ความเสี่ยงถูกนำไปใช้จริงได้ง่ายขึ้น จุดที่ตรวจจับยากคือ เมื่อผู้โจมตีสร้างและลบ repository ของตัวเอง ร่องรอยที่เหลือมีเพียง HTTP 500 ใน log ของเซิร์ฟเวอร์เท่านั้น

ผลกระทบต่อไทย

Gogs เป็นทางเลือกยอดนิยมขององค์กรไทยที่ต้องการระบบ Git ภายในแบบเบาและติดตั้งง่าย โดยเฉพาะหน่วยงานที่ไม่อยากฝากซอร์สโค้ดไว้บนคลาวด์ภายนอก เช่น สถาบันการศึกษา สตาร์ทอัป และทีมพัฒนาในองค์กรราชการ/รัฐวิสาหกิจ เนื่องจากช่องโหว่ต้องการเพียงบัญชีผู้ใช้ที่ล็อกอินได้ อินสแตนซ์ที่เปิดให้สมัครสมาชิกเองจึงเสี่ยงถูกยึดทันทีโดยไม่ต้องมีสิทธิ์พิเศษ ที่อันตรายต่อไทยเป็นพิเศษคือ ความสามารถอ่าน private repo ข้ามผู้เช่า ซึ่งอาจทำให้ซอร์สโค้ด ความลับทางธุรกิจ หรือ credential ของหลายทีมที่ใช้เซิร์ฟเวอร์ร่วมกันรั่วไหลพร้อมกัน และเนื่องจากยังไม่มีแพตช์ ทีมไทยที่รัน Gogs จึงต้องลงมือป้องกันด้วยการตั้งค่าเองทันที ไม่สามารถรอแก้ด้วยการอัปเดตเวอร์ชัน

คำแนะนำ

ปิดการสมัครสมาชิกเอง ตั้งค่า DISABLE_REGISTRATION = true ใน app.ini เพื่อกันผู้ใช้ที่ไม่น่าเชื่อถือสร้างบัญชี จำกัดการสร้าง repository ตั้งค่า MAX_CREATION_LIMIT = 0 ใน app.ini เพื่อไม่ให้ผู้ใช้สร้าง repo ของตัวเอง ตรวจสอบ (audit) การตั้งค่า rebase merge ของทุก repository และปิดไว้หากไม่จำเป็น จำกัดการเข้าถึง Gogs ให้อยู่หลัง VPN หรือเครือข่ายภายในเท่านั้น ไม่เปิดสู่อินเทอร์เน็ตโดยตรง เฝ้าระวัง log ที่มี HTTP 500 ผิดปกติ ซึ่งอาจเป็นร่องรอยของการโจมตี ติดตามประกาศแพตช์จากผู้พัฒนา Gogs อย่างใกล้ชิด และเตรียมอัปเดตทันทีเมื่อมีออกมา

แหล่งอ้างอิง