Parameter Labs, ChatGPT HTML 미리보기 샌드박스 우회로 계정 탈취 가능성 공개
How We Took Over ChatGPT Accounts
Parameter Labs는 ChatGPT의 HTML 미리보기(아티팩트) 기능에서 샌드박스 iframe을 빠져나가는 공격 체인을 찾아 공개했다. 이를 통해 다른 로그인 사용자의 비공개 데이터를 빼내거나 대신 작업을 수행할 수 있었다. 공격은 MathLive 라이브러리의 가상 키보드를 연결고리로 삼았다. 샌드박스 iframe에서 postMessage()로 부모 페이지의 가상 키보드를 띄울 수 있었고, 해당 메시지 수신 코드가 innerHTML을 사용해 부모 페이지에 임의의 HTML을 삽입할 수 있었다. 다른 샌드박스 프레임이 이 메서드를 호출하는 것을 막는 장치가 없었기 때문에, 삽입된 HTML로 샌드박스 제한이 없는 새 iframe을 만들 수 있었다. OpenAI의 CSP는 인라인 스크립트를 차단하고 일부 도메인만 허용했지만, 허용 목록에 포함된 YouTube oEmbed 엔드포인트가 JavaScript를 되돌려 실행하는 데 쓰였다. ChatGPT 페이지에서 JavaScript 실행이 가능해지자 API로 비공개 사용자 데이터를 가져와 이미지 참조를 통해 외부로 빼낼 수 있었다. 최종적으로는 ChatGPT 공유 URL을 로그인한 다른 사용자가 열기만 해도 피해가 발생하는 형태였다. OpenAI는 해당 취약점을 막았고 버그 바운티로 5,000달러를 지급했다. 기사 작성자 Simon Willison은 이 취약점의 심각성에 비해 보상이 적은 편이라고 평가했다.
샌드박스 iframe에서 부모 페이지의 innerHTML을 호출할 수 있었다는 점과 허용 목록에 포함된 YouTube oEmbed 엔드포인트가 CSP 우회에 쓰인 점은, 외부 HTML을 렌더링하는 서비스에서 postMessage 수신부와 CSP 허용 도메인을 함께 점검해야 한다는 근거가 된다.
원문 출처
Simon Willison's Weblog