Overview › Threat Model · OWASP MASVS (Android)

Threat Model · OWASP MASVS (Android)

Generated 2026-05-07 · Costco Android

Executive summary

The OWASP Mobile Application Security Verification Standard (MASVS) defines security controls across 8 categories. Below is the current state per control, with platform-specific evidence. Threat scenarios at the bottom show realistic attack paths and what currently mitigates them.

OWASP MASVS coverage — android

CategoryIDControlStatusEvidence
STORAGEMSTG-STORAGE-1App stores sensitive data only in suitable locations (Keychain / EncryptedSharedPreferences)PASSEncryptDecryptUtils + Keystore for tokens
STORAGEMSTG-STORAGE-2Sensitive data is not stored in app-public storage / external storage / pasteboardVERIFYAudit DataStore for email persistence
STORAGEMSTG-STORAGE-3Sensitive data is not written to logsREVIEWLogcat: 231+ Log.* calls — ReleaseTree must scrub
STORAGEMSTG-STORAGE-7App removes sensitive data from views when backgroundedFAILNo FLAG_SECURE on payment/DMC screens
CRYPTOMSTG-CRYPTO-1App does not rely on symmetric crypto with hardcoded keysVERIFYAudit any hardcoded keys in code/Constants
CRYPTOMSTG-CRYPTO-3App uses cryptographic primitives appropriate to the use casePASSAES-256-GCM via Android Keystore
CRYPTOMSTG-CRYPTO-6App uses secure random for security purposesVERIFYAudit Math.random() / new Random() in security paths
AUTHMSTG-AUTH-1If users authenticate, the auth happens server-side, not client-sidePASSOIDC + passkey via NokNok
AUTHMSTG-AUTH-7App enforces secondary factor when accessing sensitive operationsPASSBiometric prompt for membership card view
AUTHMSTG-AUTH-8Biometric authentication is not bound to login state alone (uses keystore-bound key)VERIFYConfirm BiometricPrompt uses keystore-bound CryptoObject
NETWORKMSTG-NETWORK-1Data is encrypted on the network using TLSPASScleartextTrafficPermitted=false in network security config
NETWORKMSTG-NETWORK-2TLS settings are in line with current best practiceVERIFYConfirm TLS 1.2+ enforced; minimum TLS in network security config
NETWORKMSTG-NETWORK-3App verifies the X.509 certificate of the remote endpoint when TLS is usedVERIFYOkHttp CertificatePinner present? Confirm pins
NETWORKMSTG-NETWORK-4App uses its own certificate store / public-key pinningVERIFYSame as -3
PLATFORMMSTG-PLATFORM-1App uses appropriate IPC mechanismsREVIEW11+ exported intent filters; deep-link inventory
PLATFORMMSTG-PLATFORM-2All inputs from external sources and the user are validatedPARTIALIntent extras chained without null checks (61+ findings)
PLATFORMMSTG-PLATFORM-5JavaScript is disabled in WebViews unless explicitly requiredFAILsetJavaScriptEnabled(true) + addJavascriptInterface in offers WebView
PLATFORMMSTG-PLATFORM-7If native methods of the app are exposed to a WebView, ensure obfuscation/encryptionREVIEWJS interface audit; restrict to explicit methods
CODEMSTG-CODE-2Released app is built in release mode with debug code excludedPASSminifyEnabled=true + shrinkResources=true
CODEMSTG-CODE-3Debugging symbols and detailed error messages are removedPASSProGuard/R8 strips; verify Timber ReleaseTree
CODEMSTG-CODE-4App catches and handles all exceptionsPARTIAL6 empty catch blocks; CostcoApplication swallows
RESILIENCEMSTG-RESILIENCE-1App detects and responds to a rooted/jailbroken deviceFAILNo root detection (RootBeer/Play Integrity not found)
RESILIENCEMSTG-RESILIENCE-2App detects and responds to debugger attachmentFAILNo isDebuggerConnected() / Debug.isDebuggerConnected check
RESILIENCEMSTG-RESILIENCE-3App detects and responds to tamperingPARTIALThreatMetrix provides device intelligence; no app-self integrity
RESILIENCEMSTG-RESILIENCE-7App implements obfuscationPASSR8 + ProGuard rules
PRIVACYMSTG-PRIVACY-1App declares the data it collects in the app store privacy disclosuresVERIFYPlay Console Data Safety section alignment
PRIVACYMSTG-PRIVACY-2App provides a Privacy Manifest / data-extraction rulesVERIFYdata_extraction_rules.xml absent; allowBackup=false mitigates

Threat scenarios

Each scenario describes a realistic attack and the current mitigation state.

SCENARIO

Lost/stolen device with screen unlock

Attacker goal: Attacker accesses session tokens

Current mitigation: Tokens encrypted via Keystore (Android) / Keychain (iOS) — PASS. Keychain-stored tokens require unlock; biometric for membership re-prompt — PASS.

SCENARIO

Malicious app on the same device

Attacker goal: Reads logs / clipboard for PII

Current mitigation: ReleaseTree / Logger.privacy redaction — PARTIAL. Pasteboard access not audited.

SCENARIO

Compromised CDN / man-in-the-middle

Attacker goal: Serves modified offers HTML to WebView

Current mitigation: Cert pinning blocks MITM — PASS on iOS, VERIFY on Android. WebView lockdown gates exploit reach — PARTIAL.

SCENARIO

Lost/stolen jailbroken device

Attacker goal: Bypasses biometric, reads tokens

Current mitigation: No root/jailbreak detection — FAIL on both. ThreatMetrix risk-scores transactions — PARTIAL.

SCENARIO

Phishing deep-link via SMS / email

Attacker goal: Tricks user into authenticating to fake page

Current mitigation: Universal Links / App Links autoVerify protect intent routing — PASS. WebView allow-list — VERIFY.

SCENARIO

App Store / Play Store rejection

Attacker goal: Privacy Manifest missing or App Store privacy labels misaligned

Current mitigation: Privacy Manifest required since 2024 — VERIFY iOS. Play Console Data Safety — VERIFY Android.

SCENARIO

Insider data exfiltration

Attacker goal: Engineer adds debug logging that leaks PII to Crashlytics

Current mitigation: ReleaseTree filters; Logger privacy: .private redaction — PARTIAL. Code review + lint rules — VERIFY.

SCENARIO

Background-location consent withdrawal

Attacker goal: Apple/Google removes app for unjustified background location

Current mitigation: Documented user-visible justification + foreground fallback — VERIFY. Periodic permission audit — RECOMMEND.

Recommended next steps

FLAG_SECURE / privacy overlay (now)

Sensitive screens (membership, payment) should not appear in app switcher snapshots.

Root / jailbreak detection (next)

RootBeer or Play Integrity; gate sensitive flows when high-risk device.

WebView lockdown (next)

Tighten setJavaScriptEnabled / addJavascriptInterface; allowlist hosts.

Privacy Manifest / Data Safety (now)

Verify Play Console Data Safety form; align with App Store privacy labels.

Costco Android · Code Review Report · Generated 2026-05-07 · 626 machine-curated findings