연구원, Claude로 OpenAI 내부 코드 저장소 침투

보안 스타트업 Hacktron AI의 연구원 3명, Harsh Jaiswal, Mohan Pedhapati, Rahul Maini는 7월 말 Anthropic의 Claude Opus 5를 이용해 익스플로잇 체인을 구성해 OpenAI의 개발자 포럼에서 OpenAI 내부 코드 저장소까지 침투했다. 팀은 9월 13일 자사 블로그에 전체 과정을 공개했고, 이번 주 월스트리트저널과 The Information이 잇따라 보도하면서 더 널리 알려지게 됐다.

이 체인은 이미지 한 장에서 시작해 OpenAI의 메인 저장소인 openai/openai에서 끝났다. 연구원들은 증거로 민감한 데이터는 건드리지 않은 채 무해한 풀 리퀘스트(#1186742)를 그 안에 열었다.

HEIF 이미지 한 장으로 뚫린 포럼

OpenAI의 개발자 포럼 community.openai.com은 Discourse에서 구동된다. Discourse가 기본 제공하는 이미지 라이브러리는 HEIF 형식을 인식하지 못해, 이 형식으로 업로드된 파일은 ImageMagick으로 넘겨지고 ImageMagick은 다시 libheif를 호출해 디코딩한다.

문제는 libheif에 있었다. 힙 버퍼 오버플로 취약점이 있었는데, Debian 저장소에 포함된 1.19.7 버전은 해당 보안 패치를 백포트받지 못한 상태였다. 연구원들은 이를 이용해 악성 HEIF 이미지를 만들었고, 업로드하자 포럼 서버에서 원격 코드 실행 권한을 얻었다. Hacktron에 따르면 영향을 받는 libheif 버전은 1.19.7부터 1.23.x까지이며 여러 리눅스 배포판에 걸쳐 있다.

포럼 서버를 장악한 것은 첫걸음에 불과했다. 서버에는 로그인한 사용자들의 인증 토큰이 저장돼 있었는데 여기에는 OpenAI 직원도 포함돼 있었다. 연구원들은 이 포럼 토큰 일부가 ChatGPT에도 그대로 쓸 수 있다는 것을 발견했다. Hacktron은 블로그에서 이 점을 특히 강조했다.

"The vulnerability to escalate is not Discourse-specific. It is an OpenAI SSO issue"

권한 상승에 쓰인 취약점은 Discourse 고유의 문제가 아니라 OpenAI 싱글사인온(SSO)의 문제였다.

이 틈을 이용해 연구원들은 여러 직원의 ChatGPT와 Codex 계정을 장악했다. 한 직원의 Codex는 OpenAI의 GitHub 조직과 연결돼 있었고, 연구원들은 이 Codex에 프롬프트를 보내 내부 저장소에 풀 리퀘스트를 열도록 했다. Hacktron에 따르면 같은 SSO에는 Slack과 이메일 등의 서비스도 연결돼 있었지만 그쪽은 건드리지 않았다고 한다.

Opus 4.8은 실패, Opus 5는 3시간 만에

블로그에서 가장 많이 다룬 부분은 모델의 역할이다. libheif의 이 오버플로는 ASLR(주소 공간 배치 무작위화)이 켜진 환경에서는 악용하기 어려워서, 팀은 이전에 Claude Opus 4.8로 여러 차례 시도했지만 성공하지 못했다.

"Opus 4.8 struggled across several sessions to produce a working exploit with ASLR enabled. Within hours of Opus 5's release, we gave it the same problem and it succeeded."

Opus 4.8은 ASLR이 켜진 상태에서 작동하는 익스플로잇을 만드는 데 여러 세션에 걸쳐 애를 먹었다. Opus 5가 출시되고 몇 시간 만에 같은 문제를 줬더니 성공했다.

팀이 제시한 타임라인에 따르면 Opus 5는 7월 24일 출시됐고, 모델은 약 3시간 만에 먼저 로컬 ARM64 환경에서 작동하는 익스플로잇을 작성한 뒤, Discourse 서버가 실제로 쓰는 x86-64와 jemalloc 환경으로 이식했다. 연구원들은 Claude를 자율 루프에 넣고 자체적으로 구축한 Discourse Cloud 인스턴스를 상대로 반복 시도하게 했으며, 다음 날 아침 확인했을 때 이미 코드 실행 권한을 얻어 증거로 /etc/hosts를 읽어낸 상태였다. 같은 스크립트는 그대로 OpenAI의 인스턴스에서도 통했다.

발견부터 침투까지 약 72시간이 걸렸다. Hacktron에 따르면 'HEIF Heist'라 부르는 이번 연구 전체에 든 토큰 비용은 3000달러 미만이었다.

이 회사가 Claude로 익스플로잇 코드를 작성한 것은 이번이 처음이 아니다. 이전에는 Claude Opus로 Chrome 취약점 익스플로잇을 작성한 사례를 정리한 글을 낸 적이 있는데, 당시 결론은 모델이 대부분의 작업을 해낼 수 있지만 핵심 단계는 사람이 밀어붙여야 한다는 것이었다. 이번에 포럼에서 코드 저장소까지 이어진 전체 체인에서는 사람의 작업량이 눈에 띄게 줄었고, 팀의 설명에 따르면 Discourse 관련 익스플로잇 코드는 거의 모델 혼자서 완성했다고 한다.

패치와 포상금

OpenAI의 대응 속도는 느리지 않았다. 연구원들이 7월 25일 신고한 뒤 OpenAI는 약 14시간 만인 같은 날 22시 49분(UTC)에 패치를 확정했다. Discourse 쪽은 일요일에 신고를 접수했다고 확인했고 다음 월요일에 패치를 내놓았다. 9월 1일 OpenAI는 6500달러의 버그 바운티를 지급했다.

지금까지 공개된 것은 Hacktron 쪽의 설명뿐이다. OpenAI가 패치 전 이 포럼 서버의 접근 기록을 조사했는지, 같은 체인을 악용한 다른 사람이 있었는지, 직원 토큰이 일괄 무효화됐는지는 기사 작성 시점까지 공개되지 않았다.

개발자 입장에서 대조해 볼 만한 지점이 두 가지 있다. 하나는 Discourse나 Discuz 같은 커뮤니티를 직접 운영하는 팀이라면, 이미지 처리 과정에 쓰이는 ImageMagick과 각종 디코더 라이브러리의 패치가 본체 프로그램보다 뒤처지는 경우가 많다는 점이다. 다른 하나는 포럼과 티켓 시스템, 핵심 제품을 같은 싱글사인온으로 묶어둔 기업이라면, 주변 서비스가 뚫렸을 때 토큰이 얼마나 멀리까지 통하는지는 그 SSO의 권한 범위를 얼마나 좁혀뒀는지에 달려 있다는 점이다.

참고 출처: Hacktron AI 기술 블로그, 월스트리트저널, CocoLoop, The Information; 익스플로잇 체인, 72시간 타임라인, 14시간 만의 패치, 6500달러 포상금과 3000달러 미만의 토큰 비용은 모두 Hacktron 블로그 게시물에서 확인됐다.