OpenAI Codex, 브랜치 이름으로 GitHub 토큰 탈취 시도!

by DD
2개월 전
조회수 30

OpenAI Codex에서 브랜치 이름(Branch Name) 조작을 통한 GitHub OAuth 토큰 탈취 취약점이 발견됨

공격자는 GitHub API를 활용하여 악성 브랜치를 생성하고, Codex 사용자의 토큰을 탈취함

${IFS} 변수를 활용한 우회 기법과 유니코드(Unicode) 문자를 이용한 은폐 기술이 사용됨

코드 리뷰(Code Review) 기능을 통한 토큰 탈취 시도 및 CLI 자격 증명(Credentials) 평문 저장 문제도 드러남

명령 주입(Command Injection) 취약점 분석

OpenAI Codex는 GitHub 저장소(Repository)에 연결하여 작업을 수행하는 과정에서, 브랜치 이름(Branch Name)을 쉘 명령어로 직접 사용하면서 명령 주입(Command Injection) 취약점에 노출되었다. 특히, `git fetch` 명령 실행 시 브랜치 이름을 입력값 검증(Input Validation) 없이 사용하면서 임의의 쉘 명령 실행이 가능했다. 공격자는 `;` 및 `${IFS}`와 같은 쉘 메타 문자를 활용하여 GitHub OAuth 토큰(OAuth Token)을 탈취했다.

GitHub API를 이용한 자동화된 공격

공격자는 GitHub API를 사용하여 악성 브랜치를 생성하고, 해당 브랜치를 대상으로 Codex 작업을 실행하도록 유도했다. 이 과정에서 사용자는 별도의 조작 없이 GitHub OAuth 토큰(OAuth Token)을 탈취당했다. 특히, ${IFS} 변수를 활용하여 GitHub의 브랜치 이름 제한을 우회하고, 유니코드(Unicode) 문자를 사용하여 악성 코드를 은폐하는 기술이 사용되었다. 이는 지속적인 위협(Persistent Threat)으로 작용할 수 있다.

코드 리뷰(Code Review) 기능의 취약점

OpenAI Codex의 코드 리뷰(Code Review) 기능 또한 공격에 악용될 수 있었다. GitHub 풀 리퀘스트(Pull Request)에서 `@codex`를 언급하면, 해당 코드를 검토하는 컨테이너가 악성 브랜치를 참조하여 공격이 실행되었다. 이 경우, 사용자 OAuth 토큰(OAuth Token) 대신 GitHub 설치 액세스 토큰(Installation Access Token)이 탈취될 수 있으며, 이는 조직 전체의 권한을 위협할 수 있다.

평문(Plaintext)으로 저장된 CLI 자격 증명(Credentials)

Codex CLI, SDK, IDE 확장 프로그램은 OpenAI API 키(API Key), 액세스 토큰(Access Token), 리프레시 토큰(Refresh Token), 계정 식별자를 평문(Plaintext)으로 저장했다. macOS/Linux에서는 `~/.codex/auth.json`에, Windows에서는 `%USERPROFILE%\.codex\auth.json`에 저장되어, 자격 증명(Credentials) 유출 위험을 높였다. 이는 공격자가 탈취된 토큰을 사용하여 Codex API에 접근하고, 작업 내역 및 GitHub 토큰(GitHub Token)을 추가적으로 탈취할 수 있게 한다.

OpenAI Codex: How a Branch Name Stole GitHub Tokens via Command Injection