• ทีมวิจัยด้านความปลอดภัยสามารถทำ 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น