ChatGPT 공개 공유 링크만 열면 계정 탈취: MathLive postMessage와 YouTube JSONP를 엮은 샌드박스 우회
- Parameter.ai 연구팀이 공개 ChatGPT 공유 링크를 여는 것만으로 피해자의 로그인 세션에서 임의 JavaScript가 실행되는 취약점을 발견했고, OpenAI는 10월 26일 수정하고 P1로 분류함
- 공격 사슬은 대화에 포함된 그래프가 불러온 MathLive에서 시작됨. 이 라이브러리의 가상 키보드 리스너가 origin 정책 none으로 아무 출처의 레이아웃 갱신 메시지를 받았고, createHTML이 검증 없이 넘긴 HTML을 innerHTML에 넣음
- 이어 샌드박스 속성 없는 iframe srcdoc으로 chatgpt.com 출처를 상속받았고, CSP가 인라인 스크립트를 막는 대신 허용한 YouTube oEmbed JSONP 콜백 파라미터로 스크립트를 실행함
- 피해자는 앱 설치, 프로젝트 참여, 코드 붙여넣기, 개발자 도구 없이 링크만 열면 됐고, 페이로드는 대화 목록 열람과 공유된 적 없는 비공개 대화 읽기, 외부 서버 전송, 피해자 자격의 인증 API 호출까지 가능했음
- 글에서 인용된 바에 따르면 OpenAI는 두 프런트엔드가 보고된 메시지를 거부했다고 확인하고 총 5,000달러 포상금을 지급했음. 해커뉴스에서는 이 액수가 지나치게 낮다는 지적이 이어짐
Hacker News opinions
비밀번호는 왜 쓰냐는 얘기 나올 때가 됐음. 그냥 제발 내 계정으로 로그인하지 말아달라고 부탁하는 명예 시스템으로 가야 하는 거 아님?
링크 클릭하지 마세요, 그럼 보안 교육비 50만원입니다 라고 하면 다들 고개 끄덕이겠지. 근데 요즘 회사 메일이 일회용 코드 로그인이나 링크 클릭을 시키니까 사용자 잘못만은 아님.
우리 회사도 Outlook safelinks가 링크를 이상하게 바꿔놔서 그걸 확인하라고 함. 메일 보안 스캐너가 링크를 긁어가면서 GET만으로 가입 확인이 되는 서비스가 많은 게 더 문제임.
요즘 자기 블로그는 아무도 직접 안 쓰나? 이 글도 좀 심함. P1인데 얼마 받고 대충 쓴 느낌임.
나는 아직 LLM 없이 직접 씀. 내가 주제를 제대로 이해하는지 테스트하려는 목적도 있고. 순수 HTML에 vim, 프레임워크 없음.
이거랑 별개로 ChatGPT 데스크톱 앱에서 Work 채팅을 한 번이라도 시작한 컴퓨터의 파일 시스템에 원격 접근이 가능하다는 이슈도 있음. 합치면 꽤 심각함.
Claude Code 터미널도 /rc로 원격 제어를 켜면 비슷한 구조임. 세션은 로컬에서 돌지만 인증된 사용자가 인터넷으로 접근 가능하고, 대화를 나가면 세션이 끊김.
수백만 줄 코드는 다 어디 갔냐. 모놀리스를 키우면 복잡도랑 버그 표면이 같이 늘어남. LOC를 줄이는 게 답이고, 코드 많이 짰다는 홍보보다 제대로 동작하는 소프트웨어를 만들어야 함.
마이크로서비스도 별로 안 나음. 어려운 문제를 분산 컴퓨팅이라는 또 다른 어려운 문제로 바꾼 것뿐임.
포상금 5,000달러는 너무 낮음. 내가 작은 스타트업에서 버그바운티 운영할 때 주던 수준임. 이러면 다른 연구자들이 그냥 안 보고할 수도 있는데.
서버사이드 취약점은 금방 패치되니까 가치가 낮다는 의견도 이해는 하는데, 시총 1조 달러 회사가 5,000달러면 좀 아님. 100k짜리 버그는 헤드라인이 되지만 5k면 아무도 심각성을 모름.
참고로 Pro 플랜 사용자에게 월 최대 500달러 API 크레딧을 준다고 발표한 게 아이러니함.
이거 OAuth 문제 아니지 않나? postMessage 수신자가 발신자를 확인 안 한 HTML 인젝션인데. OAuth가 왜 나오는지 모르겠음.
postMessage, JSONP, iframe, img 태그 같은 옛날 기법을 차근차근 쌓아 올린 writeup은 좋았음. 공격 범위를 단계별로 키우는 구성이 깔끔했음.