OpenAI안전·권리·사회

ChatGPT HTML 미리보기 취약점, 공유 링크로 계정 탈취 가능했다

Parameter Labs가 ChatGPT 공유 링크를 연 로그인 사용자의 비공개 데이터를 빼내는 공격 사슬을 공개했다. OpenAI는 구멍을 막고 보상금 5,000달러를 지급했다.

루카스 ·

Parameter Labs가 ChatGPT의 HTML 미리보기 기능에서 취약점 여러 개를 이어 붙여, 공유 링크를 연 다른 로그인 사용자의 비공개 데이터를 빼내는 방법을 공개했다. OpenAI는 이 구멍을 막았고 5,000달러의 버그 바운티(취약점 신고 보상금)를 지급했다.

공격 대상은 ChatGPT가 쓰는 아티팩트 방식이다. 사용자가 만든 대화형 HTML 앱을 샌드박스가 걸린 iframe 안에 보여 주는 기능으로, OpenAI는 이전에 Canvas라고 불렀고 최신 판은 HTML 미리보기라는 이름으로 보인다. 신뢰할 수 없는 코드가 OpenAI API에 접근하거나 개인 데이터를 보지 못하게 하려면 이 HTML을 샌드박스에 단단히 가둬야 한다.

공격은 그래프 기능에서 시작한다. OpenAI가 그래프 지원에 쓰는 JavaScript 라이브러리 MathLive에는 자체 가상 키보드가 있고, 샌드박스 iframe이 postMessage()로 부모 페이지에서 이 키보드를 띄울 수 있다. 메시지를 받는 코드가 innerHTML을 쓰는데, HTML 미리보기 프레임을 포함해 다른 샌드박스 프레임이 이 기능을 부르지 못하게 막는 장치가 없었다. 그래서 iframe 안의 신뢰할 수 없는 코드가 부모 페이지에 HTML을 넣을 수 있었고, 이를 이용해 샌드박스 제한이 없는 새 iframe을 심을 수 있었다.

다음 장벽은 콘텐츠 보안 정책(CSP)이었다. OpenAI의 CSP는 인라인 스크립트를 전면 차단하고 소수 도메인에서만 스크립트를 불러오게 했다. 허용 도메인 중에 YouTube가 있었고, 공격자는 YouTube oEmbed 엔드포인트를 이용해 JavaScript를 반사시켜 실행되게 할 수 있었다. ChatGPT에서 JavaScript를 실행하게 되면 API에서 비공개 사용자 데이터를 가져와 이미지 참조에 실어 밖으로 보내는 일은 어렵지 않았다.

결과적으로 공격자는 ChatGPT 공유 URL 하나를 만들어 둘 수 있었다. 로그인한 다른 사용자가 이 주소를 열면 그 사람의 비공개 데이터가 유출되거나, 공격자가 그 사용자 대신 동작을 실행할 수 있었다. 이 내용을 소개한 Simon Willison은 이만큼 심각한 취약점에 5,000달러는 좀 싼 편(a bit cheap)이라는 개인 의견을 덧붙였다.

댓글

기사에 대한 의견이나 틀린 내용 제보를 남겨 주세요.

댓글을 불러오고 있습니다.