A Parameter Labs felfedezett egy összetett sebezhetőségi láncot a ChatGPT „artifacts” mintájának — korábban "Canvas" — HTML-előnézeteiben, amely lehetővé tette, hogy egy sandboxolt iframe kikerülje a korlátozásokat és végrehajtson JavaScriptet a szülőoldalon. Az OpenAI javította a hibát és 5 000 dolláros hibajutalmat fizetett ki.
Mi történt és milyen komponensek érintettek
- A sebezhetőség az OpenAI által használt HTML preview/interactive custom HTML app megoldásban volt, ahol az alkalmazásokat sandboxolt iframe-ekben jelenítik meg.
- A MathLive JavaScript könyvtár szerepet játszott az incidensben: a könyvtár saját virtuális billentyűzetet tartalmaz, amely a szülőoldalon postMessage() üzenetekkel aktiválható a sandboxolt iframe-ből.
- A szülőoldal üzenetfogadó kódja innerHTML-t használt az üzenet tartalmának beszúrására. Ez lehetővé tette, hogy bármely üzenetet küldő kód tetszőleges HTML-t adjon hozzá a szülőoldalhoz.
Hogyan vezetett ez kódfuttatáshoz és adatkinyeréshez
- Bár az innerHTML önmagában nem hajtja végre közvetlenül a script elemeket, alkalmas volt új iframe beszúrására anélkül, hogy annak sandbox attribútuma megakadályozná a kódfuttatást.
- Az OpenAI tartalombiztonsági szabályzata (CSP) megakadályozta a beágyazott inline scripteket, és csak néhány megbízható domaint engedélyezett script betöltésre. Egyik ilyen engedélyezett forrás a YouTube volt.
- A YouTube oEmbed végpont visszatükrözhetett JavaScriptet úgy, hogy az végrehajtódott a kontextusban. Ezzel a lánccal a támadó JavaScriptet tudott futtatni a ChatGPT oldalon.
- A JavaScript futtatásával könnyen hozzáférhettek a felhasználók privát adatai az API-kon keresztül, és ezeket például egy képhivatkozáson keresztül kinyerve el tudták távolítani az oldalról.
Mire volt képes a támadó
A kihasználás végső kimenetele az volt, hogy egy olyan ChatGPT megosztási URL-t lehetett létrehozni, amelyet egy bejelentkezett felhasználó meglátogatva a saját privát adatait kiszivárogtatta vagy a felhasználó nevében műveleteket hajtott végre.
Reakció és jutalom
Az OpenAI befoltozta a sebezhetőséget, és a Parameter Labs számára 5 000 dolláros bug bounty-t fizetett. A felfedezésről és a részletekről a Hacker News is beszámolt.
Miért számít ez fontosnak
A támadási lánc több, látszólag ártalmatlan komponens kölcsönhatására támaszkodott (postMessage, innerHTML, oEmbed), ami jól mutatja, hogy a sandboxok és a CSP-k önmagukban nem garantálnak teljes védelmet, ha a komponensek kommunikációja és tartalom-visszatükrözése nincs gondosan korlátozva. Ilyen eseteknél különös figyelmet igényel a külső beágyazások és üzenetkezelés biztonsága.



