ChatGPT의 공유 링크를 열면 예상과 다른 결과가 나오는 경우가 있습니다. 10월 26일, 공유 링크가 계정 탈취로 이어지는 취약점이 공개되었고, 같은 날 $5천 달러 버그 바운티로 패치되었습니다. 원인은 MathLive라는 수학 키보드 라이브러리의 postMessage 처리 방식과, ChatGPT iframe의 CSP(content security policy) 우회 가능성이 겹친 결과입니다. GitHub 다이제스트 이슈와 공개된 버그 바운티 정보를 근거로, 기술적 경로를 따라갑니다. 이 글은 ChatGPT의 실제 소스를 역분석한 것이 아니라, 공개된 정보와 재현 가능한 원리만 다룹니다.
두 가지 기술 요소가 만나는 지점
취약점은 단일 실수가 아니라, 두 가지 설계 선택이 겹히면서 발생했습니다.
첫째, MathLive의 postMessage 체인입니다. ChatGPT UI에는 수학 수식을 입력하기 위한 MathLive 라이브러리가 포함되어 있습니다. 이 라이브러리는 iframe 내부에서 postMessage를 통해 부모 창과 메시지를 주고받습니다. 공유 링크가 열릴 때, MathLive가 외부 출처에서 로드된 경우에도 postMessage 수신 경로를 닫지 않는 구조였습니다.
둘째, iframe CSP 우회입니다. ChatGPT는 iframe으로 렌더링되지만, CSP가 postMessage 수신을 완전히 제한하지 않았습니다. MathLive가 보내는 메시지 형식을 위조하면, ChatGPT가 신뢰하는 채널로 메시지를 전달할 수 있었습니다.

이미지: MathLive postMessage 체인과 iframe CSP 우회 구조 개념도.
공격 경로: 단계별로 보기
공개된 정보를 바탕으로 재구성한 공격 경로는 다음과 같습니다.
단계 1: 공유 링크 생성. 공격자가 ChatGPT에서 대화를 생성하고 공유 링크를 얻습니다. 이 링크는 chatgpt.com/?share=... 형식입니다.
단계 2: MathLive 외부 로드. 공유 링크가 열릴 때, MathLive 라이브러리가 공격자가 제어하는 외부 출처에서 로드됩니다. 일반적으로 ChatGPT의 도메인에서 로드되지만, CSP가 MathLive 소스를 완전히 제한하지 않았습니다.
단계 3: postMessage 체인 조작. MathLive가 iframe 내부에서 postMessage를 보낼 때, 공격자가 제어하는 MathLive 버전이 위조된 메시지를 보냅니다. ChatGPT는 이 메시지를 신뢰할 수 있는 채널로 인식합니다.
단계 4: 계정 컨텍스트 탈취. 위조된 메시지가 ChatGPT의 인증 컨텍스트를 조작하여, 공격자가 계정의 일부 동작을 대리 실행할 수 있게 됩니다.
왜 $5천 달러였나
버그 바운티 금액은 영향력과exploit 난이도로 결정됩니다. 이 취약점은 $5천 달러로 평가되었는데, 이는 다음과 같은 요소를 반영합니다.
| 요소 | 설명 |
|---|---|
| 영향력 | 공유 링크만으로도 계정 탈취 가능. 사용자가 링크를 열면 자동 발생. |
| exploit 난이도 | MathLive 라이브러리의 postMessage 처리 방식을 이해해야 함. 일반 사용자에게는 어렵지만, 보안 연구자라면 가능. |
| 수정 범위 | MathLive의 postMessage 수신 경로를 공유 링크 컨텍스트로 제한하면 해결. |
| 사용자 수 | ChatGPT 사용자는 수천만 명. 영향받는 사용자 규모가 큼. |
패치 내용과 남은 질문
10월 26일 패치된 내용은 공개된 MathLive postMessage 체인의 수신 경로를 공유 링크 컨텍스트로 제한하는 것이었습니다. 구체적인 코드 변경은 버그 바운티 프로그램의 비공개 정책에 따라 다르지만, 일반적으로 다음 중 하나 이상이 적용됩니다.
- MathLive iframe의
sandbox속성에allow-scripts와allow-same-origin을 분리하여 적용 - postMessage 수신 시 출처(origin)를 추가로 검증
- 공유 링크 컨텍스트에서 MathLive 로드 소스를 고정
패치 후 남은 질문은 다음과 같습니다.
| 질문 | 확인할 사항 |
|---|---|
| 모든 MathLive 버전에서 postMessage 경로가 제한되었는가 | 버전별 테스트 결과 |
| 공유 링크가 아닌 일반 채팅에서도 동일한 경로가 열려있는가 | 일반 채팅 컨텍스트 테스트 |
| 다른 iframe 기반 라이브러리에도 동일한 우회 가능성이 있는가 | 유사 라이브러리 검토 |
도입 전에 남는 제약
이 글에서 측정한 것은 공개된 정보와 재현 가능한 원리입니다. ChatGPT의 실제 소스를 역분석한 것이 아니므로, 패치 후의 정확한 동작은 OpenAI의 공식 발표를 확인해야 합니다. 또한 $5천 달러 버그 바운티가 모든 영향을 받는 시나리오를 커버하는 것은 아니며, 아직 공개되지 않은 추가 경로가 있을 수 있습니다.
ChatGPT 공유 링크를 사용할 때 주의할 점은, 링크를 여는 브라우저 세션에 현재 계정이 로그인되어 있어야 한다는 것입니다. 시크릿 모드나 로그아웃 상태에서는 취약점이 영향을 미치지 않습니다.
아래 유료 강의는 AI 서비스의 보안 검증과 버그 바운티 참여 방법을 다룹니다. ChatGPT 취약점 자체의 사용법이나 이 실험의 재현을 제공하는 강의는 아니며, 링크는 홍보 링크입니다.