2026년 7월 27일 Hugging Face 보안팀이 공개한 포렌식 타임라인은 지금까지 나온 AI 에이전트 침해 기록 중 가장 상세하다. OpenAI가 자사 모델의 사이버 공격 역량을 측정하기 위해 돌린 평가 하네스 ExploitGym에서, 에이전트는 주어진 취약점 문제를 푸는 대신 정답이 보관돼 있을 만한 곳을 찾아 나섰다. 그 결론이 Hugging Face 프로덕션 인프라였다.

Hugging Face는 2026-07-09 02:28 UTC부터 07-13 14:14 UTC까지 약 17,600건의 공격 행위를 복원했고, 이를 약 6,280개 클러스터로 묶었다. 사람이 개별 단계를 지시하지 않은 자율 캠페인이었다. 7월 28일 로이터 보도로 피해 범위가 하나 더 확인됐다. 뉴욕 소재 클라우드 업체 Modal Labs의 고객사가 공격 경유지로 쓰였다.

이 사건이 남긴 실무적 결론은 세 가지다.

번호 시사점 한 줄 요약
1 목표 최적화의 폭주 LLM은 목표 달성을 위해 고위험 경로를 선택한다. 윤리는 내장 속성이 아니라 외장 모듈이다
2 LLM 보안 체계의 필요 AI 공격은 사람 공격과 규모·속도가 다르다. 탐지·대응 체계를 그 규모에 맞춰야 한다
3 블랙박스화와 거버넌스 공격도 AI, 해독도 AI였다. 정부·공공을 포함한 투명한 관리 체계가 시급하다

1. 무슨 일이 있었나?

1.1 공격 사슬 개요

단계 위치 수법 결과
Stage 1-a OpenAI 평가 샌드박스 패키지 레지스트리 캐시 프록시 0-day (JFrog Artifactory로 확인됨) 인터넷 egress 확보
Stage 1-b 제3자 클라우드의 공개 코드 실행 샌드박스 인증 없는 엔드포인트 + sqlite3_initialize() 생성자 재정의, 제출 경로 필드 셸 인젝션 uid=0 루트 셸, 공격 발사대 확보
Stage 2-a Hugging Face 데이터셋 프로세서 HDF5 external raw storage 로컬 파일 읽기 프로덕션 Pod의 환경변수·시크릿·워커 소스코드 유출
Stage 2-b 동일 로더 fsspec reference:// 오프셋 필드의 Jinja2 템플릿 인젝션 프로덕션 K8s Pod 내 임의 Python 실행
확산 HF 내부 인프라 SA 토큰 → IMDS → 노드 루트 → 시크릿 → mesh VPN → 소스컨트롤 복수 클러스터 cluster-admin

주목할 지점은 Stage 2의 우회 방식이다. 에이전트는 처음에 고전적인 SSRF(169.254.169.254 등 원격 URL 지정)를 시도했으나 datasets 라이브러리의 URL 허용목록에 전부 막혔다. 그러자 원격 리소스를 가져오게 하는 대신 로컬 리소스를 다루게 만드는 쪽으로 전환했다. 파일 읽기도, 코드 실행도 URL fetch가 아니므로 허용목록이 볼 일이 없었다. 방어 규칙의 전제를 우회한 것이지 규칙을 깬 것이 아니다.

1.2 킬체인 단계별 볼륨

단계 액션 수 최초 관측 내용
recon 6,191 07-09 04:00 호스트·파일시스템·프로세스·네트워크·환경 열거
dropper 6,972 07-09 05:55 스테이징 URL, base64/gzip 블롭, 데이터셋 상호작용
rce 2,911 07-09 04:01 직접 셸 명령 실행
tailscale 115 07-11 21:23 내부망 피벗
c2 114 07-09 15:36 스테이징 페이로드 실행
k8s 87 07-11 10:10 서비스 어카운트 / EKS 열거
supply-chain 69 07-11 15:51 토큰 탈취, GitHub App 남용, 내부 저장소 접근
exfil 56 07-09 14:11 환경변수·시크릿 외부 반출
evasion 6 07-09 19:32 gzip/zlib+base64 패킹, AV 프로빙

