GitHub Ruby 애플리케이션의 심각한 취약점 및 비밀 관리 전략

[EN] Keeping Secrets: Lessons Learned From Securing GitHub / @lyninx @Creastery

3줄 요약

  • GitHub의 Ruby on Rails 애플리케이션에서 `send` 메서드 오용으로 인한 치명적인 취약점이 발견되어 프로덕션 환경 변수 및 민감한 비밀 정보가 노출되었습니다.
  • 이 취약점은 Marshall 역직렬화와 결합하여 원격 코드 실행(RCE)으로 이어질 수 있었으며, GitHub은 신속한 대응과 패치를 통해 위험을 완화했습니다.
  • 본 발표는 안전한 Ruby 코드 작성, 코드 스캐닝 도구 활용, 그리고 효과적인 비밀 관리 전략의 중요성을 강조합니다.

GitHub 보안 팀과 Praetorian 보안 엔지니어는 RubyKaigi에서 'Keeping Secrets: Lessons Learned from Securing GitHub'을 발표했습니다. 이 발표는 GitHub Ruby on Rails 애플리케이션에서 발견된 치명적인 취약점과 이에 대한 GitHub의 방어적 대응, 그리고 모든 Ruby 개발팀이 보안 태세를 강화하고 비밀을 안전하게 관리하기 위한 실질적인 교훈을 공유합니다. 특히 Ruby의 동적 기능인 `send` 메서드 오용의 위험성과 환경 변수 관리의 중요성이 핵심적으로 다루어졌습니다.

취약점은 GitHub Enterprise Server의 repository_items_view_component에서 사용자 입력에 대한 send 메서드의 검증 없는 호출로 발생했습니다. 공격자는 이를 통해 network_file_system_check 메서드를 악용, GitHub.com 프로덕션 컨테이너의 모든 환경 변수 및 민감한 비밀 정보(예: 커밋 서명 키, 클라우드 접근 키)를 노출시켰습니다. 유출된 enterprise_session_secretGH_VENDOR_COOKIE의 Marshall 역직렬화 취약점을 결합하여 GitHub Enterprise Server에서 원격 코드 실행(RCE)까지 가능했습니다.

GitHub은 신고 접수 후 즉각적인 비상 대응 체제를 가동하여 취약점을 신속히 처리했습니다. send 대신 직접 메서드 호출 및 컨트롤러 입력 유효성 검사 강화로 코드를 패치하고, git RPC 프로세스에 전달되는 환경 변수 범위를 최소화했습니다. Marshall을 사용하는 GH_VENDOR_COOKIE도 제거했습니다. 사후 조치로 노출된 모든 비밀을 교체하고, CodeQL 변형 분석을 통해 유사 취약점을 탐지, CVE 발행 및 패치 배포로 투명하게 공개했습니다.

발표는 send, Marshall 등 강력한 Ruby 기능 사용 시 보안 위험을 신중히 고려하고, public_send 같은 안전한 대안 및 철저한 사용자 입력 유효성 검증을 강조합니다. Brakeman, RuboCop, CodeQL 등 코드 스캐닝 도구의 정기적인 활용을 권장합니다. 비밀 관리 측면에서는, 비밀 노출 시 신속한 대응을 위한 자동화된 로테이션 플레이북 마련의 중요성과 함께, 네트워크 비밀 저장소(예: HashiCorp Vault)를 활용한 감사 추적, 최소 권한 원칙, 버전 관리를 제안했습니다.

이 발표는 GitHub과 같은 대규모 서비스에서도 예상치 못한 취약점이 발생할 수 있으며, 강력한 언어 기능의 부주의한 사용이 심각한 보안 문제로 이어질 수 있음을 명확히 보여줍니다. 효과적인 방어 전략, 견고한 코드 스캐닝 프로세스, 그리고 체계적인 비밀 관리 시스템의 중요성을 강조하며, 이는 모든 규모의 Ruby 개발팀에게 귀중한 보안 지침을 제공합니다. 궁극적으로, 지속적인 보안 학습과 경각심, 그리고 개발 단계부터 보안을 고려하는 'Shift-Left' 접근 방식이 안전하고 견고한 소프트웨어를 구축하는 데 필수적임을 시사합니다.