GhostCompact: OpenAI 추론 비용을 사실상 '0원'으로 만든 컴팩션 버그

Xint 연구진은 OpenAI 프런티어 모델의 추론을 거의 무료로 쓸 수 있게 만드는 과금 로직 버그를 OpenAI API에서 발견했습니다.
Xint's avatar
Nov 05, 2026
GhostCompact: OpenAI 추론 비용을 사실상 '0원'으로 만든 컴팩션 버그

요약

2026년 8월, Xint 연구진은 OpenAI API 과금 시스템에서 버그를 발견하여 이를 'GhostCompact'라 명명했습니다. 이 버그를 이용하면 OpenAI 프런티어 모델의 추론을 사실상 공짜로 뽑아낼 수 있었습니다. OpenAI는 문제를 확인한 뒤 2026년 9월 21일에 수정 패치를 배포했으며, Xint 연구진은 버그 바운티로 600달러의 포상금을 수령했습니다.

배경

현재 모든 대형 언어 모델(LLM)에는 한 번에 처리할 수 있는 컨텍스트(문맥) 길이에 한계가 존재합니다. 대화가 길어지거나 에이전트 루프가 장시간 실행되어 이 제한에 도달하면 전체 작업이 중단될 위험이 있습니다.

이러한 문제를 방지하기 위해 AI 시스템들은 '컴팩션(Compaction)'이라는 기법을 활용합니다. 다음 대화를 이어가는 데 필요한 핵심 정보만 남기고, AI 모델을 통해 기존 대화 맥락을 압축해 컨텍스트 길이를 줄이는 방식입니다.

OpenAI Responses API는 두 가지 방식의 컴팩션을 제공합니다.

  • 독립 컴팩션 (Standalone Compaction): 전체 대화 기록을 /responses/compact 엔드포인트로 전송해 컴팩션 항목을 반환받는 방식입니다.

  • 인라인 컴팩션 (Inline Compaction): API 요청 시 context_management=[{"type": "compaction", "compact_threshold": N}] 옵션을 통해 활성화합니다. 입력 토큰이 N을 초과하면 서버가 자동으로 입력을 컴팩션하고, 새로운 출력 결과와 함께 내용을 직접 확인할 수는 없는 불투명(opaque)한 컴팩션 항목을 반환합니다.

독립 컴팩션은 일반적인 모델 요청과 동일하게 과금됩니다. 기존 대화 기록은 '입력 토큰'으로, 생성된 컴팩션 항목은 '출력 토큰'으로 계산되어 비용을 지불해야 합니다. 반면, 인라인 컴팩션 방식에서는 이 과금 로직에 심각한 결함이 있었습니다.

GhostCompact 작동 원리

인라인 컴팩션이 수행된 직후, 모델의 첫 동작이 도구 호출(Tool call)일 경우 요금 청구가 대거 누락되는 현상이 발생했습니다.

컴팩션 이후 모델이 도구를 호출하면, API는 컴팩션 이후의 토큰량만 비용으로 청구했습니다. 그럼에도 반환된 응답에는 생성된 전체 컴팩션 항목이 온전히 포함되어 있었습니다. 반대로 모델이 도구 호출이 아닌 일반 텍스트 메시지를 생성할 때는 전체 입력 토큰이 정상적으로 과금되었습니다.

연구진은 통제된 실험을 통해 현상의 원인을 특정했습니다. 약 20만 토큰 분량의 동일한 입력을 제공한 뒤, 모델의 응답 방식만 '일반 메시지'와 '도구 호출'로 바꿔가며 과금 차이를 확인했습니다.

모델의 다음 출력

청구된 입력 토큰

일반 메시지

200,749

도구 호출

300

이러한 과금 불일치는 입력 크기와 무관하게 일관되게 나타났습니다. reasoning effort, 스트리밍 여부, 프롬프트 캐싱 적용 유무 등 다른 조건들을 변경해도 결과는 동일했습니다. 더 큰 문제는 API 응답에 표시된 토큰 사용량이 조직 단위의 Usage API 기록과도 정확히 일치했다는 점입니다. 단순한 표기 오류가 아니라, 실제로 과금 자체가 누락되고 있었다는 의미입니다.

결론적으로 독립 컴팩션(/responses/compact)을 호출하는 대신, 인라인 컴팩션 요청에서 tool_choice로 도구 호출을 강제하면 동일한 결과물을 아주 적은 비용으로 얻을 수 있었습니다.