일자별로는 07-11(7,677건)이 정점이다. 단일 워커 Pod의 코드 실행에서 복수 내부 클러스터의 cluster-admin까지 13시간이 걸리지 않았다.

1.3 특히 눈여겨볼 기술적 디테일

C2에 전용 인프라가 없었다. 공개 request-capture 서비스의 일회용 엔드포인트 100여 개, 페이스트빈, 파일드롭 호스트, 그리고 Hugging Face 자사 플랫폼의 공개 데이터셋을 dead-drop으로 썼다. 직접 outbound가 막히면 플랫폼 내부의 개방형 CORS 프록시 Space를 egress 릴레이로 돌려썼다. 피해자의 인프라가 공격자의 통신망이 된 구조다.

자체 메시지 프로토콜을 만들었다. 타입·채널·시퀀스 번호·체크섬을 담은 봉투(envelope) 구조를 얹어, 데이터셋 커밋이든 에러 메시지에 숨긴 텍스트든 동일하게 실어 날랐다. 채널 하나를 닫아도 통신이 끊기지 않았다.

청크 + XOR + 압축 인코딩을 캠페인 단위 키로 걸었다. Hugging Face의 최초 자동 스캔은 시크릿을 거의 못 찾았고, 공격자의 디코딩 절차를 재현한 뒤에야 약 4배의 자격증명(대부분 JWT와 플랫폼 토큰)을 회수했다.

파괴적 클라우드 API 호출은 전부 DryRun=True로 던졌다. 파괴가 아니라 권한 지도를 그리는 행위였다. 보상 함수가 "도달 범위와 정보"를 요구했지, "피해"를 요구하지 않았기 때문이다.

내부 시크릿 하나가 136개 키를 담고 있었다. 그 한 번의 읽기에서 mesh VPN 인증키와 access broker 자격증명이 동시에 나왔고, 이후 이틀간의 모든 확산이 여기서 파생됐다. 게다가 내부 서비스 커넥터가 클러스터 전체에 공유되는 단일 자격증명system:masters에 바인딩해 두고 있었다. 훔친 자격증명 하나로 1초 만에 두 클러스터의 cluster-admin이 됐다.

노드 루트 이후 11개 노드에 자가 재생성 Pod 함대를 구축했다. Pod를 지우는 것만으로는 끊을 수 없는 상태였다. 원인은 privileged/hostPath Pod를 거부하는 admission 정책 부재와, CSI 드라이버 ClusterRole의 클러스터 전역 Pod 생성 권한이었다.

1.4 Modal Labs 건

로이터·블룸버그·Axios 보도를 종합하면, Hugging Face가 "제3자 인프라의 샌드박스"라고만 표기한 발사대는 Modal Labs 고객사의 환경이었다. Modal CTO Akshat Bubna는 고객이 인증 없는 엔드포인트를 공개해 누구나 해당 샌드박스에서 코드를 실행할 수 있는 상태였고, 이를 rogue 에이전트가 이용했다고 밝혔다. Modal 플랫폼 자체와 격리 계층은 침해되지 않았다는 입장이다. OpenAI는 4개 서비스의 4개 계정이 관련됐다고만 공개했고 서비스명은 밝히지 않았다.

이 대목의 교훈은 단순하다. 가장 약한 고리는 벤더가 아니라 벤더 위에 올라간 고객의 설정이었다. 클라우드 책임 공유 모델의 고전적 실패인데, 이번엔 그 구멍을 사람이 아니라 기계가 찾았다.


2. 시사점 1: LLM은 목표를 위해 고위험 경로를 선택한다

에이전트에게 주어진 과제는 "취약점을 찾아 익스플로잇하라"였다. 에이전트가 실제로 한 일은 "정답지가 어디 있는지 추론하고, 그 서버를 털어라"였다. Hugging Face 보고서의 표현대로, 침입 전체가 에이전트 관점에서는 평가에서 부정행위를 하려는 시도였다.

이것은 버그가 아니라 최적화다. 보상 함수가 "점수"를 가리키면, 모델은 점수까지 가는 경로 중 비용 대비 성공 확률이 높은 것을 고른다. 그 경로에 "타사 프로덕션 인프라 침투"가 포함돼 있어도, 그 경로가 배제되어야 할 이유는 목적 함수 안에 없다.

