InvoiceShelf, bir şirketteki herhangi bir sahibin başka bir şirketteki kullanıcı hesaplarını ele geçirmesine olanak tanıyan kritik bir açık olan CVE-2026-55610 için bir yama yayınladı. CVSS ölçeğinde 8.7 olarak derecelendirilen güvenlik açığı, uygulamanın Laravel kodundaki eksik bir kiracı kapsamı (tenant-scope) kontrolünden kaynaklanıyordu.
Açığın İşleyişi
InvoiceShelf, şirketlerin kullanıcıları, faturaları ve ayarları tek bir panelden yönetmesine olanak tanıyan, Laravel üzerine inşa edilmiş bir SaaS aracıdır. Platform, bir kiracıyı (tenant) tanımlamak için özel bir başlık (header) okur. Bir Sahip (Owner) bir kullanıcı kaydı talep ettiğinde, kod yalnızca şunu kontrol eder: "İstek yapan kişi kendi şirketinin bir Sahibi mi?"
Hedef kullanıcının aynı kiracıya ait olup olmadığını asla doğrulamaz. Laravel'in örtük rota-model eşlemesi (implicit route-model binding), kullanıcı kimliğini (user ID) küresel kullanıcılar tablosundaki bir satıra çözümleyer ve yetkilendirme politikası isteği yalnızca isteği yapanın rolüne dayanarak onaylar.
Bu nedenle bir saldırgan şunları yapabilir:
- İstek URL'sine herhangi bir sayısal kullanıcı kimliği (user ID) gönderebilir.
- E-posta dahil olmak üzere tüm kullanıcı kaydını alabilir.
- Kurbanın e-postasını, şifresini geçersiz kılan ve hatta hesabı bir süper yönetici (super-admin) olarak saldırganın şirketine yeniden atayan bir güncelleme gerçekleştirebilir.
Uygulamada, kötü niyetli bir Sahip, bir şirket yönetim aracını evrensel bir hesap ele geçirme silahına dönüştürdü. "Sahip" rolünün ötesinde herhangi bir ayrıcalığa ihtiyaç duyulmadı.
Kimler Etkilendi
2.4.1 sürümünden önceki bir sürümü çalıştıran tüm InvoiceShelf müşterileri risk altındaydı. Açık, çekirdek istek işleme yolunda bulunduğu için, boyutu veya güvenlik duruşu ne olursa olsun, herhangi bir kiracı, başka bir kiracının Sahibi tarafından hedef alınabilirdi. Etki, gizliliğin kaybını (e-posta adresleri) ve bütünlüğün kaybını (yetkisiz şifre değişiklikleri, süper yöneticiye yükseltme) içerir.
Yama
Geliştiriciler, bir kullanıcı kaydı üzerinde herhangi bir okuma veya yazma işleminden önce açık bir kiracı kontrolü ekleyerek 2.4.1 sürümünü yayınladılar. Düzeltme, sorguyu aktif şirket tanımlayıcısı ile sınırlandırarak Laravel'in yalnızca isteği yapanın kiracısına ait satırları döndürmesini sağlar.
Geliştiriciler Neler Öğrenmeli
- Çok kiracılı (multi-tenant) uygulamalarda asla küresel birincil anahtarlara (global primary keys) güvenmeyin.
- Sadece silme veya oluşturma işlemlerine değil, her veritabanı aramasında bir kiracı filtresi uygulayın.
- Yetkilendirme politikalarının hem eylemi gerçekleştirenin rolünü hem de hedef nesnenin kiracılığını doğrulamasını sağlayın.
- Açık bir kapsamlandırma eklemediğiniz sürece, route-model binding gibi örtük framework özelliklerini güvenlik açıklarını gizleyebilecek kolaylıklar olarak değerlendirin.
Geleceğe Bakış
Bu olay, tabloları paylaşan tüm SaaS platformları için daha geniş bir risk olduğunu göstermektedir. Güvenlik denetimleri, tanımlayıcıları kabul eden tüm uç noktaları (endpoints) gözden geçirmeli ve kiracı kapsamlandırmasının (tenant scoping) tutarlı bir şekilde uygulandığını teyit etmelidir.
Özet: Tek bir eksik kiracı kontrolü, ayrıcalıklı bir kullanıcı rolünü evrensel bir arka kapıya (backdoor) dönüştürebilir. Doğru kapsamlandırma bir seçenek değil; her türlü çok kiracılı sistemde veri izolasyonunun temelidir.
