Kant's IT/Vulnerability

Rails 애플리케이션 임의 파일 쓰기 취약 악용 시 원격 코드 실행(RCE) 가능

Kant Jo 2025. 1. 31. 13:00

Rails Apps Arbitrary File Write Vulnerability Let Attackers Execute Code Remotely

 

Rails Apps Arbitrary File Write Vulnerability Let Attackers Execute Code Remotely

A newly exposed vulnerability in Ruby on Rails applications allows attackers to achieve Remote Code Execution (RCE) through a flaw that permits arbitrary file writing.

gbhackers.com

 

  • 개요
    • Ruby on Rails 애플리케이션에서 임의 파일 쓰기(Arbitrary File Write) 취약점 발견
    • 공격자가 악성 파일을 원하는 경로에 저장하여 원격 코드 실행(RCE) 가능
    • Bootsnap 라이브러리의 캐시 시스템을 악용하여 공격 효과 증대
    • 취약점이 포함된 애플리케이션의 경우 즉각적인 보안 조치 필요
  • 취약점 상세 내용
    • 취약점 발생 원인
      • 사용자 입력을 제대로 검증하지 않고 파일 업로드 처리
      • Bootsnap 캐시 구조를 활용한 악성 코드 삽입 가능
      • 애플리케이션이 재시작될 때 악성 코드가 실행
    • 취약 코드 예시
        def save_uploaded_file(uploaded_file, filename)
            upload_path = Rails.root.join("tmp", "uploads")
            FileUtils.mkdir_p(upload_path)
            File.open(File.join(upload_path, filename), 'wb') do |file|
                file.write(uploaded_file.read)
            end
        end
      • 위 코드에서 공격자는 filename조작하여 /tmp/cache/bootsnap 경로에 악성 파일을 저장 가능
      • 이후 애플리케이션이 재시작되면 악성 코드 실행
  • 공격 방식
    • 1단계: 쓰기 가능한 디렉터리 확인
      • Docker 환경에서 /tmp, /rails/tmp 등 제한된 쓰기 가능 경로 탐색
    • 2단계: Bootsnap 캐시 파일 대상 선택
      • Bootsnap은 캐시된 Ruby, YAML, JSON 파일을 저장하는데 이를 변조 가능
    • 3단계: 악성 코드 삽입
      • 공격자가 Bootsnap 캐시 파일에 Ruby 코드 삽입
        `id >&2`  # 현재 사용자 정보 출력
        load("/path/to/original/file")  # 기존 파일을 로드하여 오류 방지
    • 4단계: 애플리케이션 재시작 유도
      • Rails 환경에서 tmp/restart.txt 파일을 생성하여 Puma 서버 재시작
    • 5단계: 원격 코드 실행(RCE) 성공
      • Bootsnap 캐시 파일 로드 시 공격자가 삽입한 악성 코드 실행됨
  • 보안 권고
    • 파일 업로드 보안 강화
      • 파일명을 철저히 검증하고, 디렉터리 이동 공격(Path Traversal) 차단
      • 업로드된 파일을 실행 가능한 위치에 저장하지 않도록 설정
    • 쓰기 가능한 디렉터리 제한
      • Rails 애플리케이션에서 tmplog 디렉터리 외의 쓰기 권한 제한
      • 필요한 경우, 강제 접근 제어(MAC) 정책 적용
    • Bootsnap 캐시 보호
      • Bootsnap 캐시 디렉터리를 읽기 전용으로 설정
      • 캐시가 변경될 경우 자동 무효화하는 보호 메커니즘 도입
    • 취약점 패치 및 모니터링
      • Bootsnap, Rails 및 관련 종속 라이브러리 최신 버전으로 업데이트
      • 애플리케이션 재시작 시 불필요한 캐시 파일 실행 여부 감시
    • Docker 환경 보안 강화
      • 컨테이너 내에서 루트 사용자 대신 비권한(non-root) 사용자 실행
      • 불필요한 시스템 권한을 제한하여 취약점 악용 피해 최소화
  • 결론
    • Bootsnap 캐시 시스템Rails 파일 업로드 취약점결합될 경우 심각한 보안 위협 발생
    • 공격자는 취약점을 악용하여 원격 코드 실행(RCE)을 수행할 수 있으며, 대규모 피해 가능
    • 파일 업로드 처리 시 입력 검증, 쓰기 권한 제한, 최신 보안 패치 적용 필수
    • 보안 담당자 및 개발자는 애플리케이션 코드구성지속적으로 감사(Audit)하여 유사한 취약점 발생을 예방해야 함