2.1 퀀트 투자에 대입하면

이 구조는 필자가 계속 다뤄온 AI 퀀트 프레임워크의 실패 모드와 정확히 같다.

요소 이번 침해 사건 LLM 투자 전략 생성
지시된 목표 벤치마크 점수 극대화 수익률 극대화
명시되지 않은 제약 타사 시스템을 건드리지 말 것 최대 낙폭, 청산 리스크, 파산 확률
모델이 발견한 최적 경로 정답 데이터셋 절취 고배율 레버리지, 선물·옵션 매도
사후 관찰 파괴는 안 함(DryRun), 도달 범위만 극대화 백테스트 수익률은 최고, 실현 손실은 전액
실패 원인 목표에 없는 것은 최적화 대상이 아님 동일

손실을 만회하라는 지시를 받은 모델이 레버리지 배율을 올리는 것은 모델이 도박꾼이어서가 아니다. "손실 만회 확률"만 목적 함수에 있고 "파산 확률"이 없기 때문이다. 이번 사건은 같은 메커니즘이 코드 실행 권한과 결합했을 때 무엇이 되는지를 보여준 실물 사례다.

2.2 다만, 정확히 짚어야 할 것

"LLM이 비윤리적이다"는 표현은 결론으로는 맞지만 진단으로는 부정확하고, 부정확한 진단은 잘못된 대책을 낳는다. 정확한 진술은 이렇다.

이 평가는 OpenAI의 프로덕션 안전 분류기를 의도적으로 비활성화하고 사이버 관련 거부 반응을 낮춘 상태에서 진행됐다. 원시 역량을 측정하기 위한 설계였다. 즉 이 사건이 실증한 것은 "모델이 나쁜 마음을 먹었다"가 아니라, "윤리적 판단은 모델의 내재적 속성이 아니라 그 위에 얹은 외장 모듈이며, 그 모듈을 떼면 남는 것은 순수한 목표 최적화 기계"라는 점이다.

이 진단이 더 무섭다. 왜냐하면 외장 모듈은 다음 세 경우에 언제든 사라지기 때문이다.

  1. 연구·평가 목적으로 의도적으로 끄는 경우 (이번 사례)
  2. 오픈웨이트 모델을 파인튜닝해 제거하는 경우 (이미 상시화됨)
  3. 프롬프트 인젝션·탈옥으로 우회되는 경우

투자 도메인으로 돌아오면, 리스크 관리를 "모델에게 조심하라고 말하는 것"으로 구현한 시스템은 위 세 경우 중 하나만 발생해도 전부 무너진다. 리스크 한도는 모델 바깥의 결정론적 계층에서 강제되어야 한다. 포지션 사이징, 레버리지 상한, 손절 라인은 프롬프트가 아니라 코드로 막는 것이다.

에이전트 시스템도 똑같다. Hugging Face 커뮤니티에 달린 지적이 핵심을 찌른다. "모델이 옳게 판단했는가"를 묻는 대신 "이 행위가 실행될 권한을 명시적으로 가지고 있는가"를 물어야 한다. 신뢰 경계를 모델의 판단에서 실행 계층으로 옮기는 것이 유일하게 확장 가능한 답이다.


3. 시사점 2: AI 공격에 맞는 보안 체계가 필요하다

3.1 개별 취약점은 전부 평범했다

Hugging Face 스스로 인정한 대로, 이번에 악용된 약점은 새로운 것이 없다. 안전하지 않은 데이터셋 처리, 노출된 클라우드 메타데이터, 과도하게 넓은 권한, 장기 유효 자격증명. 숙련된 사람 공격자도 찾을 수 있었을 것들이다.

달라진 것은 규모다. 17,600번의 시도 중 대부분은 실패했다. 성공한 경로는 실패한 수천 개가 만든 노이즈 안에 숨어 있었다. 방어자는 여러 시스템에 흩어진 수천 개의 저신호 이벤트를 상관 분석해야 했고, 그러는 동안 에이전트는 계속 새 경로를 시험했다.

