KDE Plasma’da sandbox’ı kıran rastgele kod çalıştırma açığı
(blog.kimiblock.top)- KDE Plasma’nın pencere yönetimi davranışı nedeniyle, sandbox içindeki bir uygulamanın kullanıcının tıklamasını tetikleyici olarak kullanıp host üzerinde rastgele bir ikili dosya çalıştırabildiği PoC ile doğrulandı
- Temel neden, KWin’in uygulamanın sağladığı app_id değerine güvenmesi ve gerçek
.desktopdosyası eşleştirmesi olmadan/proc/PID/cmdlinetabanlı çalıştırma yolunu açık bırakması - PoC, Arch Linux host’u, bir Flatpak uygulamasını ve değiştirilmiş Mesa
eglgears_wayland’i birleştirerek/usr/bin/kcalc’in sandbox dışında çalıştırıldığı akışı yeniden üretiyor - Kullanıcı görev çubuğu simgesinde Open New Window seçeneğini seçtiğinde veya orta tıkladığında, hedef süreç
app.slicecgroup’u ve host mount namespace’i içinde görünür halde başlatılıyor - Hafifletme için sandbox’ın security context’i,
XdpAppInfove control groups üzerinden uygulama kimliği doğrulanmalı;.desktopdosyasıyla eşleşmeyen pencerelerde yeni pencere çalıştırma engellenmeli
PoC’nin gösterdiği sandbox’tan kaçış akışı
- Kötü niyetli bir sandbox uygulaması, kullanıcının Open New Window çağırdığı anda başka bir uygulama gibi davranarak host üzerinde rastgele bir ikili dosya çalıştırabilir
- PoC Flatpak ile yeniden üretildi, ancak güvenlik bağlamı desteği olup olmamasından bağımsız olarak başka sandbox’lara da uygulanabileceği belirtiliyor
- Deney kurulumu şöyle
- Arch Linux host’u
- Derleme bağımlılıkları
wget,unzip,meson - Hiçbir izin verilmemiş Flatpak uygulaması
io.github.johannesboehler2.BmiCalculator - Sandbox içinde derleme kolay olmadığı için Flatpak’e yalnızca kötü niyetli ikili dosyanın yolu iletildi
- Belirlenen hedef ikili dosya
/usr/bin/kcalc
- Kötü niyetli ikili dosya çalıştırıldığında görev çubuğunda KCalc simgesi gösteriliyor
- Kullanıcı sağ tıklayıp Open New Window seçeneğini seçtiğinde
/usr/bin/kcalcsandbox dışında başlatılıyor- Çalıştırıldığı yer
app.slicecgroup’u - Mount namespace host tarafında
- Sonuç olarak tamamen açıkta çalışıyor
- Çalıştırıldığı yer
Keşif süreci ve ipuçları
- KDE Plasma’da Portable sandbox QEMU sanal makinesiyle test edilirken, bazı pencerelerin uygun
.desktopdosyasıyla ilişkilendirilmediği ve görev çubuğunda genel Wayland simgesi olarak göründüğü fark edildi - Bu durum KWin trusts on Apps fully for app_id olarak bildirildi ve uygulamaların başka uygulamaların kimliğine bürünebilmesi sorununa yol açtı
- Daha sonra görev çubuğunda yanlışlıkla orta tıklanınca varsayılan davranış olarak Open New Window çağrıldı
- Yeni pencere açıldı, ancak kayıtlı oturum açma kimlik bilgilerini ve değiştirilmiş ayarları kullanmadı; KWin Debug Console’daki PID ile procfs’teki control groups ve rootfs bilgileri birlikte incelendiğinde sandbox’tan kaçış ortaya çıktı
Açığın çalışma şekli
- KWin pencereyi gerçek bir
.desktopdosyasına bağlayamasa bile, çalıştırılacakargv0değerini bulmaya yönelik bir yol kalıyor - Deney sonuçları, değerin
/proc/PID/cmdlineüzerinden okunduğu tahminini doğruladı - Sorun yalnızca mevcut uygulama örneğini sandbox dışında çalıştırmakla sınırlı değil
- Yetkisiz süreçler dahil tüm süreçler argv0 değerini değiştirebilir
- Mount namespace de bir seçenek olabilir, ancak daha az esnek olduğu belirtiliyor
- Uygulamanın sağladığı app_id için koruma olmaması ile
/proc/PID/cmdlineokumanın güvensizliği birleşerek host üzerinde rastgele kod çalıştırmayı mümkün kılıyor
Demo ve gerçek saldırı senaryosu
- Demo kodu GalaxySnail tarafından yazıldı ve Mesa’nın
eglgears-waylandaracını kullanıyor - Demo akışı şöyle
mesa-demos-argv0deposunu klonlamasrc/egl/opengl/eglgears.ciçindekimainfonksiyonunda belirtilen komutu istenen komutla değiştirmemeson setup build && meson compile -C buildile derleme./build/src/egl/opengl/eglgears_waylandçalıştırma- Görev çubuğu simgesine orta tıklama veya bağlam menüsünden Open New Window seçme
- Belirlenen kötü niyetli ikili dosya başlatılır
- Gerçek bir saldırıda
$HOMEaltında bir shell script oluşturma yöntemi kullanılabilir$HOMEgenellikle host üzerinde de aynı yoldadır- Kötü niyetli uygulama
argv0değerini sessizce oluşturduğu veya indirdiği bir ikili dosyayla değiştirebilir - Kullanıcı Open New Window’a tıklarsa ya da yanlışlıkla uygulama simgesine orta tıklarsa oturumun tam kontrolü ele geçirilebilir
Önerilen düzeltme yönü
- KDE Plasma’nın bu exploit’i engellemesi için uygulamanın sağladığı kimliğe olduğu gibi güvenmemesi gerekir
- Uygulama kimliğinin şu yollardan elde edilmesi öneriliyor
- Sandbox’ın security context’i
XdpAppInfo- control groups
- Belirli bir pencere
.desktopdosyasıyla eşleşmiyorsa Open New Window’a izin verilmemeli - KDE Security e-postasından henüz güncelleme alınmamış durumda
Açıklama zaman çizelgesi
- İlk e-postada arbitrary code execution yanlışlıkla RCE olarak yazılmıştı
- Tüm olaylar UTC+8, 24 saat formatına göredir
- 1 Nisan 2026 23:51’de ilk e-posta
security@kde.orgadresine gönderildi - 2 Nisan 2026 00:15’te David Edmundson raporu aldığını belirten bir yanıt gönderdi
- 2 Nisan 2026 00:24’te David Edmundson, bu özelliğin
.desktopdosyasındakiExec=değerini kullandığını ve rastgele kod çalıştırmak için kullanılamayacağını düşündüğünü belirten bir yanıt verdi - 2 Nisan 2026 11:59’da GalaxySnail yardımıyla
.desktopdosyasına dayanmayan başka bir PoC’nin çalıştığı doğrulandı - 2 Nisan 2026 18:26’da exploit dosyası ve açıklamaları içeren takip e-postası
security@kde.orgadresine gönderildi, ancak yanıt alınmadı - 2 Mayıs 2026 11:59’da exploit’in Plasma 6.7 Beta’da yamalanmadığı doğrulandı
- 2 Temmuz 2026 18:30’da exploit aktif durumdayken 90 günlük bekleme süresi aşıldığı için açıklama yapıldı
- Yamalanmadığı, takip yanıtı alınmadığı ve olağan 90 günlük bekleme süresi geçtiği için farkındalık yaratmak amacıyla açıklama yapılmasına karar verildi
- Bunun KDE geliştiricilerini eleştirme girişimi olmadığı; OSS projelerinin son dönemde spam’den muzdarip olduğu ve insanların da işlem kapasitesinin sınırlı olduğu, ancak sürecin iyileştirilebileceği eklendi
1 yorum
Lobste.rs yorumları
Masaüstü uygulama sandbox’lama için, şu anda Linux’ta aynı şeyi yapmaya çalışırken üst üste yığılan türlü yöntemlerden çok daha iyi bir model. Launcher, metadata’ya dayanarak başlangıçtaki yetki kümesini, yani dosya descriptor’larını geçiriyor; uygulama bunun dışında hiçbir şeye erişemiyor ve powerbox başka dosyaları açma/kaydetme izinlerini sağlıyor
Kubernetes servisleri gibi, neredeyse tanrısal bir sürecin servisleri orkestre ettiği ortamlar için genel olarak uygun; ama masaüstünde pek iyi oturmuyor. Kullanıcı alanında daha düşük yetkili bir cgroup/namespace içine girmek istiyorsunuz, ama root daemon ya da setuid gibi ritüellerden geçmeniz gerekiyor; bu da sonunda ayrıcalık yükseltme riskini beraberinde getiriyor
SCM_RIGHTS+ Wayland + D-Bus’ı temel yapı taşları olarak kullanıp böyle çalışması gerekirGözlerinizi biraz kısınca güvenli bir masaüstünün ana hatları seçiliyor
Ama gerçek uygulamalar genel olarak ya fazla izin verici, ya esneklikten yoksun, ya da yarı bozuk. Uçtan uca masaüstü güvenliğini, sunucu iş yüklerinin güvenliği kadar önemseyen kimse yok gibi görünüyor. Bu yüzden gVisor ve Firecracker iyi çalışırken Flatpak, en basit Gtk+ uygulamasını bile fontları bozmadan çalıştırmakta zorlanıyor; ayrıca her Wayland compositor’ının güvenilir bir masaüstü temelinin yarısını yeniden uygulaması gerekiyor
Android’in, güvenilmeyen kodu çalıştıracak kadar güçlendirilmiş bir Linux dağıtımı rolünü oldukça iyi yerine getirdiğini; iOS ve macOS’in de kullanıcıya dönük uygulama sandbox’lamasının yeterince kullanışlı olabileceğini gösterdiğini düşününce bu daha da utanç verici. Sadece onların yaptığı gibi yapmak yeterli. Peki bir pencere yöneticisinin içindeki bir şey neden
/proc/{pid}/cmdlineokuyor kiBu söz kesinlikle araştırmacıya yönelik bir eleştiri değil
KDE ya da Flatpak’in iç yapısına daha aşina olsaydım muhtemelen çok daha iyi anlardım