Un link partajat ChatGPT putea rula cod malițios și citi conversațiile private
Un singur link de partajare ChatGPT — genul pe care îl trimitem zilnic pe e-mail, în tichete de suport sau pe rețelele sociale — era suficient pentru a rula codul unui atacator în sesiunea oricui îl deschidea. De acolo, codul putea lista conversațiile recente ale victimei, putea deschide un chat privat care nu fusese partajat niciodată și îi putea trimite conținutul către un server extern. OpenAI a remediat problema, iar utilizatorii ChatGPT nu trebuie să facă nimic.
Ce s-a întâmplat
Vulnerabilitatea a fost raportată prin programul de bug bounty al OpenAI pe 18 octombrie și a fost remediată opt zile mai târziu. OpenAI a reprodus atât execuția de cod, cât și accesul la chaturile private, a ridicat severitatea de la P2 la P1 — cea mai gravă categorie — și a aplicat corecția pe două versiuni ale interfeței web ChatGPT. Până pe 26 octombrie, ambele versiuni respingeau mesajele de care depindea atacul. Recompensa plătită a fost de 5.000 de dolari.
Demonstrația a fost un test controlat între conturi separate. Nu există raportări privind folosirea tehnicii împotriva unor utilizatori reali.
Cum funcționa atacul
Momeala era o conversație partajată cu aspect obișnuit. Victima nu trebuia să instaleze nimic, să se autentifice prin atacator sau să intre într-un workspace. În varianta cea mai sigură, deschidea linkul și apăsa o singură dată butonul Preview din ChatGPT; o variantă ulterioară deschidea Preview automat, deci simpla accesare a linkului era de ajuns.
Atacul înlănțuia trei decizii de design care, luate separat, păreau inofensive:
- O previzualizare izolată. ChatGPT poate afișa un bloc HTML dintr-un chat ca pe o mică pagină web. Previzualizarea rulează într-un cadru izolat, pe o adresă separată, și nu poate citi pagina principală ChatGPT. Această izolare a rezistat.
- Un „ascultător” prea încrezător. Același chat conținea un grafic interactiv, care încărca biblioteca MathLive în pagina principală ChatGPT. MathLive lăsa activ un ascultător pentru mesaje legate de tastatura sa de pe ecran — fără să verifice ce cadru le trimisese.
- HTML ascuns într-un „layout de tastatură”. Mesajele respective puteau transporta HTML brut sub formă de date de layout. Astfel, previzualizarea izolată putea trimite un mesaj peste granița dintre cadre, iar HTML-ul ei ajungea în pagina principală, de încredere.
HTML-ul injectat crea un nou cadru, neizolat, pe care browserul îl trata ca parte din chatgpt.com. Politica de securitate a conținutului bloca scripturile inline, dar permitea scripturi servite de YouTube, așa că ultima parte a codului era încărcată de acolo. Rulând cu accesul complet al victimei, codul apela direct API-urile autentificate ale ChatGPT — deci nu era limitat la ce se afla pe ecran. În principiu, putea acționa în numele victimei în tot contul.
Pasul cu YouTube a fost doar o ocolire a politicii de securitate, nu cauza problemei. Blocarea lui ar fi lăsat în continuare o previzualizare nesigură capabilă să injecteze HTML în site-ul principal.
De ce contează
Asistenții AI conțin tot mai multe informații sensibile: cod sursă, contracte, date despre clienți, planuri interne. Un link de partajare este un format de încredere, ușor de deschis, iar acest caz arată cum o funcție gândită pentru comoditate poate deveni un mijloc de atac. Este și un exemplu clasic al modului în care o izolare bine construită poate fi anulată de o componentă terță aflată de cealaltă parte a zidului: un singur handler de mesaje fără verificarea originii a fost de ajuns.
Ce e de făcut
- Utilizatorii ChatGPT: nu trebuie să instaleze sau să reseteze nimic — remedierea este pe partea OpenAI. Fiți totuși prudenți cu chaturile partajate de la expeditori necunoscuți și evitați butonul Preview pe conținut în care nu aveți încredere.
- Organizațiile care folosesc asistenți AI: tratați istoricul conversațiilor ca date sensibile. Stabiliți reguli despre ce poate fi introdus în ele și verificați ce conturi și integrări au acces.
- Echipele web și de produs: auditați fiecare listener
postMessagedin propriul cod și din bibliotecile incluse. Validați originea expeditorului, nu acceptați niciodată HTML brut printr-un canal de mesaje și considerați orice script terț permis de politica de securitate a conținutului ca parte din suprafața de atac.
Astfel de bug-uri se ascund la îmbinarea dintre componente — un listener într-o bibliotecă, o excepție de politică în alta. Este exact tipul de problemă pe care revizuirea de cod asistată de AI a echipei noastre este construită să o identifice: urmărește cum circulă datele nesigure prin front-end și prin dependențe, semnalând verificările de origine lipsă și punctele nesigure de inserare a HTML-ului înainte de lansare.
