· kaynak Hacker News – Front Page (hnrss.org)
Herkese açık ChatGPT paylaşım bağlantıları sandbox kaçışı yoluyla hesap ele geçirmeye izin veriyordu, yamalandı
Güvenlik araştırmacıları, tek bir herkese açık ChatGPT paylaşım bağlantısının, oturum açmış bir kullanıcının tarayıcısında saldırgan JavaScript'i çalıştırıp özel sohbetleri okuyabileceğini gösterdi; OpenAI hatayı yamaladı ve P1 olarak derecelendirdi.

Ne oldu
2026 Ekim'inde Parameter'deki güvenlik araştırmacıları, sıradan bir herkese açık ChatGPT paylaşımını, bağlantıyı açan kişinin oturum açmış hesabında çalışan saldırgan kontrollü JavaScript'e dönüştürmenin yolunu buldu. Hacker News'in ana sayfasına çıkan ekibin yazısına göre saldırgan bir sohbet hazırlıyor, bunu ChatGPT'nin normal paylaşım özelliğiyle yayımlıyor ve bağlantıyı kurbanına gönderiyordu. Kurbanın yapması gereken tek şey bağlantıyı açmaktı: uygulama kurulumu yok, projeye üyelik yok, yapıştırılan kod yok, geliştirici araçları yok.
Parameter'a göre çalıştırılan payload, kurbanın sohbetlerini listeleyebiliyor, saldırganın hiç erişimi olmayan özel sohbetlerin içeriğini çekebiliyor, bu verileri dış bir sunucuya sızdırabiliyor ve kurban adına ChatGPT'nen kimlik doğrulamalı API'lerini çağırabiliyordu — fiilen tam bir hesap ele geçirme. OpenAI sorunu 26 Ekim'de düzeltti ve raporu P1 olarak sınıflandırdı.
Bir grafik ve bir preview açığı yarattı
ChatGPT'nin Preview özelliği, bir HTML kod bloğunu küçük bir çalışan sayfaya dönüştürüyor. Böyle bir sayfa rastgele kod içerebileceği için ChatGPT onu farklı bir web adresinde barındırılan kısıtlı bir frame içinde çalıştırıyor; böylece tarayıcı onu ayrı bir site olarak görüyor ve çevresindeki oturum açılmış sayfayı okumasını engelliyordu. Parameter, bu sınırın başlangıçta korunduğunu söylüyor: Preview ana dokümanı okuyamıyordu.
Etkileşimli grafikler ise MathLive adlı bir matematik kütüphanesi yüklüyor. Bu yükleme, ana chatgpt.com sayfasına da MathLive'nin ekrandaki sanal klavyesiyle ilgili mesajları işleyen bir listener kuruyor; tarayıcının postMessage API'si kullanılıyor. Bu kanal origin'ler arası çalışıyor, ancak yalnızca alıcı her mesajı kimin gönderdiğini doğrularsa güvenli oluyor.
MathLive, Parameter'ın hedeflediği ayar için bu doğrulamayı atlıyordu. Üst düzey denetleyici herhangi bir origin'den gelen mesajları kabul ediyor ve layout-update mesajının daha önce onayladığı bir pencereden gelmesini şart koşmuyordu. Kabul edilen mesaj türlerinden biri sanal klavye düzenini değiştiriyordu — ve düzenlerin HTML içermesine izin veriliyordu.
Ana sayfaya HTML enjekte etmek
Sandbox içindeki Preview iki mesaj gönderdi: biri klavye düzenini araştırmacıların HTML'iyle değiştirdi, ikincisi MathLive'ye klavyeyi göstermesini söyledi. Klavye ekrana geldiğinde MathLive düzeni bir HTML dizisine dönüştürüp innerHTML yoluyla gerçek ChatGPT sayfasına yazdı. createHTML adlı bir yardımcı fonksiyon temizleme (sanitization) görünümü veriyordu ama diziyi yalnızca güvenilir olarak işaretleyip geçişine izin veriyordu.
Bu yolla eklenen script etiketleri çalıştırılmadığı için Parameter, srcdoc kullanarak bir iframe yerleştirdi. MathLive bu frame'i sandbox özniteliği olmadan ana ChatGPT dokümanına ekledi. İki sonuç izledi: srcdoc, bir script'in çalışabileceği taze bir doküman sağladı ve ana sayfa frame'i oluşturduğu için tarayıcı ona chatgpt.com kimliği atadı; böylece içeriği üst sayfaya erişebildi.
Content security policy'nin atlatılması
ChatGPT'nin Content Security Policy'si satır içi JavaScript'i engelliyordu ama YouTube kaynaklı script'lere hâlâ izin veriyordu. YouTube'un oEmbed uç noktası JSONP tarzı bir callback parametresini destekliyordu ve geçersiz callback adlarını reddetse de, döndürdüğü hatanın gövdesine callback'i dahil ediyordu. Parameter, callback'i ";void" ile bitirerek YouTube'un sonuna eklediği nesneyi etkisizleştirdi; böylece tarayıcı, hata yanıtını yeni frame içinde izin verilen bir origin'den gelen bir script olarak çalıştırdı. Böylece, orijinal Preview kendi ayrı adresinde hapsolmuşken, rastgele JavaScript chatgpt.com olarak çalışıyordu.
Laboratuvar hatasından tek bir bağlantıya
İlk çalışan sürüm henüz pratik bir saldırı değildi, çünkü kurbanın araştırmacı kontrollü bir ChatGPT App bağlamasına dayanıyordu. Sandbox'taki Preview'de açılan bir HTML eki payload'ı taşıyabilirdi, ancak bir sohbeti herkese açık paylaşım olarak dışa aktarmak grafiği düşürüyordu — MathLive'yi yükleyip savunmasız listener'ı kuran bileşen tam olarak oydu.
Atılım, her iki yarayı tek bir sıradan herkese açık sohbette birleştirmekti: MathLive'yi başlatan gerçek bir grafik ve ardından iki mesajı tetikleyecek, asistan tarafından yazılmış bir HTML Preview. Ortaya çıkan paylaşım URL'si tüm zinciri koruyordu ve herhangi bir paylaşılmış sohbet gibi dağıtılabiliyordu. En sağlam yeniden üretimde kurban ChatGPT'nin normal Preview düğmesine bir kez tıklıyordu; araştırmacılar HTML bloğunu önizlenebilir olarak işaretledikten sonra ise bağlantıyı açmak tek tıklamaydı.
Neden önemli
Bu ders kitabındaki bir bileşim hatası. Preview sandbox'ı, postMessage listener'ı, güvenilir-HTML yardımcısı, CSP allowlist'i ve YouTube'un JSONP uç noktası her biri tek başına savunulabilir görünüyordu; birlikte üst üste konduklarında tek tıklamayla hesap ele geçirmeye yol açtılar. Frame tabanlı sandbox'ların yapımcıları somut kontroller alabilir: postMessage origin'lerini doğrulayın, trusted-type sarmalayıcılarını gerçekten temizleme yaptırın ve srcdoc frame'lerini sandbox'layın.
Teslim yöntemi, sömürü kadar önemliydi. Paylaşım bağlantısı, kullanıcıların güvenmemek için hiçbir nedeni olmayan doğal bir ChatGPT yapıtı; bu yüzden bir saldırının olağan uyarı işaretleri yoktu. OpenAI'nin P1 derecelendirmesi ve hızlı yaması bu ciddiyeti yansıtıyor; yazı, hatanın düzeltmeden önce kötüye kullanılıp kullanılmadığına değinmiyor ama tanımadığı paylaşılmış bir sohbeti açan her oturum açmış kullanıcı risk altındaydı.
- #security
- #openai
- #chatgpt
- #vulnerability
- #xss
İlgili yazılar
- Linode, CVE-2026-98432 uzaktan kod yürütme açığıyla bağlantılı aktif güvenlik olayını inceliyor
- Güvenlik araştırması editör önizleme panellerindeki güven sınırı açıklarını ortaya çıkardı; Codex ve VS Code yamalanmamış durumda
- Codex CLI agent'ları hiç tamamen okumadıkları dosyaları değerlendirirken sessizce 10.000 token'lık kesme yaşandı