CVE(Common Vulnerabilities and Exposures)는 공개적으로 알려진 사이버 보안 취약점을 식별하고 분류하는 프로그램입니다. 이는 소프트웨어 내의 약점이 악용되어 기밀성, 무결성, 가용성에 부정적인 영향을 미칠 수 있는 사건을 의미합니다. RubyGems는 지난 20년간 수많은 CVE에 직면했습니다.
초기 사례로 CVE-2007-0469는 RubyGems 0.9.1 이전 버전에서 extract_files
함수가 파일 존재 여부를 확인하지 않아 임의 파일 덮어쓰기 및 코드 실행이 가능했던 디렉토리 탐색 취약점을 보여줍니다. 이는 신뢰할 수 없는 입력에 대한 검증 부족에서 비롯되었습니다.
더 심각한 사건은 2013년 rubygems.org 침해였습니다. exploit
이라는 젬이 푸시되어 원격 코드 실행(RCE)이 발생, 서버 설정 파일이 유출되고 rubygems.org 인프라 전체를 재구축해야 했습니다. 이 사건의 근본 원인은 YAML 원격 코드 실행 취약점이었으며, 침해 여부 확인을 위해 S3 체크섬 비교, 미러 검증, 데이터베이스 덤프 확인 등 광범위한 조사가 이루어졌습니다. 당시의 열악한 서버 환경(컨테이너 부재, 장기간 미재부팅 VPS)도 문제를 심화시켰습니다.
RubyGems 자체에서는 디렉토리 탐색(심볼릭 링크, 악성 젬 이름), 임의 YAML 역직렬화, 터미널 제어 문자 삽입, 크로스 사이트 스크립팅(XSS), 다양한 서비스 거부(DoS) 공격(예: ReDoS, 긴 문자열 처리, 음수 길이 파일 처리)과 같은 취약점들이 지속적으로 발견되었습니다. Bundler 또한 소스 의존성 혼동(오타 젬 다운로드, 비공식 서버 사용), 셸 주입 버그(bundle install 시 임의 명령 실행) 등의 고유한 취약점을 가졌습니다. rubygems.org는 콘텐츠 덮어쓰기, 캐시 오염, 접근 제어 우회, MFA 없는 비밀번호 재설정, 임의 YAML 역직렬화, 다양한 DoS 공격(폭탄 압축 해제) 등에 시달렸습니다.
Ruby Central은 이러한 보안 위협에 대응하기 위해 체계적인 노력을 기울이고 있습니다. HackerOne을 통한 취약점 보고 프로그램 운영, 수백 건의 보고서 처리 및 실제 문제 해결, 서드파티 보안 감사, 악성 젬 발행 및 타이포스쿼팅과 같은 실제 공격에 대한 대응, 비정상적인 트래픽 및 서비스 중단 모니터링 및 조치 등이 포함됩니다. 취약점 발견 시 보고-분류-긴급 조치-수정-검증-영향 평가-백포팅-공개로 이어지는 표준화된 라이프사이클을 따릅니다. 또한, Sigstore, Trusted Publishing과 같은 프로젝트를 통해 Ruby 패키징 생태계 전반의 소프트웨어 공급망 보안 강화를 목표로 합니다. 이 모든 노력은 AWS, Shopify 등 후원사 및 기부자의 지원을 통해 가능합니다.