코드래빗 취약점 익스플로잇: 단순 PR에서 100만 레포 RCE 및 쓰기 권한 획득까지

13 hours ago 4

  • 보안 연구팀이 CodeRabbit의 프로덕션 서버에서 원격 코드 실행(RCE)API 토큰·비밀 정보 유출에 성공함
  • Rubocop을 활용한 PR로 환경 변수 탈취, PostgreSQL 접근과 100만개 레포지토리 읽기/쓰기가 가능했음
  • GitHub App의 프라이빗 키 유출로 퍼블릭/프라이빗 레포 포함 대규모 저장소에 악성코드 주입, 소스 코드 수정 등 실질적 피해가 가능했음
  • CodeRabbit 측은 취약점 신고 후 수시간 내로 즉각 대응하고 보안 조치를 강화했음
  • 외부 도구 실행 시 샌드박스 격리·최소 권한·네트워크 차단 등으로 보안 사고 방지 필요성 강조됨

소개

  • 2025년 1월, Kudelski Security 연구팀은 CodeRabbit의 심각한 보안 취약점을 공개함
  • PR 리뷰 자동화 도구로 널리 쓰이는 CodeRabbit에서 remote code execution(RCE), 환경 변수 및 민감 정보 유출, 100만개가 넘는 레포지토리 Read/Write 권한 확보라는 중대한 문제가 확인됨
  • 이 글은 Black Hat USA에서 발표된 공개 취약점 내용의 상세 분석을 담고 있으며, 코드형 리뷰 도구와 연동 시스템 취약점의 실사례로 참고 가치가 높음
  • 보고된 취약점은 신고 직후 빠르게 패치됨

CodeRabbit 개요

  • CodeRabbit은 GitHub/GitLab Marketplace에서 가장 많이 설치된 AI 기반 코드 리뷰 앱
  • 양대 플랫폼에서 100만개 레포 및 500만 pull request를 리뷰함
  • 사용자가 PR을 생성 또는 갱신할 때마다, AI 엔진이 코드를 분석해 코멘트와 제안을 자동 생성함
  • 코드 요약, 보안 취약점 탐지, 개선점 제시, 다이어그램 생성 등 개발 생산성 향상 효과가 큼

CodeRabbit 사용 및 권한 구조

  • Pro 플랜은 linter·SAST(정적 분석) 도구 연동 기능을 제공함
  • GitHub 계정 인증 및 앱 설치 시 선택한 레포지토리에 읽기/쓰기 권한을 부여하게 됨
  • 이 권한 관리가 만약 악용된다면, 설치된 모든 레포의 코드에 직접적인 영향을 끼칠 수 있음

외부 도구 실행 및 익스플로잇 발견

  • CodeRabbit은 PR 내 코드 변경을 감지하면 다수의 외부 정적분석 도구(예: Rubocop) 를 자동 실행함
  • Rubocop은 .rubocop.yml 설정파일을 사용해 외부 Ruby 확장파일(ext.rb 등) 을 로드할 수 있게 설계됨
    • 공격자는 .rubocop.yml 및 ext.rb에 악성코드를 삽입 후 PR을 제출, CodeRabbit이 원격 서버에서 해당 코드를 실행하도록 유도
  • 이 기법으로 실행된 코드가 서버의 모든 환경변수를 공격자의 서버로 전송

환경 변수 유출 내용 분석

  • 유출된 환경 변수에는 다음과 같은 다양한 서비스의 API Key, 토큰, 암호 등이 포함되어 있었음
    • Anthropic/OpenAI API 키, Encryption salt/password, GitHub App 프라이빗 키, PostgreSQL 접속정보 등
  • RCE를 통해 데이터베이스 접근, 코드 변경, 서비스 내부 정보 유출 등 2차 피해가 크고 파급력이 높음
  • 실서버에서 악의적 탐색을 더 진행할 수 있었으나, 서비스 운영을 고려해 최소한만 확인 후 중단

100만개 레포지토리 Read/Write 권한 획득

  • 환경 변수에 포함된 GITHUB_APP_PEM_FILE(프라이빗 키) 를 이용해 GitHub API에 인증 가능
  • CodeRabbit이 접근 가능한 모든 저장소(퍼블릭/프라이빗 포함)에 대해
    • 소스코드 읽기/쓰기, 릴리즈 파일 대체(공급망 공격), git 이력 변경 등 매우 강력한 권한 행사 가능
  • 재현 코드(PoC) 가 공개되어 실제로 악용 가능성이 입증됨

PoC 요약

  • PyGitHub 등의 라이브러리를 사용하여 유출된 프라이빗 키, App ID 등으로 임의의 레포지토리 액세스 토큰을 발급
  • 이 토큰을 통해 프라이빗 레포지토리 복제, 파일 변경, 신규 커밋, 릴리즈 파일 변조 등이 자동화 가능함

CodeRabbit 사내/비공개 레포지토리 침해 가능성

  • CodeRabbit 조직 역시 자사 서비스에 설치하여 사용 중이므로, CodeRabbit의 내부 소스코드 레포삭 접근 및 복제도 가능했음
  • 조직 이름만 알면 설치 ID 조회 후 곧바로 해당 레포 목록에 접근하는 것이 가능함

영향 요약

  • 프라이빗 레포지토리 무단 접근·개인정보 유출
  • 소스코드 조작, 악성코드/백도어 삽입 등 공급망 공격 위협
  • GitHub 액션 등의 추가 취약점 연계 가능성
  • 직접적 RCE로 인한 데이터 파괴, 서비스 마비, 타 서비스 연쇄 피해 초래

맥락과 AI 판단의 한계

  • 공격 중에도 PR 자체는 CodeRabbit에 의해 정상적으로 리뷰되고, 취약점 경고 코멘트를 남기긴 했으나 실제로는 위협 구문을 식별하지 못함
  • "AI 코드 리뷰 도구"가 실제 위험상황 맥락까지 파악하진 못한다는 점을 보여줌

대응 및 권고사항

  • CodeRabbit은 취약점 신고 수시간 내 Rubocop 비활성화, 비밀 정보 교체, 시스템 감사를 수행
  • 샌드박스 미 적용 도구(Rubocop)에서 문제 발생, 조치 후 모든 외부 도구를 격리 환경에서 실행하도록 개선
  • 보안 강화를 위해, 외부 도구 실행환경에 환경 변수 최소화, 네트워크 접근 IP 제한, 인터넷 접근 차단 등 방어적 설계 필요성 강조

책임 있는 공개와 결론

  • 2025년 1월, 신고 후 신속한 대응과 조치가 이루어짐
  • PoC만으로 그쳤으나, 악의적 공격자라면 고가치 레포 선별, 대규모 랜섬웨어, 파괴적 공급망 공격 등에 쉽게 악용 가능성 확인
  • 외부 분석 도구·AI 기반 자동화 서비스와 연계 시, 샌드박스 및 최소 권한 원칙 구현의 중요성이 재확인됨

Read Entire Article