비용 절감 폭은 입력 컨텍스트의 크기와 컴팩션 항목의 크기에 따라 달랐습니다. 예를 들어 입력 컨텍스트가 10만~27만 2,000 토큰이고 컴팩션 결과가 1,000~5,000 토큰일 경우, GhostCompact 버그를 활용하면 정상적인 독립 컴팩션을 쓸 때보다 비용이 20배에서 최대 200배까지 저렴했습니다.

중요한 점은 악의적인 의도가 없더라도 인라인 컴팩션을 사용하는 사람이라면 누구나 자신도 모르게 이 버그를 겪을 수 있었다는 것입니다. 특히 에이전트 루프 환경에서는 컴팩션 직후에 도구를 호출하는 패턴이 매우 흔하기 때문에 실무에서도 꽤 빈번하게 이 과금 누락이 일어났을 것으로 추정됩니다. 대부분의 에이전트 프레임워크에서 인라인 컴팩션은 사용자가 직접 활성화해야 하는 설정이지만, OpenClaw를 비롯한 일부 인기 도구에서는 기본으로 활성화되어 있습니다.

발견 과정

Xint 연구진은 내부 에이전트 하네스(agent harness)를 독립 컴팩션에서 인라인 컴팩션으로 전환하던 중 이 비정상적인 과금 격차를 발견했습니다. 얼핏 보면 단순한 과금 시스템 오류에 불과해 보일 수 있지만, 이를 어떻게 악용할 수 있는지 따져보면 보안 측면에서 파급력이 훨씬 커집니다.

컴팩션을 추론 엔진으로 악용하다

컴팩션 기능을 거의 공짜로 쓰는 게 과연 심각한 문제일까요? 결론부터 말하자면 그렇습니다. 컴팩션 과정을 거치면 사실상 모든 종류의 추론 작업을 모델에게 지시할 수 있기 때문입니다.

OpenAI는 컴팩션 기능의 내부 구조를 명확히 공개하지 않고 있습니다. 그러나 정황상 컴팩션은 특수한 용도의 추론 작업일 뿐이고, 그 결과물이 사용자가 직접 읽을 수 없는 암호화된 데이터 덩어리(블롭, blob)로 반환되는 것으로 보입니다.

본래 컴팩션은 '맥락 요약'을 위한 기능입니다. 하지만 시스템 프롬프트를 조작하면 얼마든지 원하는 방향으로 동작을 비틀 수 있습니다. 예를 들어, 모델에게 단순히 대화를 요약하는 대신 '입력된 데이터를 분석해 그 결과값을 컴팩션 항목 안에 담으라'고 지시하는 식으로, 임의의 추론 작업을 시킬 수 있습니다. 이후 이렇게 만들어진 컴팩션 항목을 훨씬 저렴한 소형 모델에 전달하여, 내부에 담긴 추론 결과를 그대로 출력하도록 만들면 됩니다.

이러한 기법에 'GhostCompact' 버그까지 결합하면, 최고 성능 모델의 강력한 추론 능력을 헐값에 악용하는 구조가 완성됩니다. Xint 연구진은 이 취약점의 실효성을 증명하기 위해 전체 코드베이스를 분석하는 보안 스캐너 'GhostScan'을 개발해 GitHub에 공개했습니다.

GhostScan은 단 몇 차례의 스캔만으로도 주요 오픈소스 프로젝트에서 실제 제로데이(0-day) 취약점들을 찾아냈으며, 이 중에는 OpenSSL의 취약점(CVE-2026-84783)도 포함되어 있었습니다. 이는 컴팩션 기능을 추론 수단으로 악용하는 방식이 실제 환경에서도 얼마나 강력한지 여실히 보여줍니다. 자체 테스트 결과, GhostScan을 활용한 작업은 정상적인 방식의 일반 추론 요청보다 비용이 평균 40배나 저렴했습니다.

마치며

GhostCompact 취약점은 2026년 9월 21일 OpenAI가 수정 패치를 배포하면서 현재는 해결된 상태입니다.

하지만 이번 사례는 단순한 과금 계산 오류가 어떻게 실질적인 보안 취약점으로 번질 수 있는지 보여주는 중요한 시사점을 남겼습니다. '어떤 추론이든 수행할 수 있는 컴팩션의 유연성'과 '과금 시스템의 맹점'이 맞물리면서, 최고 성능의 AI 모델을 정상 요금을 내지 않고 사용하는 우회로가 열렸기 때문입니다. AI 서비스 아키텍처가 복잡해질수록 이러한 비즈니스 로직 결함은 겉보기에 정상적인 기능 속에 교묘하게 숨어들기 마련입니다. Xint 연구진은 앞으로도 AI 생태계 곳곳에 숨겨진 구조적 취약점을 지속적으로 발굴하고 공유해 나갈 것입니다.

Share article