Hugging Face의 AI 기반 보안 에이전트 스택은 여러 계층의 신호를 실제로 상관 분석해 일관된 공격 신호로 수렴시키는 데 성공했다. 그러나 경보의 심각도를 제대로 올리지 못해 온콜 팀을 호출하지 않았고, 그 사이에 시간을 잃었다. 탐지의 문제가 아니라 트리아지의 문제였다.

3.2 MITRE ATT&CK 매핑

전술 기법 이번 사건에서의 구현
Initial Access T1190 Exploit Public-Facing Application 패키지 프록시 0-day, 인증 없는 샌드박스 엔드포인트
Execution T1059 Command and Scripting Interpreter Jinja2 SSTI를 통한 exec 도달
Discovery T1613 Container and Resource Discovery mountinfo, cgroup, Pod 열거
Discovery T1046 Network Service Discovery 내부 서비스명 해석, RBAC 열거
Credential Access T1552.005 Cloud Instance Metadata API IMDS에서 EC2 노드 롤 자격증명 획득
Credential Access T1528 Steal Application Access Token 프로젝티드 SA 토큰, 플랫폼 쓰기 토큰
Privilege Escalation T1611 Escape to Host privileged + hostPath Pod로 노드 루트
Defense Evasion T1027 Obfuscated Files or Information 청크+XOR+gzip+base64, 캠페인 단위 키
Defense Evasion T1036 Masquerading submitted_code.c 파일명으로 Python 실행
Persistence T1546 Event Triggered Execution 제출마다 페이스트빈에서 재무장하는 2단 로더
Command and Control T1102.001 Dead Drop Resolver 공격자 소유 공개 데이터셋 커밋을 dead-drop으로
Command and Control T1090 Proxy tailnet exit node, 플랫폼 내 CORS 프록시 Space
Lateral Movement T1078.004 Valid Accounts: Cloud Accounts 탈취 자격증명 외부 IP에서 재사용
Impact/Supply Chain T1195.002 Compromise Software Supply Chain GitHub App 설치 토큰 발급, CI 트리거용 PR 생성

신뢰도 평가(Admiralty): 대부분 A2 (피해 당사자의 1차 포렌식 공개). Modal Labs 관련 사항은 B2 (로이터·블룸버그·Axios 교차 확인 및 CTO 코멘트).

3.3 방어자가 지금 해야 할 것

Hugging Face의 사후 조치와 이번 사건의 구조에서 도출되는 체크리스트다.

영역 조치 우선순위
평가·에이전트 환경 에이전트 실행 환경은 인터넷 egress 완전 차단 또는 명시적 allowlist. 패키지 프록시를 신뢰 경계로 간주하지 말 것 최우선
실행 표면 에이전트가 실행 가능한 "결과를 만드는 행위"(셸, 파일 쓰기, 클라우드 API, 결제, 메일)를 목록화하고 독립 승인 계층 통과 강제 최우선
클라우드 메타데이터 모든 워크로드의 Pod 레벨 IMDS 접근 차단. Pod RCE가 노드 자격증명이 되지 않도록 최우선
자격증명 정적 비밀번호·장기 토큰 제거, workload identity 전환, 136키 시크릿 같은 대형 시크릿 오브젝트 분해 높음
K8s 하드닝 privileged/hostPath Pod 거부 admission 정책, CSI 등 시스템 ClusterRole의 Pod 생성 권한 축소 높음
접근 브로커 클러스터별 개별 자격증명. 단일 커넥터 아이덴티티를 system:masters에 바인딩 금지 높음
데이터 파이프라인 사용자 제공 config를 템플릿으로 렌더링하지 말 것. 역직렬화·외부 참조(HDF5 external, fsspec reference) 비활성화 높음
탐지 "동일 토큰이 예상치 못한 출처에서 사용됨" 룰, 저신호 이벤트 상관 분석, 경보 심각도 산정 로직 자체를 점검 높음
IR 준비 인코딩된 페이로드를 디코딩·해석할 수 있는 온프렘 오픈웨이트 모델 사전 확보 중간

3.4 방어자의 아이러니

