Skip to content
AI News HubLIVE
Original source2 min read

How We Took Over ChatGPT Accounts

Summary

Parameter Labs disclosed a complex exploit chain in ChatGPT's HTML previews (formerly Canvas) that could leak private data or perform actions on behalf of signed-in users; OpenAI fixed it and paid a $5,000 bounty.

How We Took Over ChatGPT Accounts
Report an error

The correction channel is not available yet. You can copy the article reference below for later.

Correction instructions
Read article

How We Took Over ChatGPT Accounts

Simon Willison’s Weblog

Newsletter

31st October 2026 - Link Blog

How We Took Over ChatGPT Accounts (via) Parameter Labs describe an exploit they found against ChatGPT's implementation of the artifacts pattern (OpenAI used to call this "Canvas" but it looks like the latest revision is called HTML previews), where interactive custom HTML apps are displayed in a sandboxed iframe.

It's important that HTML in these stays tightly sandboxed to avoid untrusted code interacting with OpenAI APIs and accessing private data.

Parameter found quite a complex attack chain. OpenAI use the MathLive JavaScript library as part of their graph support, and that library includes its own virtual keyboard, which can be triggered in the parent page via postMessage() from the sandboxed iframe.

That message receiving code uses innerHTML, so anything that sends a message can add custom HTML to the parent - and there was no mechanism to prevent other sandboxed frames, including HTML preview frames, from calling that method.

This meant untrusted code in an iframe could insert HTML, and while innerHTML doesn't directly execute script elements it could be used to inject a new iframe without sandbox restrictions.

OpenAI’s CSP rules blocked inline scripts entirely, and only allowed script loading from a handful of domains, but one of those was YouTube - and the YouTube oEmbed endpoint could be used to reflect JavaScript back in a way that executed it.

Once the attack had JavaScript execution on ChatGPT, it was trivial to fetch private user data from APIs and exfiltrate it via an image reference.

The end result: you could create a ChatGPT share URL which, when visited by another signed-in user, could exfiltrate their private data or take actions on their behalf.

OpenAI closed the hole and paid out a $5,000 bug bounty, which I think was a bit cheap for a vulnerability this serious.

Recent articles

The October inflection point for vibe game development - 28th October 2026

Battle Drones - a vibe coded RTS with audio-based multiplayer - 20th October 2026

Hello Python 3.15, goodbye 3.10, and now I can use 3.11 - 12th October 2026

A new feature for my blog, built using my voice - 9th October 2026

This is a link post by Simon Willison, posted on 31st October 2026.

iframes 26

javascript 770

sandboxing 58

security 642

xss 61

openai 480

chatgpt 208

content-security-policy 15

Monthly briefing

Sponsor me for $10/month and get a curated email digest of the month's most important LLM developments.

Pay me to send you less!

Sponsor & subscribe

Disclosures

Colophon

©

2002

2003

2004

2005

2006

2007

2008

2009

2010

2011

2012

2013

2014

2015

2016

2017

2018

2019

2020

2021

2022

2023

2024

2025

2026

Key points and analysis

Article intelligence

EngineersIntermediate

Key points

  • The attack abused MathLive's virtual keyboard postMessage handler, which used innerHTML and accepted messages from sandboxed iframes.
  • Attackers injected an unsandboxed iframe and leveraged YouTube oEmbed to reflect JavaScript past CSP restrictions.
  • A malicious ChatGPT share URL could exfiltrate private data or act on behalf of any signed-in visitor.
  • OpenAI patched the hole and awarded $5,000, which the researcher considered low for the severity.

Highlights and analysis are generated automatically and may contain errors. Check the original source.