2026-10-15 · 7 dk
MASWE-0024: testi olmayan OWASP zayıflığı ve nasıl test edilir
OWASP, “oturum sonlandıktan sonra erişilebilen hassas veri” zayıflığını MASWE-0024 olarak listeliyor ama ona eşlenmiş bir MASTG testi yok. iOS, React Native, Flutter ve Android için tekrarlanabilir bir logout kalıntı testi.
Hızlı özet
- • MASWE-0024, logout veya oturum zaman aşımından sonra hâlâ erişilebilen token ve kişisel verileri kapsar.
- • Ona eşlenmiş bir MASTG testi yok. En yakınları MASTG-TEST-0302 (iOS) ve MASTG-TEST-0207 (Android) uygulamanın depolamasını çalışma zamanında elle inceler ve logout odaklı değildir.
- • Logout kalıntı testi, logout öncesi ve sonrası kaydeder, değerleri anahtarlı hash ile eşleştirir ve yalnızca güvenilebilecek sonuçlarda başarısız olur.
MASWE-0024 ne diyor
MASWE-0024, “Sensitive Data Accessible After Session Termination”, MASVS-AUTH-3 altında yer alır. Zayıflık basit: logout veya oturum zaman aşımından sonra token'lar ve kişisel veriler cihazda hâlâ erişilebilir durumdadır; depolamada, önbelleklerde, WebView verisinde veya bellekte.
Cihazı kullanan bir sonraki kişi, bir yedek veya sonraki bir hata onlara ulaşabilir. Paylaşılan cihazlarda (bir klinisyen tableti, bir işyeri terminali) sonraki kullanıcı başka birinin verisine girmiş olabilir.
Neden testi yok
OWASP MASTG'de MASWE-0024'e eşlenmiş bir test yok. En yakını iOS'taki MASTG-TEST-0302: uygulamayı kullanırken özel depolamanın ve Keychain'in elle yapılan önce/sonra karşılaştırması. Android'de MASTG-TEST-0207, çalışma zamanında uygulama sandbox'ında saklanan veriyi inceler. OWASP süreç belleği testini (MASTG-TEST-0060) de yerine bir şey koymadan kullanımdan kaldırdı.
Bunların hiçbiri logout odaklı değil. MASWE-0024'ün sorusu bir değerin nasıl saklandığı değil, oturum bittikten sonra hâlâ orada olup olmadığıdır.
Tekrarlanabilir bir logout kalıntı testi
1. Bir debug build çalıştırın ve test hesabıyla giriş yapın. 2. Uygulamanın özel depolamasını (preferences, veritabanları, önbellekler, WebView verisi, dosyalar) ve sonucun güvenilir olduğu yerde belleğini kaydedin. 3. Kullanıcının yapacağı gibi logout yapın. 4. Yeniden kaydedin.
5. Konuma göre değil, değere göre karşılaştırın. Her sırrı bir anahtarla hash'leyin; böylece değeri hiçbir yere yazmadan, başka bir dosyaya ya da adrese taşınmış olsa bile eşleştirebilirsiniz. 6. Diskte kalanlarda başarısız olun. Yalnızca bellekte kalanları kanıt olarak değerlendirin; yalnızca runtime'ın sonucu güvenilir kıldığı yerde başarısız sayın.
Mümkünse canary kullanın: debug build'lerde uygulamanın gerçek token yerine ürettiği sahte bir token. Herhangi bir kopyası kalırsa test başarısız olur; string'in hassas olup olmadığı konusunda şüphe kalmaz.
Token'lar genellikle nerede kalır
iOS (Swift): URLCache (Cache.db), UserDefaults, Core Data ve SQLite (-wal dosyası dahil), çerezler ve logout'un silmeyi unuttuğu Keychain öğeleri.
React Native: AsyncStorage (redux-persist'in persist:root'u), MMKV, Supabase veya Firebase gibi bir kimlik SDK'sının oturum anahtarı ve Sentry'nin kullanıcı kapsamı.
Flutter: flutter.* altındaki shared_preferences anahtarları, Hive kutuları ve dio gibi HTTP önbellekleri.
Android: SharedPreferences XML, DataStore, Room veritabanları, WebView çerezleri ve local storage, OkHttp önbelleği.
Sonucu dürüst okumak
PASS ancak kayıt uygulamanın yazılabilir belleğinin çoğunu kapsadıysa ve her kaynak okunduysa bir anlam taşır. Aksi halde dürüst karar INCOMPLETE'tir.
React Native ve Flutter'da JavaScript veya Dart heap'indeki serbest bırakılmış string'ler, çöp toplayıcı o sayfayı yeniden kullanana kadar kalır. Oradaki yalnızca-bellek isabetleri başarısız bir test değil, kanıttır; kapı depolamaya ve logout öncesi görülen değerlerin takibine dayanmalıdır.
Otomatikleştirmek
WatchMemory bu kontrolü otomatikleştirir: logout öncesi ve sonrası kalıntı kaydı, karşılaştırma ve PASS / FAIL / INCOMPLETE kararı; iOS Simulator'da ve debuggable Android build'leri için (beta). Sonuçlar MASWE-0024, MASVS-STORAGE ve MASVS-AUTH-3 ile eşlenir.
Size kanıt verir; bir uygulamayı uyumlu veya sertifikalı yapmaz. OWASP uygulamaları veya araçları sertifikalandırmaz.
SSS
MASWE-0024 güvensiz depolamayla aynı şey mi?
Örtüşürler. Güvensiz depolama (MASVS-STORAGE-1) verinin nasıl saklandığıyla ilgilidir; MASWE-0024 ise oturum bittikten sonra hâlâ orada olup olmadığıyla. Bir token Keychain'de doğru şekilde saklanıp yine de logout sonrası kalabilir.
Keychain de sayılır mı?
Evet. Logout sonrası Keychain'de kalan bir refresh token sık görülen bir bulgudur. WatchMemory henüz Keychain'i incelemiyor; o gelene kadar bunu logout kodunuzda ve testlerinizde kapsayın.
Daha fazla içerik için WatchMemory Blog sayfasını inceleyin.
WatchMemory Mac uygulaması yerelde çalışır: taramalar cihazınızda kalır. Web analitikleri gizlilik dostudur ve yalnızca siteyi iyileştirmek için kullanılır.