การละเลยจุดนี้หมายความว่า หากผู้โจมตีตั้งชื่อ Branch เป็นอะไรทำนองนี้ --exec='คำสั่งอันตราย' ระบบจะแปลความหมายชื่อ Branch นั้น ไม่ใช่เป็นป้ายชื่อธรรมดา แต่เป็นค่าสถานะคำสั่ง (command flag) สำหรับ git rebase--exec นี้ถูกออกแบบมาเพื่อรันคำสั่ง shell ทุกครั้งหลังจากที่มีการเล่นซ้ำ commit แต่ละอัน ผลลัพธ์ที่ได้คือการสามารถรันคำสั่งใดๆ ก็ได้บนระบบปฏิบัติการหลัก โดยมีสิทธิ์เทียบเท่ากับกระบวนการเซิร์ฟเวอร์ของ Gogs
สรุปรายละเอียดการโจมตีโดยย่อ:
--exec ตามด้วยคำสั่ง Shell ที่ต้องการ Jonah Burgess นักวิจัยด้านความปลอดภัยจาก Rapid7 Labs ผู้ค้นพบช่องโหว่นี้ ได้อธิบายกลไกการทำงานไว้อย่างตรงไปตรงมาว่า "ช่องโหว่นี้ทำให้ผู้ใช้ที่ผ่านการยืนยันตัวตนทุกคนสามารถรันโค้ดระยะไกล (RCE) บนเซิร์ฟเวอร์ได้ โดยการสร้าง Pull Request ด้วยชื่อ Branch ที่เป็นอันตราย ซึ่งจะแทรกค่าสถานะ --exec เข้าไปใน git rebase
สำหรับผู้ที่ติดตามโครงการ Gogs มาอย่างต่อเนื่อง ข่าวช่องโหว่ Zero-Day ระดับวิกฤตที่ไม่มีแพตช์แก้ไขนี้ไม่ใช่เรื่องน่าแปลกใจแต่อย่างใด มันคือตัวอย่างล่าสุดและรุนแรงที่สุดของรูปแบบปัญหาที่ดำเนินมาหลายปี ที่รายงานด้านความปลอดภัยมักจะได้รับแต่ความเงียบจากผู้ดูแลหลักของโครงการ ซึ่งในทางปฏิบัติแล้วมีเพียงคนเดียว
เส้นเวลาแห่งการละเลยนี้ถูกบันทึกไว้เป็นอย่างดีโดยทีมวิจัยอิสระหลายทีม:
ประวัติศาสตร์ที่เกิดขึ้นทั้งหมดนี้ได้เปลี่ยนการเปิดเผยข้อมูลล่าสุดของ Rapid7 ให้กลายเป็นมากกว่าประกาศคำแนะนำด้านความปลอดภัยเสียอีก อย่างที่สำนักข่าวอุตสาหกรรมแห่งหนึ่งระบุ สถานการณ์นี้คือ "เครื่องเตือนใจถึงข้อจำกัดของโครงการโอเพนซอร์ส" เมื่อโครงการต้องพึ่งพาผู้ดูแลเพียงคนเดียวที่ไม่ตอบสนอง เมื่อปราศจากโครงสร้างการกำกับดูแลแบบมีส่วนร่วมหลายฝ่ายที่มีประสิทธิภาพ โครงสร้างพื้นฐานสำคัญที่ถูกใช้งานอย่างแพร่หลายก็สามารถกลายเป็นความเสี่ยงถาวรได้
เนื่องจากไม่มีแพตช์ซอฟต์แวร์ ผู้ดูแลระบบจึงต้องใช้การเปลี่ยนแปลงการตั้งค่าและการควบคุมระดับเครือข่ายเพื่อทำลายช่องทางการโจมตีนี้ ขั้นตอนต่อไปนี้จะช่วยหยุดภัยคุกคามเฉพาะหน้าและลดพื้นที่เสี่ยงในการถูกโจมตี
1. ปิดตัวเลือก "Rebase before merging" ทันที
นี่คือมาตรการบรรเทาผลกระทบที่ได้ผลสูงสุดเพียงอย่างเดียว ห่วงโซ่การโจมตีทั้งหมดขึ้นอยู่กับรูปแบบการ Merge เฉพาะนี้ การเปลี่ยนการตั้งค่าในระดับ Repository หรือทั้งระบบ เป็น "Merge commit" หรือ "Squash" จะตัดเส้นทางโค้ดที่มีช่องโหว่ทิ้งไปโดยสิ้นเชิง
2. จำกัดการเข้าถึงจากเครือข่าย
การโจมตีนี้จำเป็นต้องมีการเข้าถึงผ่าน HTTP ในฐานะผู้ใช้ที่ยืนยันตัวตนแล้วเพื่อสร้าง Pull Request หากเซิร์ฟเวอร์ Gogs ของคุณไม่จำเป็นต้องเปิดสู่สาธารณะ ให้ย้ายไปอยู่หลัง VPN หรือไฟร์วอลล์ที่อนุญาตเฉพาะผู้ใช้ภายในที่เชื่อถือได้เท่านั้น วิธีนี้จะทำให้แพลตฟอร์มของคุณพ้นจากเครื่องมือสแกนหาเหยื่อจำนวนมากบนอินเทอร์เน็ตและผู้โจมตีที่ฉวยโอกาส
3. เข้มงวดกับการลงทะเบียนผู้ใช้และสิทธิ์ต่างๆ
เนื่องจากผู้ใช้ที่ยืนยันตัวตนแล้วทุกคนสามารถใช้ประโยชน์จากช่องโหว่นี้ได้ การลดจำนวนบัญชีบนเซิร์ฟเวอร์ให้เหลือน้อยที่สุดคือการป้องกันที่สำคัญ ปิดการลงทะเบียนด้วยตนเองและอนุมัติผู้ใช้ใหม่ด้วยตนเองเท่านั้น ตรวจสอบรายชื่อผู้ใช้ของคุณโดยด่วนและปิดการใช้งานบัญชีที่ไม่ได้ใช้งานหรือไม่รู้จัก
4. เฝ้าระวัง Pull Request ที่ผิดปกติ
ใช้การตรวจสอบเชิงรุกสำหรับชื่อ Branch ของ Pull Request ที่มีอักขระน่าสงสัย รวมถึงเครื่องหมายขีดคู่ (--), เซมิโคลอน, แบ็กทิก หรือโทเค็นคำสั่ง Shell ที่ชัดเจน เช่น exec, curl หรือ wget ชื่อ Branch ที่ผิดปกติเป็นตัวบ่งชี้ที่ชัดเจนถึงความพยายามในการโจมตี
5. วางแผนย้ายออกจาก Gogs ในระยะยาว
จากรูปแบบของช่องโหว่ระดับวิกฤตที่ไม่มีแพตช์ซึ่งถูกบันทึกไว้ การพึ่งพา Gogs ต่อไปคือความเสี่ยงในเชิงกลยุทธ์ ทางเลือกที่เป็นไปได้มากที่สุดคือ Gitea ซึ่งเป็น Fork ของ Gogs ที่ขับเคลื่อนโดยชุมชน มีทีมพัฒนาที่เข้มแข็งและมีผู้ดูแลหลายคน พร้อมกระบวนการตอบสนองด้านความปลอดภัยที่รวดเร็ว มีแพลตฟอร์มบริการ Git หลักๆ อีกหลายแห่ง แต่สำหรับทีมที่เลือก Gogs เพราะความเบาและความสามารถในการติดตั้งเอง Gitea เป็นตัวแทนที่แทบจะใช้แทนกันได้ทันที ซึ่งช่วยขจัดปัญหาคอขวดจากการมีผู้ดูแลคนเดียวไปได้เลย
6. เตรียมพร้อมสำหรับแพตช์ (หากมีออกมาจริง)
สมัครรับข้อมูลจากหน้าเพจความปลอดภัยของ Gogs และ GitHub Releases ไว้ หากมีการเผยแพร่แพตช์ในท้ายที่สุด ให้อัปเกรดทันที อย่างไรก็ตาม จงวางแผนสถานะความปลอดภัยของคุณภายใต้สมมติฐานที่ว่ารูปแบบนี้จะเกิดขึ้นซ้ำรอยเดิม และช่องโหว่ร้ายแรงในอนาคตจะถูกปล่อยทิ้งไว้โดยไม่มีแพตช์อีกหลายเดือน
Comments
0 comments