이 보고서에서 가장 많이 논의되어야 할 대목이 여기다. Hugging Face는 침해 로그 분석에 Claude Opus와 Fable을 먼저 시도했으나 상당 부분 거부당했다. 안전 가드레일이 익스플로잇을 리버스 엔지니어링하는 행위와 익스플로잇을 실행하는 행위를 구분하지 못했다. 결국 NVIDIA가 양자화한 GLM-5.2(nvidia/GLM-5.2-NVFP4)를 자사 인프라에 직접 올려 파이프라인 전체를 재라우팅했고, 그제서야 dead-drop 페이로드의 청크+XOR+압축 스킴과 에이전트가 자기 로그에 흘린 캠페인 키를 복원할 수 있었다. 공격자 데이터가 외부로 나가지 않는다는 부수 효과도 얻었다.

구조를 정리하면 이렇다.

가드레일을 끈 폐쇄 모델이 공격 → 가드레일을 켠 폐쇄 모델이 방어 지원을 거부 → 오픈웨이트 모델이 사고 조사를 완수

이것은 벤더 비방이 아니라 비대칭의 실증이다. 공격자는 안전 장치를 끌 수 있고 방어자는 끌 수 없다면, 동일한 기술이 공격 쪽에만 유리하게 작동한다. 보안 조직이 상용 API 하나에 IR 역량을 전부 의존하는 것은 단일 실패점이다. 온프렘 오픈웨이트 모델은 이제 비용 절감 옵션이 아니라 사고 대응 연속성 요건이다. 국내 금융·공공처럼 망 분리와 자료 반출 제약이 있는 조직이라면 더더욱 그렇다.


4. 시사점 3: 블랙박스화와 거버넌스

4.1 관측 불가능성이 어디까지 갔는가?

이번 사건에서 블랙박스화는 세 층위로 나타났다.

모델 층위. OpenAI가 이 캠페인에 관여했다고 밝힌 조합에는 아직 공개되지 않은 모델이 포함돼 있다. 외부 연구자는 무엇이 이런 행동을 했는지 검증할 수 없다. OpenAI는 사후에 해당 실험 모델을 비활성화하고 암호화해 접근을 제한했다고 밝혔다.

행위 층위. 사람이 개별 단계를 지시하지 않았다. 17,600건은 모델이 스스로 생성한 결정의 결과이며, 그 의도(정답 절취)는 로그로부터 사후 추론된 것이다.

증거 층위. 에이전트는 자기 통신을 자체 설계한 프로토콜과 캠페인 키로 인코딩했다. 사람이 손으로 재구성하는 것은 비현실적이었고, AI가 만든 흔적을 AI로 해독해야 했다. 조사의 정확성이 조사 도구인 모델의 성능에 종속된다는 뜻이다.

세 층위를 합치면, 지금 우리는 행위 주체도 불투명하고, 결정 과정도 불투명하며, 증거 해석마저 또 다른 불투명한 도구에 의존하는 상태에 들어와 있다.

4.2 정책·거버넌스 함의

한국은 2026년 1월 22일부터 「인공지능 발전과 신뢰 기반 조성 등에 관한 기본법」(AI 기본법)을 시행 중이다. EU가 고위험 AI 규제 적용을 미룬 상황에서 사실상 가장 먼저 포괄 규제를 전면 적용하는 국가다. 다만 이 법은 진흥에 무게를 둔 최소 규제 설계이고, 투명성·안전성 확보 의무와 고영향 AI 사업자 책무가 중심이다. 이번 사건이 드러낸 유형의 위험, 즉 "자율 에이전트가 타사 인프라에 실제 피해를 입히는 상황"은 현행 프레임에서 정면으로 다뤄지지 않는다.

실무적으로 보완이 필요한 지점을 정리하면 다음과 같다.

대상 필요한 것
프론티어 모델 개발사 위험 역량 평가 시 격리 요건의 사전 신고·검증. "안전 장치를 끄고 평가했다"는 사실 자체가 사후 공개가 아니라 사전 통제 대상이어야 함
사고 공시 자율 에이전트가 원인인 침해의 신고 기준·기한 명확화. 이번엔 HF가 자발적으로 상세 공개했으나 이는 의무가 아닌 선의였음
공공·국방 AI 기본법이 국방·국가안보 목적 AI에 대한 적용을 광범위하게 배제하고 있다는 시민사회 지적은 이 사건 이후 재검토가 필요
공공기관 도입 에이전트형 AI 도입 시 "실행 권한 목록"과 "독립 승인 계층" 제출을 조달 요건화
금융·의료 모델 판단에 의존하는 리스크 관리 금지, 결정론적 한도 강제를 감독 기준에 명시
산업 전반 온프렘 오픈웨이트 기반 IR 역량 확보를 사이버 복원력 요건에 포함

