Ana içeriğe geç

A01:2021 – Broken Access Control (Kırık Erişim Kontrolü) icon

Faktörler

Eşlenen CWE'ler Maks. Görülme Oranı Ort. Görülme Oranı Ort. Ağırlıklı Exploit Ort. Ağırlıklı Etki Maks. Kapsama Ort. Kapsama Toplam Görülme Toplam CVE
34 55.97% 3.81% 6.92 5.93 94.55% 47.72% 318,487 19,013

Genel Bakış

Beşinci sıradan yükselerek, uygulamaların %94’ü bir tür broken access control açısından test edildi; ortalama görülme oranı %3.81 olup, katkı veri setinde 318 bini aşkın vakayla en çok görülen kategoridir. Dikkat çeken Common Weakness Enumeration (CWE) örnekleri arasında CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, CWE-201: Insertion of Sensitive Information Into Sent Data ve CWE-352: Cross-Site Request Forgery bulunur.

Açıklama

Erişim kontrolü, kullanıcıların amaçlanan yetkilerinin dışına çıkamaması için politikayı uygular. Hatalar genellikle yetkisiz bilgi ifşasına, verilerin değiştirilmesine veya yok edilmesine ya da kullanıcının sınırları dışında bir işlevin icra edilmesine yol açar. Yaygın erişim kontrolü açıkları şunlardır:

  • Asgari ayrıcalık (least privilege) veya varsayılan olarak reddet (deny by default) ilkesinin ihlali; belirli yetenekler, roller veya kullanıcılar için verilmesi gereken erişimin herkese açık olması.
  • URL’yi (parameter tampering/force browsing), uygulamanın iç durumunu veya HTML sayfasını değiştirerek ya da API request’lerini değiştiren bir attack tool kullanarak erişim kontrol kontrollerinin atlatılması.
  • Benzersiz tanımlayıcıyı vererek başkasının hesabını görüntüleme veya düzenleme (insecure direct object references).
  • POST, PUT ve DELETE için access control eksikliği bulunan API’lere erişim.
  • Yetki yükseltme (privilege escalation). Login olmadan bir kullanıcı gibi davranmak veya user olarak login iken admin gibi davranmak.
  • Metadata manipülasyonu; örn. bir JSON Web Token (JWT) access control token’ını, cookie’yi veya hidden field’ı yeniden oynatarak/tahrif ederek yetki yükseltme ya da JWT invalidation’ını suistimal etme.
  • CORS misconfiguration nedeniyle yetkisiz/güvenilmeyen origin’lerden API erişimine izin verilmesi.
  • Auth olmadan authenticated sayfalara ya da standard user iken privileged sayfalara force browsing.

Nasıl Önlenir

Erişim kontrolü yalnızca güvenilen server-side code veya server-less API içinde etkilidir; saldırganın access control kontrolünü veya metadata’yı değiştiremeyeceği yerlerde.

  • Public kaynaklar hariç, varsayılan olarak reddet (deny by default).
  • Access control mekanizmalarını bir kez uygulayıp tüm uygulamada yeniden kullanın; Cross-Origin Resource Sharing (CORS) kullanımını en aza indirin.
  • Model access control’leri, herhangi bir kaydı create/read/update/delete etmesine izin vermek yerine kayıt sahipliğini (record ownership) zorlamalıdır.
  • Benzersiz application business limit gereksinimleri domain model’lerince zorlanmalıdır.
  • Web server directory listing’i devre dışı bırakın ve dosya metadata’sının (örn. .git) ve yedek dosyaların web root içinde bulunmadığından emin olun.
  • Access control hatalarını log’layın, uygun olduğunda (örn. tekrar eden hatalarda) admin’leri uyarın.
  • Otomatize attack tooling’in zararını en aza indirmek için API ve controller erişimini rate limit edin.
  • Stateful session identifier’ları logout sonrası server tarafında geçersiz kılın. Stateless JWT token’ları kısa ömürlü yapın ki saldırgan için fırsat penceresi minimal olsun. Daha uzun ömürlü JWT’lerde erişimi revoke etmek için OAuth standartlarını takip etmek kuvvetle tavsiye edilir.

Geliştiriciler ve QA ekipleri fonksiyonel access control unit ve integration testlerini dahil etmelidir.

Örnek Saldırı Senaryoları

Senaryo #1: Uygulama, account bilgilerine erişen bir SQL çağrısında doğrulanmamış veriyi kullanıyor:

 pstmt.setString(1, request.getParameter("acct"));
 ResultSet results = pstmt.executeQuery( );

Saldırgan, browser’daki 'acct' parametresini istediği hesap numarasını gönderecek şekilde değiştirir. Doğru şekilde doğrulanmamışsa saldırgan herhangi bir kullanıcının hesabına erişebilir.

 https://example.com/app/accountInfo?acct=notmyacct

Senaryo #2: Saldırgan hedef URL’lere basitçe force browse yapar. Admin sayfasına erişim için admin hakları gerekir.

 https://example.com/app/getappInfo
 https://example.com/app/admin_getappInfo

Auth olmayan bir kullanıcı bu sayfalardan herhangi birine erişebiliyorsa bu bir hatadır. Non-admin bir kullanıcı admin sayfasına erişebiliyorsa bu da bir hatadır.

Referanslar

Eşlenen CWE’lerin Listesi

CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

CWE-23 Relative Path Traversal

CWE-35 Path Traversal: '.../...//'

CWE-59 Improper Link Resolution Before File Access ('Link Following')

CWE-200 Exposure of Sensitive Information to an Unauthorized Actor

CWE-201 Exposure of Sensitive Information Through Sent Data

CWE-219 Storage of File with Sensitive Data Under Web Root

CWE-264 Permissions, Privileges, and Access Controls (should no longer be used)

CWE-275 Permission Issues

CWE-276 Incorrect Default Permissions

CWE-284 Improper Access Control

CWE-285 Improper Authorization

CWE-352 Cross-Site Request Forgery (CSRF)

CWE-359 Exposure of Private Personal Information to an Unauthorized Actor

CWE-377 Insecure Temporary File

CWE-402 Transmission of Private Resources into a New Sphere ('Resource Leak')

CWE-425 Direct Request ('Forced Browsing')

CWE-441 Unintended Proxy or Intermediary ('Confused Deputy')

CWE-497 Exposure of Sensitive System Information to an Unauthorized Control Sphere

CWE-538 Insertion of Sensitive Information into Externally-Accessible File or Directory

CWE-540 Inclusion of Sensitive Information in Source Code

CWE-548 Exposure of Information Through Directory Listing

CWE-552 Files or Directories Accessible to External Parties

CWE-566 Authorization Bypass Through User-Controlled SQL Primary Key

CWE-601 URL Redirection to Untrusted Site ('Open Redirect')

CWE-639 Authorization Bypass Through User-Controlled Key

CWE-651 Exposure of WSDL File Containing Sensitive Information

CWE-668 Exposure of Resource to Wrong Sphere

CWE-706 Use of Incorrectly-Resolved Name or Reference

CWE-862 Missing Authorization

CWE-863 Incorrect Authorization

CWE-913 Improper Control of Dynamically-Managed Code Resources

CWE-922 Insecure Storage of Sensitive Information

CWE-1275 Sensitive Cookie with Improper SameSite Attribute