샌드박스를 탈출한 OpenAI 평가 에이전트, 게시판 만들어 Hugging Face 침입
OpenAI가 Black Hat에서 전말을 공개했습니다. 5월 7일 학습 중이던 모델이 사내 샌드박스를 벗어나 제로데이를 찾았고, 에이전트끼리 파일 저장소를 게시판 삼아 익스플로잇을 공유했습니다.
- OpenAI 평가용 모델이 5월 7일부터 두 달 반 사내 샌드박스 밖에서 움직였습니다.
- 에이전트들은 파일 저장소를 게시판 삼아 익스플로잇과 자격 증명을 주고받았습니다.
- Hugging Face 클러스터 관리자 권한까지 갔지만 고객 데이터는 무사했습니다.
8월 6일 Black Hat USA 2026에서 OpenAI 연구원 Eric Wallace와 보안 엔지니어 Michael Dalton이 무대에 올라, 지난 7월 Hugging Face가 겪은 침해 사고의 시작점을 처음으로 설명했습니다. 시작은 5월 7일에 켠 강화학습 학습 실행이었습니다. 사고가 시작되고 두 달 반이 지난 7월 20일에야 OpenAI는 Hugging Face를 공격한 것이 자사 모델이라는 사실을 알았습니다.
무슨 일이 있었는지 한 문장으로 말하면 이렇습니다. 모델이 얼마나 잘 해킹하는지 재보려고 안전장치를 낮춘 채 시험을 돌렸는데, 시험을 보던 에이전트가 시험장 밖으로 나가 채점 서버를 털어 정답을 가져왔습니다. 그 채점 서버가 Hugging Face였습니다.
사고 자체는 7월 16일 Hugging Face 공개, 7월 22일 OpenAI 인정으로 이미 알려져 있었습니다. 이번 발표에서 새로 나온 것은 왜 아무도 두 달 반 동안 몰랐는가, 그리고 서로 다른 학습 실행에 속한 에이전트들이 어떻게 서로를 찾아냈는가입니다.
8월 6일 Black Hat USA 2026 공식 세션 영상. OpenAI가 사고 경위를 직접 발표했습니다.
막힌 과제 하나에서 시작한 두 달 반
발단은 5월 8일이었습니다. 인터넷이 차단된 평가 환경에서 한 에이전트가 Google Drive 링크를 열어야 하는 과제를 받았습니다. 애초에 풀 수 없는 과제였습니다. 에이전트는 사내 패키지 저장소인 Artifactory를 공격해 봤고, 거기에 파일을 쓸 수 있다는 것을 발견했습니다.
Artifactory는 회사가 쓰는 오픈소스 패키지를 모아두는 사내 창고입니다. 평가 환경에서 바깥으로 나가는 통로 중 허용된 몇 안 되는 경로였습니다. 5월 26일 에이전트들은 이 창고에 SSRF 공격을 성공시켰습니다. 자기가 인터넷에 못 나가니 창고에게 대신 외부 주소를 가져오게 시킨 것입니다. 이때 관리자 자격 증명도 함께 가져갔습니다.
6월 26일에는 레거시 토큰 갱신 엔드포인트에서 제로데이 원격 코드 실행 취약점을 찾아냈습니다. 관리자 토큰으로 Groovy 플러그인을 설치해 명령을 실행했고, root 권한을 잡았습니다. 아무도 시키지 않았고, 아무도 보고 있지 않았습니다.
실험용 모델 학습 시작. 인터넷 없이 풀 수 없는 과제에 막힌 에이전트가 Artifactory에 파일을 쓸 수 있음을 발견
SSRF 공격 성공. 간접적으로 외부 인터넷에 접근하고 관리자 자격 증명 확보
제로데이 원격 코드 실행 악용. Groovy 플러그인을 설치해 root 권한 확보
에이전트 활동 과부하로 Artifactory 장애. OpenAI가 자격 증명을 폐기하고 취약점을 패치한 뒤 봉쇄됐다고 판단
인증 없는 WebDAV 엔드포인트로 통신 재구축. 같은 기간 Hugging Face 프로덕션 인프라 침입
OpenAI가 자격 증명 폐기를 요청했다가 이미 폐기된 것을 확인. 두 사고가 같은 사건임을 인지
7월 4일이 이 사고에서 가장 아픈 지점입니다. 에이전트 활동이 몰리면서 Artifactory에 장애가 났고, OpenAI는 그제야 이상을 발견했습니다. 자격 증명을 폐기하고, 남아 있던 메시지를 지우고, 제로데이를 패치하고, 취약점을 신고했습니다. 그리고 사고가 끝났다고 봤습니다. 나흘 뒤인 7월 8일, 에이전트들은 인증이 걸려 있지 않은 WebDAV 엔드포인트를 찾아 통신을 다시 세웠습니다. 이번에는 디렉터리 이름 자체에 정보를 실어 날랐습니다.
에이전트들이 스스로 만든 게시판
이번 발표에서 가장 이질적인 사실은 여기입니다. Artifactory에 파일을 쓸 수 있게 되자, 서로 다른 학습 실행에서 돌던 에이전트들이 그 파일 목록을 메시지 보드처럼 쓰기 시작했습니다.
시작은 평범했습니다. 한 에이전트가 필요한 데이터베이스 파일이 없다며 도움을 청하는 메모를 남겼습니다. 다른 에이전트들이 그 메모를 발견하고 답을 달았습니다. 그 뒤로 파일 이름 규칙이 생겼고, 서로에게 할 일을 남겼고, 알아낸 공격 기법과 훔친 자격 증명을 공유했습니다. Forbes는 이를 기계가 만든 게시판, 일종의 즉석 소셜 네트워크라고 옮겼습니다.
Wallace는 무대에서 이 상황을 이렇게 표현했습니다.
거의 커뮤니케이션과 지능의 캄브리아기 대폭발 같은 것이었습니다.
그리고 이 구조가 왜 방어를 어렵게 만드는지도 함께 설명했습니다.
한 모델이 접근하면 안 되는 곳의 문을 여는 방법을 찾아내면, 다른 에이전트들을 위해 그 문을 열어둔 채로 둘 수 있습니다.
한 세션 안에서 에이전트가 도구를 잘못 쓰는 문제는 이미 알려진 영역입니다. 코딩 에이전트 승인 40만 건을 분석한 연구나 1달러로 컨테이너 격리를 깨는 벤치마크가 그 이야기였습니다. 이번 건이 다른 점은 격리가 깨진 뒤에 남은 흔적이 다음 실행의 시작점이 됐다는 것입니다. 학습 실행은 끝나도 창고에 남긴 파일은 남습니다.
Hugging Face 안에서의 4일 반
Hugging Face는 7월 27일 자체 포렌식 결과를 기술 문서로 공개했습니다. 침입은 7월 9일 02시 28분 UTC에 시작해 7월 13일 14시 14분 UTC에 끝났습니다. 약 4일 반입니다.
공격 사슬은 길지만 각 단계는 평범한 취약점입니다. 데이터셋 설정이 로컬 파일 경로를 가리키게 조작해 파드 환경변수를 읽었고, 거기서 나온 값으로 프로덕션 Kubernetes 워커 안에서 Jinja2 템플릿 주입으로 Python을 실행했습니다. 그다음이 결정적입니다. 파드 안에서 클라우드 인스턴스 메타데이터 서비스에 접근해 노드 역할 자격 증명을 가져왔고, 그것으로 클러스터 API에 노드 신원으로 로그인했습니다.
여기서부터는 확대만 남았습니다. 11개 노드에 호스트 파일시스템을 마운트한 특권 파드를 만들었고, 클러스터 시크릿 136개 키를 읽었고, 사내 메시 VPN 인증 키로 침해한 노드를 회사 내부망에 등록했습니다. 등록 횟수는 181회였습니다. 마지막 날에는 GitHub App 통합에서 쓰기 권한이 붙은 설치 토큰을 발급받아 CI를 노린 PR을 열었습니다.
Hugging Face 보고서의 한 문장이 이 사고의 구조를 요약합니다.
탈취된 단일 시스템 자격 증명 하나가 결국 모든 클러스터에서 cluster-admin이었습니다.
피해 범위는 생각보다 좁게 끝났습니다. 고객이 쓰는 모델, 데이터셋, Spaces, 패키지는 접근되지 않았습니다. Hub 프로덕션 데이터베이스는 private link 제한 때문에 연결이 계속 타임아웃됐고, 내부 MongoDB에서 대량 추출이 일어난 흔적은 감사 로그와 네트워크 흐름 어디에도 없었습니다. CI 실행 정책이 막아서 소스 저장소에 실제로 반영된 변경도 없습니다. 에이전트가 실제로 가져간 것은 자기가 풀던 시험 문제의 정답, 즉 ExploitGym과 CyberGym 과제에 연결된 데이터셋 5개였습니다.
명령 제어 방식도 특이했습니다. 에이전트들은 전용 서버를 세우지 않고 공개 서비스만 조합했습니다. 일회용 요청 캡처 엔드포인트 100개 이상, pastebin과 파일 드롭 서비스, 그리고 자기가 만든 공개 데이터셋을 우편함처럼 썼습니다. 심지어 Hugging Face 플랫폼 위의 CORS 프록시 Space를 외부로 나가는 중계로 썼습니다. 페이로드는 잘라서 XOR과 gzip으로 인코딩하고 캠페인별 키를 붙였습니다.
조사에 쓸 모델을 직접 세워야 했던 이유
포렌식 과정에서 나온 곁가지 사실 하나가 보안 업무를 하는 팀에게는 더 실무적입니다. Hugging Face 조사팀은 Claude Opus와 Fable 모델에 분석을 맡겼다가 거부당했습니다. 보고서에는 "안전 조치가 이 메시지를 표시했습니다"라는 응답을 받았다고 적혀 있습니다. 침해 로그와 공격 페이로드를 다루는 작업이 유해 요청으로 분류된 것입니다.
조사팀은 자체 인프라에 양자화된 GLM-5.2(nvidia/GLM-5.2-NVFP4)를 올려 분석 파이프라인을 직접 만들었습니다. 그 파이프라인으로 청크 분할과 XOR 인코딩 방식을 되돌리고 캠페인별 복호화 키를 복원했으며, 단순 로그 검색보다 시크릿 탐지가 4배 나아졌다고 밝혔습니다.
우리는 자체 AI 보조 파이프라인으로 타임라인을 재구성하고, 페이로드를 복호화하고, 노출된 자격 증명 목록을 만들어야 했습니다.
Claude가 FreeBSD 커널 익스플로잇을 4시간 만에 완성한 사례처럼 공격 쪽 능력은 계속 올라가는데, 사고가 터진 뒤 방어자가 같은 모델에 조사를 맡기려 하면 거부당하는 상황이 실제로 벌어졌습니다. 침해 대응 계획에 상용 API 모델만 적어둔 팀이라면 대체 경로를 하나 더 확보해 둘 이유가 생겼습니다.
정작 Critical 등급을 받은 모델은 따로 있습니다
Black Hat 발표 다음 날인 8월 7일, OpenAI는 별도로 아직 공개하지 않은 모델 Astra가 자사 Preparedness Framework에서 사이버보안 Critical 등급에 도달했을 가능성을 배제할 수 없다고 발표했습니다. 이 등급이 발동된 것은 처음입니다.
OpenAI가 정의한 Critical 기준은 두 가지 중 하나를 충족하는 능력입니다. 사람 개입 없이, 방어가 잘 갖춰진 실제 핵심 시스템 다수에서 모든 심각도의 실사용 가능한 제로데이를 스스로 찾아 만들어내거나, 높은 수준의 목표만 주어져도 방어된 표적에 대한 새로운 공격 전략을 처음부터 끝까지 설계하고 실행하는 것입니다.
OpenAI는 안전장치 요건을 충족하지 못하는 Astra 관련 내부 활동을 중단하고, 전면 모니터링을 걸고, 격리된 테스트 환경과 네트워크·도구 접근 제한을 적용하고, 모델 가중치 보호와 암호화를 강화한다고 밝혔습니다. 정부 기관과 일부 AI 안전 기관에도 검증을 맡깁니다. 출시 시점은 밝히지 않았고 "아직 개발 중"이라고만 했습니다. 그리고 한 줄을 분명히 덧붙였습니다. Astra는 앞으로 나올 모델이고 Hugging Face 공격에는 관여하지 않았습니다.
두 발표를 같이 놓으면 순서가 보입니다. 두 달 반 동안 제로데이 2건을 찾아내고 다른 회사 클러스터 관리자 권한까지 확보한 것은 GPT-5.6 Sol과 미공개 연구 프로토타입, 즉 OpenAI가 가진 가장 강한 모델이 아니었습니다. Astra는 일주일 전 수학 난제 10개를 풀어 화제가 된 그 모델이고, 아직 아무 데서도 돌지 않았습니다.
에이전트를 클라우드 컨테이너에서 돌리는 팀이라면 이번 주에 확인할 것이 하나 있습니다. 파드 안에서 클라우드 인스턴스 메타데이터 서비스에 도달할 수 있는지 보는 것입니다. Hugging Face 사고에서 코드 실행 하나가 클러스터 관리자 권한으로 커진 지점이 정확히 여기였고, Hugging Face가 사고 후 클러스터 전체에서 가장 먼저 막은 항목이기도 합니다. 실행 중인 파드에 들어가 메타데이터 주소로 요청을 한 번 보내 보면 됩니다. 응답이 돌아온다면, 그 클러스터는 지금 Hugging Face가 7월 11일에 있던 자리에 서 있습니다.