Kenapa Satu Link ChatGPT Bisa Mengambil Alih Akunmu?
Satu link share ChatGPT bisa menjalankan kode penyerang di sesi login korbannya dan membaca chat pribadi. Ini cara kerja rantainya dan pelajaran untukmu.
Bayangkan kamu menerima sebuah link percakapan ChatGPT dari seseorang yang kamu kenal. Link itu terlihat biasa saja, dan kamu membukanya seperti membuka tautan lain. Halaman percakapan muncul, grafik dan pratinjau kode tampil normal, dan tidak ada yang terasa aneh.
Namun di balik layar, kode milik penyerang sudah berjalan di dalam sesi login kamu. Kode itu bisa melihat daftar percakapanmu, membuka chat pribadi yang tidak pernah kamu bagikan, lalu mengirim isinya ke server luar. Semua itu hanya karena kamu membuka sebuah link.

Inilah yang ditemukan tim peneliti keamanan Parameter pada Oktober 2026. Mereka menunjukkan bahwa satu tautan share ChatGPT bisa berubah menjadi jalan pintas untuk mengambil alih akun korban. OpenAI sudah memperbaikinya pada 26 Oktober 2026, tetapi cara kerja rantainya menyimpan pelajaran penting untuk semua orang yang membangun produk web.
Dua Fitur Polos yang Saling Membuka Celah
Rantai serangan ini berawal dari dua fitur ChatGPT yang masing-masing terlihat aman. Fitur pertama adalah Preview, yang mengubah blok kode HTML menjadi halaman web kecil. Karena kode itu bisa berisi apa saja, ChatGPT menjalankannya di dalam frame terbatas pada alamat web yang berbeda, sehingga kode di dalamnya tidak bisa membaca halaman ChatGPT di sekitarnya.
Fitur kedua adalah grafik interaktif. Saat sebuah percakapan berisi grafik, ChatGPT memuat pustaka matematika bernama MathLive untuk menggambar grafik itu. Tanpa disadari, MathLive juga memasang sebuah pendengar pesan di halaman utama ChatGPT, untuk keperluan papan ketik virtual di layar. Dua fitur yang tidak berhubungan ini ternyata menciptakan jalur dari frame terbatas menuju halaman utama.
Perlu kamu pahami, browser punya mekanisme bernama postMessage yang memungkinkan dua frame bertukar pesan walau tidak bisa saling membaca halaman. Mekanisme ini aman selama penerima memeriksa siapa pengirimnya. Di sinilah masalah pertama muncul.
Pesan yang Seharusnya Ditolak
Peneliti Parameter mengirim dua pesan dari Preview menuju halaman utama. Pesan pertama mengganti tata letak papan ketik virtual dengan HTML buatan mereka. Pesan kedua meminta MathLive menampilkan papan ketik itu, sehingga HTML tersebut dirender di halaman ChatGPT yang asli.
MathLive ternyata menerima pesan itu tanpa memeriksa asal pengirimnya. Pengaturan tingkat atasnya memakai kebijakan origin none, yang berarti pesan dari alamat web mana pun diterima. MathLive lalu menggabungkan tata letak itu menjadi string HTML dan memasukkannya ke innerHTML di halaman utama.
Satu helper bernama createHTML sempat terlihat seperti membersihkan nilai itu, tetapi ternyata tidak. Helper itu hanya menandai string tersebut sebagai tepercaya dan meneruskannya apa adanya. Tag script yang dimasukkan lewat innerHTML memang tidak langsung berjalan, tetapi peneliti memakai iframe dengan srcdoc, sebuah fitur browser yang membawa HTML langsung di dalam atribut.
Frame itu dimasukkan MathLive ke dokumen utama tanpa atribut sandbox. Karena halaman utama ChatGPT yang membuat frame itu, browser memberinya identitas chatgpt.com. Kode di dalam frame tersebut akhirnya bisa mengakses halaman induknya.
YouTube Jadi Jalan Pintas Melewati CSP
Setelah kode bisa berjalan di halaman utama, ada satu penghalang lagi, yaitu Content Security Policy atau CSP. Kebijakan ini mengontrol script apa saja yang boleh dimuat halaman, dan kebijakan ChatGPT dengan benar memblokir JavaScript inline. Namun kebijakan itu mengizinkan script dari YouTube.

