Özet
Platform üzerinde yapılan güvenlik testleri sırasında kullanıcı profil güncelleme endpoint’inde
(/api/profiles) gönderilen JSON body içerisindeki role parametresinin server tarafında
doğrulanmadan işlendiği tespit edilmiştir.
Bu durum, normal kullanıcı yetkisine sahip bir kullanıcının request body manipülasyonu ile kendi
rolünü owner olarak değiştirmesine ve ilgili kanal üzerinde kurucu yetkileri elde etmesine olanak
sağlamaktadır.
Zafiyet, authorization mekanizmasının client tarafına güvenmesi nedeniyle oluşmaktadır ve
privilege boundary ihlaline sebep olmaktadır.
Zafiyet Türü
• Broken Access Control (OWASP A01:2021)
• Vertical Privilege Escalation
• Mass Assignment
• Improper Authorization
Etkilenen Endpoint
POST /api/profiles?api=1Teknik detaylar
Profil güncelleme isteği sırasında gönderilen JSON body içerisinde aşağıdaki alanlar
bulunmaktadır:
{
"user_id":4685,
"username":"VulnSVNC",
"role":"owner",
"channel_id":923
}
Normal şartlarda role alanının client tarafından değiştirilememesi ve server tarafında ignore
edilmesi gerekirken backend bu değeri doğrudan işleyerek kullanıcının rolünü güncellemektedir.
Server response incelendiğinde rol değişikliğinin başarılı şekilde uygulandığı ve kullanıcıya owner
seviyesinde izinlerin tanımlandığı görülmektedir.
"permissions":{
"can_view_users":true,
"can_access_channel_owner":true,
"can_add_user":true,
"can_delete_users":true
}
Bu durum authorization kontrolünün eksik olduğunu göstermektedir.
Yeniden üretim adımları
1. Normal kullanıcı yetkisine sahip bir hesap ile platforma giriş yapılır
2. Profil güncelleme isteği intercept edilir
3. Request body içerisindeki role parametresi user yerine owner olarak değiştirilir
4. Request server’a gönderilir
5. Response incelendiğinde kullanıcıya owner yetkilerinin tanımlandığı görülürEtki
Bu zafiyet aşağıdaki güvenlik risklerine yol açmaktadır:
• Channel takeover mümkün
• Yetkisiz user management işlemleri yapılabilir
• Kullanıcı ekleme / silme işlemleri gerçekleştirilebilir
• Tenant isolation ihlal edilir
• Privilege boundary tamamen kırılır
• Lateral movement mümkün hale gelir
• Persistence oluşturulabilir
Bu nedenle zafiyet kritik seviyededir.
Şiddet değerlendirmesi
CVSS v3.1 Vector
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Skor
9.1 — Critical
Kök neden
Backend uygulaması client tarafından gönderilen alanları whitelist kontrolü olmadan doğrudan
model binding ile işlemektedir.
Authorization kontrolü server tarafında yapılmadığı için role gibi kritik alanlar manipüle
edilebilmektedir.Çözüm önerileri
• Role ve permission alanları client request’lerinden tamamen kaldırılmalı veya ignore
edilmelidir
• Field level authorization uygulanmalıdır
• Model binding whitelist yaklaşımı kullanılmalıdır
• Rol bilgisi sadece server tarafında session veya token üzerinden belirlenmelidir
• RBAC politikaları enforce edilmelidir
• Sensitive alanlar için explicit authorization kontrolü eklenmelidir
• Audit logging uygulanmalıdır
Güvenli tasarım önerisi
Backend yalnızca aşağıdaki alanları kabul etmelidir:
• username
• avatar
• profile metadata
Aşağıdaki alanlar client’tan kesinlikle kabul edilmemelidir:
• role
• permissions
• owner_id
• access flags
Sonuç
Bu zafiyet authorization mekanizmasının client tarafına güvenmesi nedeniyle oluşan kritik bir
Broken Access Control problemidir.
Saldırganın minimum yetki ile platform içerisinde tam yetki elde etmesine olanak sağladığı için acil
olarak düzeltilmesi gerekmektedir.
Broken Access Control | Privilege Escalation Zafiyet Raporu
Bu araştırma için PDF eklenmemiş.