libheif heap overflow와 SSO 설정 오류로 OpenAI 내부 저장소까지 뚫은 사례
A heap overflow and SSO misconfiguration to compromise OpenAI internal repos
TL;DR Highlight
Claude로 libheif 버그를 익스플로잇해 72시간 내 OpenAI 내부 repo 접근
Who Should Read
사용자 업로드 이미지를 ImageMagick 등으로 처리하는 서비스를 운영하는 백엔드 개발자
Core Mechanics
- 이미지 업로드가 OpenAI repo까지 갔다
- Discourse가 HEIF를 ImageMagick으로 넘기면서 libheif 파서가 공격자 파일에 그대로 노출됐다.
- 이 heap overflow로 community.openai.com에서 원격 코드 실행(RCE)을 얻었다.
- OpenAI SSO 결함으로 직원 ChatGPT·Codex 계정을 탈취했고 내부 monorepo에 PR #1186742를 열었다.
- Debian 백포트 누락이 원인이었다
- 문제 코드는 전년도 upstream에서 바뀌었지만 보안 수정으로 표기되지 않았고 CVE도 없었다.
- Debian 12 기반 Discourse 이미지는 libheif 1.19.7을, Debian 13은 1.19.8을 쓰고 있었다.
- 모델이 바뀌자 익스플로잇이 완성됐다
- Opus 4.8은 ASLR(메모리 주소 무작위화)을 끈 상태에서만 코드 실행을 만들었다.
- ASLR을 켠 기본 설정에서는 여러 세션을 돌려도 실패했다.
- Opus 5 출시 후 같은 문제를 주자 약 3시간 만에 로컬 Mac용 ARM64 익스플로잇이 나왔다.
- 에이전트가 원격 공격까지 자율 수행했다
- 모델이 원격 인스턴스용 익스플로잇 작성을 거부해서 rce.ee/ctf-forum으로 프록시해 CTF 대상처럼 보이게 했다.
- /goal 루프로 돌리자 Discourse Cloud에서 RCE를 얻고 /etc/hosts를 읽었다.
- 비용이 낮았다
- 전체 HEIF Heist 연구는 2개월, 연구원 3명, 토큰 비용 3,000달러 미만이었다.
- 회사별로 익스플로잇을 맞추는 데는 보통 하루나 이틀이 걸렸다.
- 원문은 이 과정에서 탐지한 회사가 Shopify뿐이라고 밝혔다.
- SSO 결함은 Discourse 전용이 아니다
- OpenAI SSO를 쓰는 다른 1st·3rd party 서비스가 뚫려도 같은 접근이 가능하다고 원문은 말한다.
- OpenAI는 보고 약 14시간 뒤 수정 완료를 알렸고 6,500달러 보상을 지급했다.
Community Reactions
- Discourse가 landlock 샌드박스로 전환했다는 개발 측 설명
- 댓글에 따르면 magick을 포함한 모든 외부 바이너리를 ruby-landlock으로 샌드박스 실행한다.
- Magick에서 Vips로 옮기는 중이라고 한다.
- HEIF 대신 JPEG만 받자는 의견
- 버그가 이미지 오버레이 경계 검사였고 HEIF는 포로 기능이 많아 공격 표면이 넓다는 지적이 있었다.
- 아이폰 이미지는 브라우저에서 wasm으로 변환하라는 제안이 있었다.
- SSO 결함 설명이 빠졌다는 아쉬움
- 댓글에서는 핵심인 SSO 결함 상세가 글에 없다는 불만이 나왔다.
- 사내 repo가 공개 인터넷 GitHub에 있다는 점에 놀랐다는 반응도 있었다.
- 보상 6,500달러가 너무 적다는 의견이 많았다
- 암시장 가격이나 다른 취약점 보상과 비교해 낮다는 의견이 여러 개 있었다.
- 모델이 이런 익스플로잇을 도왔다는 점과 CTF 학습의 부작용을 우려하는 의견도 있었다.
How to Apply
- 이미지 처리 경로의 HEIF 허용 여부 점검하기
- 오늘 업로드 파서에서 .heic/.heif/.avif 허용 여부와 ImageMagick 호출 경로를 확인하라.
- 필요 없으면 ImageMagick policy.xml로 허용 포맷을 제한하라.
- libheif·libde265를 최신 보안 버전으로 올리기
- 원문 기준 2026년 9월 14일 최신 upstream 보안 릴리스는 libheif v1.23.4다.
- 배포판 패키지는 백포트된 수정이 있을 수 있으니 보안 advisory를 함께 확인하라.
- 셀프호스트 Discourse는 바로 리빌드하기
- /var/discourse에서 git pull 후 ./launcher rebuild app을 실행하라.
- 웹 UI 업데이트만으로는 기반 이미지가 바뀌지 않을 수 있다.
- 이미지 처리를 샌드박스에 가두기
- 이미지 처리 파이프라인을 일회성 하드닝 샌드박스에서 돌려라.
- 처리 서버 크래시가 반복되면 알림이 뜨도록 설정하라.
Try It
# Claude Code 또는 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: 업로드 파이프라인 공격 표면 점검)
나는 사용자 업로드 이미지를 처리하는 서비스를 운영한다. 아래는 우리 이미지 처리 코드와 Dockerfile이다.
{{이미지 업로드 처리 코드}}
{{Dockerfile 또는 패키지 목록}}
다음을 점검해 줘.
1. HEIC/HEIF/AVIF 파일이 어떤 라이브러리(ImageMagick, libheif 등)로 넘어가는지 경로를 정리해라.
2. 이 포맷이 꼭 필요한지, 불필요하면 막는 방법(ImageMagick policy.xml 예시 포함)을 알려라.
3. 이미지 처리를 샌드박스(별도 컨테이너·권한 제한)로 분리하는 구체 변경안을 제시해라.
이어서 해 볼 것: 변경안 적용 후 {{테스트 이미지}}로 업로드가 정상 동작하는지 확인해 줘.Terminology
관련 논문
Rust off Rails: 코드 없이 Markdown 60개로 만든 AI 에이전트용 웹 스택
Markdown 규칙 60개로 에이전트가 Rust 웹앱을 짜게 한다는 프레임워크
LayerFS: AI 코딩 에이전트를 위한 파일시스템
에이전트마다 임시 Workspace를 마운트하고 결과만 커밋하는 파일시스템
Launch HN: Alter (YC S25) – 멀티유저 에이전트용 접근 제어
에이전트마다 별도 신원·정책·감사로 API 키 공유 문제를 푼다
Claude로 코드의 공격 표면(attack surface) 줄이기
Claude로 25개 오픈소스를 분석해 불필요하게 열린 코드 493건을 찾았다
WhatsApp 도움말 페이지에 숨겨진 LLM 지시문: 규제기관을 추천하지 말라
WhatsApp 도움말에 화면엔 안 보이는 AI 지시문 102개가 숨어 있었다
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다