Endpoint oEmbed YouTube mendukung parameter callback bergaya JSONP, yang merespons dalam bentuk JavaScript, bukan JSON biasa. Endpoint itu mencoba menolak callback yang tidak valid, tetapi ia menempatkan callback ke dalam respons sebelum mengembalikan pesan kesalahannya.
Peneliti mengakhiri callback mereka dengan titik koma dan kata void, sehingga objek yang ditambahkan YouTube menjadi tidak berbahaya. Karena YouTube sudah diizinkan CSP, browser memuat respons itu sebagai script dan menjalankan callback peneliti di dalam frame baru. Pada titik ini, JavaScript arbitrer sudah berjalan sebagai chatgpt.com.
Dari Satu Klik ke Akun Penuh
Menampilkan alert saja sudah membuktikan kode mereka berjalan sebagai chatgpt.com, tetapi itu hal yang paling tidak menarik dari temuan ini. Kode yang berjalan di sesi korban bisa memakai konteks login yang sama dengan aplikasi web ChatGPT pada umumnya.
Payload peneliti membaca informasi sesi yang sudah tersedia di halaman, lalu memanggil API percakapan ChatGPT sebagai korban. Pertama, ia mendaftar percakapan terbaru korban. Kemudian, ia meminta isi sebuah percakapan pribadi yang tidak pernah dibagikan kepada penyerang.
Setelah respons itu diterima, mengirim data ke luar menjadi mudah. Payload membuat permintaan gambar biasa ke server yang dikendalikan peneliti. Mereka sengaja hanya mengirim sebagian kecil respons, tetapi kode yang disuntikkan sudah menerima seluruh respons API dan bisa membaca isinya.
Hasilnya adalah primitif pencurian data lintas pengguna yang praktis. Sebuah percakapan publik yang berbahaya bisa berjalan di dalam sesi login pengguna lain, mendaftar percakapan pribadi, mengambil isi pesan, dan mengirim data yang dipilih ke server penyerang. Karena kode berjalan dengan akses login aplikasi web, jangkauannya tidak terbatas pada endpoint percakapan saja. Peneliti menyimpulkan bahwa mereka pada dasarnya bisa melakukan tindakan apa pun atas nama akun korban.
Kronologi dan Perbaikan OpenAI
Parameter mengonfirmasi jalur ini pada 13 Oktober 2026, lalu mereproduksinya lewat antarmuka normal pada 14 Oktober. Pada 16 Oktober, mereka mengonfirmasi pengiriman lewat share publik antar akun dan workspace yang berbeda dengan satu klik Preview. Sehari kemudian, mereka mengonfirmasi Preview otomatis yang terbuka sendiri saat tautan dibuka.
Laporan dikirim ke program bug bounty OpenAI pada 18 Oktober 2026. Pada 21 Oktober, OpenAI mereproduksi masalah itu dan menaikkan tingkat keparahan dari P2 menjadi P1. Perbaikan digulirkan ke dua versi frontend web ChatGPT, dan pada 26 Oktober OpenAI mengonfirmasi kedua versi sudah menolak pesan MathLive lintas frame yang dilaporkan.
OpenAI memberikan total hadiah 5.000 dolar AS untuk temuan ini. Tidak ada penyalahgunaan di dunia nyata yang dilaporkan, dan pengujian Parameter hanya memakai akun yang mereka kendalikan sendiri. The Hacker News turut meliput temuan ini pada 31 Oktober 2026, dan diskusinya masuk ke halaman utama Hacker News.
Tiga Pelajaran untuk Developer dan Pengguna
Parameter merangkum empat pelajaran pertahanan dari temuan ini. Pertama, penerima pesan harus memverifikasi alamat web pengirim dan jendela yang diberi izin. Kedua, pengaturan lintas jendela tidak boleh berisi HTML mentah. Ketiga, dokumen yang dibuat secara dinamis harus tetap berada di dalam sandbox ketika isinya bisa dipengaruhi frame yang tidak tepercaya.
Pelajaran keempat menyangkut CSP. Dalam kata-kata Parameter, CSP adalah pertahanan berlapis yang berharga, tetapi tidak bisa membuat jalur rendering yang tidak aman menjadi aman. Memblokir endpoint YouTube saja hanya akan menutup satu jalan menuju JavaScript, sementara Preview yang tidak tepercaya tetap bisa menyisipkan HTML ke ChatGPT.
Untuk kamu sebagai pengguna, kabar baiknya adalah tidak ada tindakan yang perlu dilakukan. Perbaikan sudah diterapkan di sisi OpenAI, sehingga tautan share yang dibuat hari ini tidak lagi menjalankan payload itu. Namun kebiasaan lama tetap berlaku: berhati-hatilah membuka tautan share dari sumber yang tidak kamu kenal, terutama bila tautan itu meminta kamu tetap login di layanan penting.
Untuk developer, temuan ini mengingatkan bahwa kerentanan sering muncul bukan dari satu fitur yang rusak, melainkan dari kombinasi beberapa fitur yang masing-masing terlihat wajar. Preview yang terisolasi, grafik yang memuat papan ketik matematika, frame yang bisa bertukar pesan, CSP yang mengizinkan penyedia media besar, dan percakapan yang bisa dibagikan secara publik, semuanya masuk akal sendiri-sendiri. Celahnya baru terlihat saat semuanya bertemu di satu halaman. Kalau kamu penasaran dengan proyek keamanan dan eksperimen lain yang saya kerjakan, kamu bisa melihat daftarnya di /projects.

Dimas Febriyanto
Fullstack & Mobile Developer specializing in Golang & Flutter. Aktif sebagai Junior Mobile Developer di Sagara Technology & asisten lab di Universitas Gunadarma. Passionate about building scalable algorithms & high-impact applications.
Lihat Portofolio