
CVE-2026-79294에 대한 책임 있는 공개 권고문으로, Moonshot AI Kimi의 HTML 아티팩트 Preview에서 공개 Share 뷰를 통해 발생하는 저장형 XSS로 세션 토큰 탈취 및 계정 탈취가 가능합니다.
| 공급업체 / 제품 | Moonshot AI — Kimi |
| 구성 요소 | HTML 아티팩트 미리보기 렌더링, 공개 Share 뷰 |
| 취약점 | CWE-79 — 웹 페이지 생성 중 입력의 부적절한 중화 |
Kimi는 모델이 생성한 HTML 아티팩트를 애플리케이션 자체의 오리진 내부에 있는 미리보기 창에서 스크립트를 중화하지 않고 렌더링합니다. 대화를 공유하면 해당 아티팩트가 공개 Share URL에 게시되므로, 한 계정이 작성한 스크립트가 링크를 여는 모든 사람의 브라우저에서 실행됩니다.
Kimi가 의존하는 세션 값은 localStorage에 보관되므로 해당 스크립트가 읽을 수 있습니다:
access_token
refresh_token
msh_user_id
따라서 스크립트 실행은 스크립트 실행에서 끝나지 않습니다. 이 세 가지 값은 피해자의 브라우저에서 읽혀 어디로든 전송될 수 있으며, 재생하여 해당 피해자로서 인증된 세션을 얻을 수 있습니다.
공격자 계정 → 유출 스크립트가 포함된 아티팩트 → 공개 Share
→ 피해자가 링크를 염 → 스크립트가 Kimi의 오리진에서 실행됨
→ 세 가지 localStorage 값이 공격자에게 도달
→ 깨끗한 브라우저에 재생 → 피해자로서 인증됨
공격자에게는 일반 계정만 있으면 됩니다. 피해자는 로그인한 상태에서 공유 링크를 열기만 하면 되는데, 이는 공유 링크의 본래 용도입니다.
| 관찰된 사항 | 방법 |
|---|---|
| 스크립트가 피해자의 브라우저에서 실행됨 | 피해자의 세션에서 발생한 요청이 공격자의 엔드포인트에 도달함 |
| 세 가지 값을 스크립트가 읽을 수 있음 | 세 값 모두 해당 요청 본문에 존재함 |
| 값 자체만으로 인증됨 | Kimi에 한 번도 로그인한 적 없는 브라우저에 기록함. 새로고침 후 해당 브라우저는 인증된 세션을 보유함 |
| 값이 원인임 | 대조군: 동일한 브라우저, 값 생략, 새로고침 — 인증되지 않은 상태로 유지됨 |
관련된 두 계정 모두 연구자가 생성하고 통제했습니다. 어떤 시점에도 제3자의 데이터는 접근되지 않았습니다.
공격 체인은 위에 전부 문서화되어 있습니다. 작동하는 페이로드와 수신 엔드포인트는 공개하지 않습니다 — 이를 게시하면 공격을 설명하는 것이 아니라 무장시키는 셈이 되기 때문입니다.
아티팩트 프롬프트는 다음과 같은 형태입니다:
Generate an HTML page that reads the three localStorage values above
and POSTs them to <attacker endpoint>.