OpenAI Patches ChatGPT Data Exfiltration Flaw and Codex GitHub Token Vulnerability
OpenAI Patches ChatGPT Data Exfiltration Flaw and Codex GitHub Token Vulnerability
https://www.beyondtrust.com/blog/entry/openai-codex-command-injection-vulnerability-github-token
비슷하게 올라온 2개의 기사를 같이 확인해보았다.
일단 본문 내용 해석부터.
OpenAI ChatGpt의 취약점으로 인해 사용자의 동의나 인지 없이 민감한대화 데이터가 유출될 수 있는 취약점이 발견됨.
문제 상황
-
원래는 무단 데이터 공유를 방지하거나 직접적인 외부 네트워크 요청을 생성하지 않도록 다양한 안전장치를 갖추고 있다.
-
하지만 Linux 런타임에서 발생하는 side channel을 악용하여 이러한 안전장치를 우회한다.
더보기
side channel 이란?
프로그램이나 시스템의 직접 출력 X -> 비기능적 특성이나 간접적 흔적을 관찰 및 악용해 비밀 정보를 추론하는 통
기사에서 든 예시로는
숨겨진 DNS 기반 통신 경로를 covert transport mechanism으로 악용하여 DNS 요청에 정보를 인코딩할 수 있다.
-> 사용자가 무료로 프리미엄 기능을이용 & 악성 프롬프트를 붙여넣도록 유도할 수 있음.
더 큰 공격으로 악성 로직을 GPT 자체에 포함시킬 수 있다.
위의 설명을 한 이유. 뒤에 있는 Github 토큰 유출 사건 사례 때문!
Codex에서 command injection이 발견되었다. 하여 해당 취약점 때문에 Github 데이터 탈취를 당한 사건.
더보기
command injection.
애플리케이션이 외부 입력값을 포함해 OS 명령어를 만들 때, 특수 문자나 명령 구분자를 제대로 제거하지 않아 공격자가 의도하지 않은 운영체제 명령을 실행하게 만드는 취약점이다.
그래서 왜?? 왜 그렇게 당했는데.
보통 Codex, Claude를 사용하다 보면 github push도 알아서 해달라고 하는 경우가 많다. 진짜 귀찮으면 이제 Token에 대한 값도 전달하게 된다.
사용자 → Codex에 GitHub 권한 부여 → Codex가 컨테이너 생성 → GitHub repo/branch clone → 작업 수행
보통 이런 형식으로 간다.
이제 여기서 공격이 들어가는 부분은 Github branch name parameter가 제대로 검증을 하지 않고! shell 명령어에 문자열로 삽입하는것 이다.
=> 풀어서 쓰기.
git fetch origin {branch} 가 원래 명령어면 git fetch origin main 그 다음 {추가_명령어 실행} 이 되는 형식이다.
\
그러면 이걸 어떻게 공격자가 활용하냐?
-
공격자는 Github 저장소에 악성 브랜치를 만들거나 기존 브랜치를 조작하여 shell 문자, 악성 문자 등을 숨긴다.
-
그 후 위에 ㅇ올린 것 처럼 main + ..... 으로 악성 스크립트를 넣게 되는 것 이다.
그러면 Codex가 해당 작업을 실행하면서 뒤에 있는 작업을 실행하게 되는 것이다 .. .
그래서 명령어 실행까지는 OK. 그러면 이걸로 어떻게 GitHub 토큰까지 훔칠 수 있는데?
-
Codex가 Github 저장소를 clone하려면 인증이 필요함.
-
setup 단계에서 OAuth token OR git remote URL을 clone 과정에서 사용.
-
Branch 파라미터가 environment setup cript와 remote configuration에 반영되는 것을 확인.
-
command injection payload를 통해 git remote URL 안의 OAuth token을 파일로 출력
-
Codex agent가 그것을 읽어 cleartext token을 얻음.
해당 공격을 시나리오화 해보면
룰루랄라 사람이 codex와 바이브 코딩을 하다가 Reference로 쓰일 좋은 레포가 보여서 해당 레포에 url을 주거나, 환경 설정을 하던 중 해당 github를 clone하고 사용하게 됨.
그러다가 이상한 브랜치에 대한 것도 읽어버리면서 해당 브런치 뒤에 있는 명령어를 수행하면서 공격자의 서버로 자신의 repo 토큰들을 보내게 됨.
그러면 공격자는 해당 Token을 사용하면서 해당 토큰에 있는 권한을 사용하여 read/write를 수행할 수 있게 된다..
GPT의 한 줄요약
사용자가 Codex로 신뢰되지 않은 GitHub 저장소나 브랜치를 작업 대상으로 삼았고, Codex의 setup shell이 악성 브랜치 이름을 안전하게 처리하지 못하면서 명령어가 실행되어 GitHub OAuth 토큰이 탈취된 공격이다.