Parameter Labs heeft een beveiligingslek ontdekt in de 'artifacts'-functie (HTML-previews) van ChatGPT. De aanvalsketen maakte gebruik van de MathLive JavaScript-bibliotheek, waarbij via postMessage() en innerHTML onbetrouwbare HTML in de bovenliggende pagina kon worden geïnjecteerd.
Om de Content Security Policy (CSP) van OpenAI te omzeilen, werd gebruikgemaakt van een YouTube oEmbed-eindpunt om JavaScript uit te voeren. Zodra deze uitvoering was bereikt, konden aanvallers via API's privégegevens van gebruikers ophalen en exfiltreren. Dit kon worden getriggerd door een ingelogde gebruiker een specifieke deel-URL te laten bezoeken. OpenAI heeft de kwetsbaarheid inmiddels verholpen en een bug bounty uitgekeerd.
Hoe we ChatGPT-accounts overnamen
Het is van groot belang dat HTML in deze frames strikt gesandboxed blijft om te voorkomen dat onbetrouwbare code interactie heeft met OpenAI-API's en toegang krijgt tot privégegevens.
De aanvalsketen
Parameter vond een complexe aanvalsketen. OpenAI maakt gebruik van de MathLive JavaScript-bibliotheek als onderdeel van hun grafiekondersteuning. Deze bibliotheek bevat een eigen virtueel toetsenbord, dat via postMessage() vanuit het gesandboxed iframe kan worden geactiveerd op de bovenliggende pagina.
De code die deze berichten ontvangt, maakt gebruik van innerHTML. Dit betekent dat alles wat een bericht verstuurt, aangepaste HTML aan de bovenliggende pagina kan toevoegen. Er was geen mechanisme aanwezig om te voorkomen dat andere gesandboxed frames, inclusief de HTML-preview-frames, deze methode aanriepen.
Dit hield in dat onbetrouwbare code in een iframe HTML kon invoegen. Hoewel innerHTML geen script-elementen direct uitvoert, kon het worden gebruikt om een nieuwe iframe zonder sandbox-beperkingen te injecteren.
Omzeilen van de Content Security Policy (CSP)
De CSP-regels van OpenAI blokkeerden inline-scripts volledig en staan het laden van scripts alleen toe vanaf een klein aantal domeinen. Een van deze domeinen was YouTube, en het YouTube oEmbed-eindpunt kon worden gebruikt om JavaScript te reflecteren op een manier waardoor het werd uitgevoerd.
Gevolgen en resultaat
Zodra de aanval JavaScript-uitvoering op ChatGPT had bereikt, was het triviaal om privégebruikersgegevens via API's op te halen en deze te exfiltreren via een referentie naar een afbeelding.
Het eindresultaat was dat men een ChatGPT-deel-URL kon maken die, wanneer bezocht door een andere ingelogde gebruiker, diens privégegevens kon exfiltreren of acties in diens naam kon ondernemen.
OpenAI heeft het lek gedicht en een bug bounty van $ 5.000 betaald, wat naar mijn mening wat aan de lage kant is voor een kwetsbaarheid van deze ernst.
Hoe we ChatGPT-accounts overnamen
Het is van groot belang dat HTML in deze frames strikt gesandboxed blijft om te voorkomen dat onbetrouwbare code interactie heeft met OpenAI-API's en toegang krijgt tot privégegevens.
De aanvalsketen
Parameter vond een complexe aanvalsketen. OpenAI maakt gebruik van de MathLive JavaScript-bibliotheek als onderdeel van hun grafiekondersteuning. Deze bibliotheek bevat een eigen virtueel toetsenbord, dat via postMessage() vanuit het gesandboxed iframe kan worden geactiveerd op de bovenliggende pagina.
De code die deze berichten ontvangt, maakt gebruik van innerHTML. Dit betekent dat alles wat een bericht verstuurt, aangepaste HTML aan de bovenliggende pagina kan toevoegen. Er was geen mechanisme aanwezig om te voorkomen dat andere gesandboxed frames, inclusief de HTML-preview-frames, deze methode aanriepen.
Dit hield in dat onbetrouwbare code in een iframe HTML kon invoegen. Hoewel innerHTML geen script-elementen direct uitvoert, kon het worden gebruikt om een nieuwe iframe zonder sandbox-beperkingen te injecteren.
Omzeilen van de Content Security Policy (CSP)
De CSP-regels van OpenAI blokkeerden inline-scripts volledig en staan het laden van scripts alleen toe vanaf een klein aantal domeinen. Een van deze domeinen was YouTube, en het YouTube oEmbed-eindpunt kon worden gebruikt om JavaScript te reflecteren op een manier waardoor het werd uitgevoerd.
Gevolgen en resultaat
Zodra de aanval JavaScript-uitvoering op ChatGPT had bereikt, was het triviaal om privégebruikersgegevens via API's op te halen en deze te exfiltreren via een referentie naar een afbeelding.
Het eindresultaat was dat men een ChatGPT-deel-URL kon maken die, wanneer bezocht door een andere ingelogde gebruiker, diens privégegevens kon exfiltreren of acties in diens naam kon ondernemen.
OpenAI heeft het lek gedicht en een bug bounty van $ 5.000 betaald, wat naar mijn mening wat aan de lage kant is voor een kwetsbaarheid van deze ernst.