- ทีมวิจัยด้านความปลอดภัยสามารถทำ remote code execution (RCE) บนเซิร์ฟเวอร์โปรดักชันของ CodeRabbit และ ทำให้ API token และข้อมูลลับรั่วไหล ได้สำเร็จ
- ด้วย PR ที่ใช้ Rubocop จึงสามารถขโมย environment variables และ เข้าถึง PostgreSQL รวมถึงอ่าน/เขียนเรโปสิทธิ์ได้ 1 ล้านรายการ
- จากการรั่วไหลของ private key ของ GitHub App ทำให้สามารถฉีดมัลแวร์ แก้ไขซอร์สโค้ด และสร้างความเสียหายจริงในคลังขนาดใหญ่ที่มีทั้ง public/private repo ได้
- ฝั่ง CodeRabbit ตอบสนองทันทีภายในไม่กี่ชั่วโมงหลังได้รับรายงานช่องโหว่ และเสริมมาตรการความปลอดภัยเพิ่มเติม
- มีการเน้นย้ำความจำเป็นของการ ป้องกันเหตุความปลอดภัย ด้วยการแยก sandbox จำกัดสิทธิ์ขั้นต่ำ และตัดการเชื่อมต่อเครือข่ายเมื่อรันเครื่องมือภายนอก
บทนำ
- ในเดือนมกราคม 2025 ทีมวิจัยของ Kudelski Security ได้เปิดเผยช่องโหว่ความปลอดภัยร้ายแรงของ CodeRabbit
- ใน CodeRabbit ซึ่งถูกใช้อย่างแพร่หลายเป็นเครื่องมืออัตโนมัติสำหรับรีวิว PR พบปัญหาสำคัญ ได้แก่ remote code execution (RCE), การรั่วไหลของ environment variables และข้อมูลอ่อนไหว, รวมถึงการได้สิทธิ์ Read/Write บนเรโปมากกว่า 1 ล้านรายการ
- บทความนี้เป็นการวิเคราะห์เชิงลึกของช่องโหว่ที่เปิดเผยในการนำเสนอที่ Black Hat USA และมีคุณค่าอย่างมากในฐานะ กรณีศึกษาจริงของช่องโหว่ในเครื่องมือรีวิวโค้ดและระบบที่เชื่อมต่อกัน
- ช่องโหว่ที่ถูกรายงานได้รับการแพตช์อย่างรวดเร็วทันทีหลังมีการแจ้ง
ภาพรวมของ CodeRabbit
- CodeRabbit เป็น แอปรีวิวโค้ดด้วย AI ที่มีการติดตั้งมากที่สุด ใน GitHub/GitLab Marketplace
- บนทั้งสองแพลตฟอร์มนี้มีการรีวิว 1 ล้านเรโปและ 5 ล้าน pull request
- ทุกครั้งที่ผู้ใช้สร้างหรืออัปเดต PR เอนจิน AI จะวิเคราะห์โค้ดและสร้างคอมเมนต์กับข้อเสนอแนะโดยอัตโนมัติ
- มีผลอย่างมากต่อการเพิ่ม ประสิทธิภาพการพัฒนา เช่น การสรุปโค้ด การตรวจหาช่องโหว่ความปลอดภัย การเสนอแนวทางปรับปรุง และการสร้างไดอะแกรม
การใช้งาน CodeRabbit และโครงสร้างสิทธิ์
- แผน Pro มีฟังก์ชันเชื่อมต่อกับเครื่องมือ linter และ SAST (การวิเคราะห์แบบสถิต)
- เมื่อยืนยันตัวตนด้วยบัญชี GitHub และติดตั้งแอป ผู้ใช้จะมอบ สิทธิ์อ่าน/เขียนแก่เรโปที่เลือก
- หากการจัดการสิทธิ์นี้ถูกนำไปใช้ในทางที่ผิด ก็อาจส่ง ผลกระทบโดยตรง ต่อโค้ดในทุกเรโปที่ติดตั้งไว้ได้
การรันเครื่องมือภายนอกและการค้นพบ exploit
- เมื่อ CodeRabbit ตรวจพบการเปลี่ยนแปลงของโค้ดใน PR ก็จะรัน เครื่องมือวิเคราะห์แบบสถิตภายนอกหลายตัวโดยอัตโนมัติ (เช่น Rubocop)
- Rubocop ถูกออกแบบให้ใช้ไฟล์ตั้งค่า
.rubocop.yml เพื่อ โหลดไฟล์ Ruby ส่วนขยายภายนอก (เช่น ext.rb) ได้
- ผู้โจมตีสามารถแทรกโค้ดอันตรายลงใน
.rubocop.yml และ ext.rb แล้วส่ง PR เพื่อชักนำให้ CodeRabbit รันโค้ดดังกล่าวบนเซิร์ฟเวอร์ระยะไกล
- โค้ดที่ถูกรันด้วยเทคนิคนี้จะ ส่ง environment variables ทั้งหมดของเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์ของผู้โจมตี
การวิเคราะห์เนื้อหาที่รั่วไหลจาก environment variables
- ใน environment variables ที่รั่วไหล มี API key, token และรหัสผ่านของบริการหลากหลายประเภท รวมอยู่ด้วย เช่น
- Anthropic/OpenAI API key, encryption salt/password, private key ของ GitHub App, ข้อมูลการเชื่อมต่อ PostgreSQL เป็นต้น
- ผ่าน RCE จึงอาจเกิด ความเสียหายระลอกสองที่รุนแรงและขยายวงกว้าง เช่น การเข้าถึงฐานข้อมูล การแก้ไขโค้ด และการรั่วไหลของข้อมูลภายในบริการ
- แม้จะสามารถสำรวจเชิงรุกบนเซิร์ฟเวอร์จริงต่อได้มากกว่านี้ แต่ทีมวิจัยได้ตรวจสอบเพียงขั้นต่ำแล้วหยุด เพื่อคำนึงถึงการดำเนินงานของบริการ
การได้สิทธิ์ Read/Write บน 1 ล้านเรโป
- สามารถยืนยันตัวตนกับ GitHub API ได้โดยใช้
GITHUB_APP_PEM_FILE (private key) ที่อยู่ใน environment variables
- ต่อทุกเรโปที่ CodeRabbit เข้าถึงได้ (รวมทั้ง public/private repository)
- สามารถใช้อำนาจสิทธิ์ที่รุนแรงมากได้ เช่น อ่าน/เขียนซอร์สโค้ด แทนที่ไฟล์รีลีส (โจมตีซัพพลายเชน) และแก้ไขประวัติ git
- มีการเผยแพร่ โค้ดสาธิตการทำซ้ำ (PoC) ซึ่งพิสูจน์แล้วว่าสามารถนำไปใช้โจมตีได้จริง
สรุป PoC
- ใช้ไลบรารีอย่าง PyGitHub พร้อม private key, App ID ที่รั่วไหล เพื่อ ออก access token สำหรับเข้าถึงเรโปใดก็ได้
- ด้วย token นี้สามารถทำงานอัตโนมัติได้ เช่น โคลน private repository, แก้ไขไฟล์, สร้าง commit ใหม่ และดัดแปลงไฟล์รีลีส
ความเป็นไปได้ในการเจาะเรโปภายใน/ไม่เปิดเผยของ CodeRabbit
- เนื่องจากองค์กร CodeRabbit เองก็ติดตั้งและใช้งานบริการของตนเองด้วย จึง สามารถเข้าถึงและโคลนเรโปซอร์สโค้ดภายในของ CodeRabbit ได้เช่นกัน
- หากรู้เพียงชื่อองค์กร ก็สามารถค้นหา installation ID แล้วเข้าถึงรายการเรโปนั้นได้ทันที
สรุปผลกระทบ
- การเข้าถึง private repository โดยไม่ได้รับอนุญาตและการรั่วไหลของข้อมูลส่วนบุคคล
- ภัยคุกคามของ การโจมตีซัพพลายเชน เช่น การดัดแปลงซอร์สโค้ด การฝังมัลแวร์/แบ็กดอร์
- ความเป็นไปได้ในการเชื่อมโยงกับช่องโหว่อื่นเพิ่มเติม เช่น GitHub Actions
- RCE โดยตรงอาจนำไปสู่การทำลายข้อมูล การทำให้บริการล่ม และความเสียหายลูกโซ่ต่อบริการอื่น
บริบทและข้อจำกัดของการตัดสินใจด้วย AI
- แม้ในระหว่างการโจมตี ตัว PR เองยังถูกรีวิวโดย CodeRabbit ตามปกติ และ แม้จะมีการทิ้งคอมเมนต์เตือนเรื่องช่องโหว่ แต่ก็ไม่สามารถระบุประโยคที่เป็นภัยคุกคามได้จริง
- สิ่งนี้แสดงให้เห็นว่า เครื่องมือรีวิวโค้ดด้วย AI ไม่ได้เข้าใจบริบทของสถานการณ์เสี่ยงจริงได้ครบถ้วน
การตอบสนองและข้อแนะนำ
- CodeRabbit ปิดการใช้งาน Rubocop, เปลี่ยนข้อมูลลับ และตรวจสอบระบบภายในไม่กี่ชั่วโมงหลังได้รับรายงานช่องโหว่
- ปัญหาเกิดจากเครื่องมือที่ไม่ได้ใช้ sandbox (Rubocop) และหลังจากนั้นได้ปรับปรุงให้ รันเครื่องมือภายนอกทั้งหมดในสภาพแวดล้อมที่แยกออกจากกัน
- เพื่อเสริมความปลอดภัย มีการเน้นย้ำถึงความจำเป็นของ การออกแบบเชิงป้องกัน เช่น ลด environment variables ให้เหลือน้อยที่สุด จำกัด IP ที่เข้าถึงเครือข่ายได้ และปิดกั้นการเข้าถึงอินเทอร์เน็ตในสภาพแวดล้อมที่รันเครื่องมือภายนอก
การเปิดเผยอย่างมีความรับผิดชอบและบทสรุป
- ในเดือนมกราคม 2025 หลังการแจ้ง มีการตอบสนองและดำเนินมาตรการอย่างรวดเร็ว
- แม้จะหยุดไว้ที่ PoC แต่ก็ยืนยันได้ว่าหากเป็นผู้โจมตีจริง ก็สามารถนำไปใช้ในทางที่ผิดได้ง่าย เช่น คัดเลือกเรโปมูลค่าสูง ปล่อย ransomware ในวงกว้าง หรือโจมตีซัพพลายเชนแบบทำลายล้าง
- เรื่องนี้ย้ำอีกครั้งถึงความสำคัญของการใช้ sandbox และหลักสิทธิ์ขั้นต่ำ เมื่อเชื่อมต่อกับ เครื่องมือวิเคราะห์ภายนอกและบริการอัตโนมัติที่ขับเคลื่อนด้วย AI
ยังไม่มีความคิดเห็น