GitHub, 단일 푸시로 서버 RCE? 워크플로우 보안 점검 필수!

by DD
1개월 전
조회수 0

GitHub의 git proxy인 babeld에서 발생하는 RCE 취약점(CVE-2026-3854)이 발견되었으며, GitHub.com은 패치 완료.

GitHub Actions 워크플로우(Workflows)에서 사용자 입력값에 대한 적절한 검증 부재로 인한 스크립트 주입(Script Injection) 취약점이 존재함.

저자는 GitHub Actions 워크플로우를 감사하여 취약한 코드 패턴(Vulnerable Code Pattern)을 발견하고, 환경 변수 사용 및 적절한 인용구(Quoting)를 통해 해결함.

워크플로우 상속 문제(Workflow Inheritance Problem)를 핵심 원인으로 지적하며, 근본적인 해결책 마련을 촉구함.

CVE-2026-3854: GitHub의 git proxy babeld 취약점 분석

CVE-2026-3854는 GitHub의 내부 git proxy인 babeld에서 발생한 취약점으로, 사용자 제공 푸시 옵션(Push Options)을 적절히 검증하지 않아 발생한다. 기술적으로 보면, 악의적인 푸시 옵션을 통해 RCE(Remote Code Execution)가 가능하며, 멀티 테넌트(Multi-tenant) 환경에서 데이터 격리(Data Isolation)를 침해할 수 있다. GitHub는 해당 취약점을 패치했지만, GHES(GitHub Enterprise Server) 사용자는 최신 버전으로 업그레이드해야 한다.

GitHub Actions 워크플로우(Workflows)의 스크립트 주입(Script Injection) 취약점

저자는 GitHub Actions 워크플로우에서 사용자 입력값(Pull Request Body, Branch Name 등)을 검증 없이 쉘 스크립트에 삽입하는 경우, 스크립트 주입(Script Injection) 취약점이 발생할 수 있다고 지적한다. 특히, `run:` 블록 내에서 `${{ ... }}` 표현식을 사용하여 외부 입력을 직접 사용하는 경우 취약하다. 실제 사례로는, 악의적인 PR 본문을 통해 RCE(Remote Code Execution)가 가능하며, 이는 데이터 미저장 정책(Zero-Retention Policy)을 우회하는 결과를 초래할 수 있다.

워크플로우 상속 문제(Workflow Inheritance Problem)와 근본적인 해결책

저자는 GitHub Actions의 근본적인 문제로 워크플로우 상속 문제(Workflow Inheritance Problem)를 제시한다. 워크플로우는 실행 시, 해당 저장소(Repository)의 신뢰성을 상속받지만, 외부에서 제공된 문자열을 신뢰하는 데서 문제가 발생한다. 즉, 신뢰 경계(Trust Boundary)가 제대로 설정되지 않아, 공격자가 제어 가능한 입력값을 통해 권한 있는 실행 환경에 접근할 수 있다. 따라서, 근본적인 해결을 위해서는 파서(Parser) 레벨에서 입력값 검증을 강화해야 한다.

GitHub Actions 워크플로우(Workflows) 감사 및 보안 강화 방법

저자는 자신의 GitHub Actions 워크플로우를 감사하여, 12개 중 5개의 워크플로우에서 취약점을 발견했다. 해결 방법으로, 환경 변수(Environment Variables)를 사용하고, 적절한 인용구(Quoting)를 적용하여 사용자 입력을 안전하게 처리하도록 권고한다. 특히, `pull_request`, `head_ref`, `body`, `title` 등 사용자 제어 가능한 입력값을 사용할 때는 반드시 이러한 방법을 적용해야 한다. 이는 스크립트 주입(Script Injection) 공격을 방지하는 데 필수적이다.

now what? Github is insecure on push, CVE-2026-3854.