AI 코드 리뷰 도구 CodeRabbit에서 발견된 치명적 보안 취약점과 그 해결 과정
AI가 개발자를 돕는 시대, 그 편리함만큼이나 새로운 보안 위협도 함께 성장하고 있습니다. 오늘은 GitHub·GitLab에서 가장 많이 설치된 AI 코드 리뷰 툴 ‘CodeRabbit’에서 실제로 발견된 원격 코드 실행(RCE) 및 API 토큰·데이터베이스 접근 권한 유출 사고 사례를 통해, 최신 SaaS 서비스가 어떻게 취약점을 노출할 수 있는지, 그리고 이를 탐지·공개·대응하는 과정에서 배울 수 있는 실전 보안 인사이트를 살펴봅니다.
CodeRabbit의 기능과 인기 이유
‘CodeRabbit’은 개발자가 작성한 코드 변경(PR)을 AI가 자동으로 리뷰해 주는 도구입니다. PR 요약, 보안 취약점 탐지, 코드 개선 제안, 간단한 다이어그램 생성까지 지원해 개발자들의 시간을 크게 절약해 줍니다. 실제로 GitHub, GitLab 통합 앱 중에 최상위 설치량을 자랑하며, 100만 개가 넘는 저장소에서 사용 중입니다. 설정 시 깃허브 계정과 연동하며, 선택한 저장소에 ‘읽기·쓰기’ 권한을 획득합니다.
외부 분석 도구 실행이 불러온 위험
CodeRabbit은 깃허브에 있는 여러 분석 도구(린터, SAST 등)를 연동해 자동화된 코드 검사 기능을 지원합니다. 문제는 그 중 일부 도구가 사용자가 제공한 설정 파일을 읽어들이는데, 이 과정에서 ‘임의 코드 실행’ 가능성이 열려 있다는 점입니다. 특히 Ruby 기반의 Rubocop 도구는 설정파일(.rubocop.yml)에서 외부 Ruby 스크립트(ext.rb) 경로를 지정하면 해당 파일을 실행하게 되어 있습니다. 만약 악의적 스크립트를 포함한 PR을 제출하면 CodeRabbit 서버에서 실제로 코드가 실행됩니다.
환경 변수 탈취로 대량의 비밀 정보 유출
실제로 악의적인 .rubocop.yml과 ext.rb 파일을 담아 PR을 생성하자, CodeRabbit 서버에서 Rubocop이 실행되며 서버의 환경변수를 외부로 전송하는 코드가 정상적으로 동작했습니다. 결과적으로 OpenAI, Anthropic, GitHub, GitLab, Jira, Pinecone 등 다양한 API 키와 DB 계정, 암호화 키 등 서비스 핵심 데이터를 한 번에 탈취할 수 있었고, 이는 SaaS 전체를 흔드는 대형 사고로 이어질 뻔했습니다.
100만 깃허브 저장소의 읽기·쓰기 권한 오남용 위험
특히 서버 환경 변수 중에는 CodeRabbit 자체 깃허브 앱의 ‘개인키(PEM 파일)’도 포함되어 있었는데, 이 키를 이용하면 앱이 사용자로부터 부여받은 모든 저장소(공개·비공개 포함)에서 GitHub API를 통한 읽기·쓰기는 물론, PR 작성, 릴리즈 파일 교체 등 치명적인 행위를 자동화할 수 있습니다. 실제 코드랩잇 사용하는 조직 및 개인 계정, 그리고 기업의 비공개 저장소까지 공격자가 손쉽게 접근·수정·데이터 유출이 가능한 구조였습니다.
실제 공격 시나리오 및 증명(PoC) 코드
공격자는 PyGitHub 등 라이브러리를 이용해, 유출된 App ID와 개인키로 인증 후, 모든 설치 계정 목록과 저장소 목록을 열람·접근할 수 있습니다. 10분 단위로 토큰 갱신이 가능해 장기적·연속적 공격도 가능합니다. 실제로 CodeRabbit 개발 조직의 비공개 저장소까지 클론할 수 있는 것이 증명되었습니다.
근본 원인과 대응책: 격리 환경에서의 외부 도구 실행
이 취약점의 핵심 원인은 외부 분석 도구가 서버의 모든 환경 변수 및 네트워크를 자유롭게 활용할 수 있었던 점입니다. 근본적 보안 방안으로는, 반드시 외부 도구와 코드를 ‘격리된 샌드박스 환경’에서 실행하고, 불필요한 네트워크·환경 변수 노출을 최소화해야 합니다. 또한 툴이 외부로 데이터를 전송하는 경우 화이트리스트 기반 통신 제한이 필수입니다.
CodeRabbit의 빠른 대처와 책임 있는 공개
취약점 공개 후, CodeRabbit은 문제를 즉각 파악하여 Rubocop 연동을 잠정 중지시키고, 모든