Satu tautan berbagi ChatGPT bisa membajak akun Anda
Parameter Labs bersama peneliti Mukul Goyal menemukan rantai serangan yang mengubah tautan berbagi ChatGPT biasa menjadi pengambilalihan akun secara penuh. Korban cukup membuka tautan itu saat sedang login. Setelah itu, JavaScript yang dikendalikan penyerang berjalan dengan identitas chatgpt.com, bisa membaca percakapan pribadi dan memanggil API backend apa pun yang diekspos aplikasi web.
Bagian yang menarik: tidak ada satu fitur pun yang benar-benar bug. Penyerang menaruh satu grafik interaktif asli dan satu HTML Preview dalam satu percakapan, lalu membagikannya. Grafik itu memuat library MathLive, yang memasang listener postMessage di halaman utama untuk keyboard virtualnya. Frame Preview yang berada di sandbox mengirim pesan buatan ke listener tadi, dan MathLive menerimanya dari origin mana pun tanpa memeriksa pengirim, lalu meneruskan HTML penyerang langsung ke innerHTML. Hal itu menyuntikkan sebuah iframe tanpa atribut sandbox, sehingga iframe tersebut mewarisi origin chatgpt.com. Penghalang terakhir adalah Content Security Policy, yang memblokir skrip inline tetapi mengizinkan YouTube, jadi peneliti menyalahgunakan endpoint oEmbed YouTube yang memantulkan parameter callback kembali sebagai kode yang bisa dieksekusi. Buktinya menampilkan 20 chat terakhir korban, menarik isi percakapan pribadi yang tidak pernah dibagikan, dan mengirim satu nilai ke server luar lewat permintaan gambar biasa. Pada versi otomatis, peringatan muncul sekitar 4,5 detik setelah halaman dimuat.
Garis waktunya singkat: dikonfirmasi di kode produksi pada 13 Oktober, dilaporkan tanggal 18, dinaikkan ke P1 pada tanggal 21, dan diperbaiki sepenuhnya pada tanggal 26 di dua versi frontend. OpenAI membayar bounty $5.000, yang menurut Simon Willison terlalu murah untuk bug seserius ini.
Kenapa ini penting
Kalau Anda membangun apa pun yang merender konten tak tepercaya di dalam frame sandbox, inilah pola kegagalan yang perlu dipelajari: sandbox-nya bertahan, tetapi komponen tepercaya di halaman induk menerima pesan tanpa memeriksa event.origin dan event.source. Audit setiap penerima postMessage yang bisa mengubah state, dan berhenti menganggap CSP sebagai jaring pengaman bagi jalur rendering yang tidak aman.