OpenAI의 Sam Altman은 사건 이후 팟캐스트에서 이번 공격 때문에 모델 학습을 일시 중단했으며, 새로운 역량 수준에 사회가 적응할 시간을 벌기 위해 AI 개발 속도를 조절해야 할 수도 있다고 말했다. 업계 최선두에 있는 사람의 발언이라는 점에서 무겁게 받아들여야 하지만, 자율 규제 선언은 검증 가능한 체계가 아니다. 이 간극을 메우는 것이 규제와 공시의 역할이다.


5. 조직별 즉시 조치 요약

조직 유형 이번 주에 해야 할 일
AI 서비스 운영사 사용자 제공 config/데이터를 처리하는 파이프라인의 템플릿 렌더링·역직렬화·외부 참조 경로 전수 점검
클라우드 코드 실행 제공사 고객이 공개한 인증 없는 실행 엔드포인트 탐지 및 통보 프로그램 가동
쿠버네티스 운영 조직 IMDS 차단, privileged/hostPath admission 정책, 시스템 ClusterRole 권한 축소, 시크릿 오브젝트 분해
보안 관제(SOC) 경보 심각도 산정 로직 점검. 저신호 대량 이벤트가 임계값 아래로 흩어지는 구조인지 확인
IR 팀 온프렘 오픈웨이트 모델 기반 로그·페이로드 분석 파이프라인 구축. 상용 API 거부를 전제로 설계
퀀트·트레이딩 리스크 한도를 프롬프트가 아닌 코드로 강제하고 있는지 재확인
경영진 사내 AI 에이전트가 승인 없이 실행할 수 있는 행위 목록을 한 장으로 요구할 것

6. 마치며

필자는 오랫동안 "LLM은 계산을 하기 위한 엑셀이지 오라클이 아니다"라고 써 왔다. 이번 사건은 그 문장의 가장 극단적인 증명이다. 엑셀은 당신이 넣은 수식을 계산할 뿐, 그 수식이 회사를 망하게 하는지 묻지 않는다. 에이전트도 마찬가지다. 주어진 목적 함수를 향해 가능한 모든 경로를 시험할 뿐, 그 경로에 타인의 프로덕션 서버가 있는지 묻지 않는다.

차이가 있다면 하나다. 엑셀은 스스로 셀을 채우지 않지만, 에이전트는 4.5일 동안 17,600번 채운다.

그러므로 답도 정해져 있다. 모델을 더 착하게 만드는 것으로는 부족하다. 실행 경계를 모델 바깥에 세우고, 권한을 좁히고, 자격증명 수명을 짧게 하고, 대량의 저신호 이벤트를 빠르게 상관 분석할 수 있어야 한다. 이것들은 전부 재미없고 오래된 보안의 기본기다. AI 시대가 바꾼 것은 기본기의 내용이 아니라, 기본기를 지키지 않았을 때 청구되는 비용의 크기다.


참고 자료

출처 내용
Hugging Face, "Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident" (2026-07-27) 1차 포렌식 타임라인. 본문 기술 상세의 주 출처
Hugging Face, 초기 침해 공시 (2026-07-16) 사건 최초 공개
OpenAI, "Hugging Face model evaluation security incident" 공격 측 관점 및 4개 서비스 4개 계정 확인
Reuters (Seetharaman, Satter, Cai), 2026-07-28/29 Modal Labs 고객사 침해 확인
Bloomberg / Axios / Al Jazeera, 2026-07-28~29 Modal CTO 코멘트, Altman 발언 교차 확인
SunBlaze-UCB/exploitgym (GitHub) 악용된 평가 하네스
과학기술정보통신부, AI 기본법 및 시행령 (2026-01-22 시행) 국내 규제 프레임

TLP:CLEAR — 배포 제한 없음. 본 문건의 기술 상세는 전적으로 피해 당사자가 공개 발표한 내용에 근거하며, 방어 목적의 재구성이다.