OpenAI Codex, 브랜치 이름으로 GitHub 토큰 탈취 시도!
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)을 추가적으로 탈취할 수 있게 한다.