MODEL
Threat model → MASVS categories.
Local-storage paths surface MASVS-STORAGE. Network calls surface MASVS-NETWORK. Crypto APIs surface MASVS-CRYPTO. iOS Keychain and Android Keystore traced per platform.
OWASP MASVS
VibeReview reads your iOS or Android codebase, identifies the mobile-specific threat surface, and generates guardrails per MASVS category. From MASVS-STORAGE to MASVS-PRIVACY, coverage aligns with the MASTG test catalogue.
14-day free trial · No card required
"Save the JWT so the app stays signed in across launches."
func saveSession(_ jwt: String) throws {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "app.vibereview.jwt",
kSecAttrAccessible as String:
kSecAttrAccessibleAfterFirstUnlock,
kSecValueData as String: Data(jwt.utf8),
]
SecItemDelete(query as CFDictionary)
let status = SecItemAdd(query as CFDictionary, nil)
guard status == errSecSuccess else { throw KeychainError(status) }
} ✓ JWT lives in the Keychain. No UserDefaults. No log lines. MASVS-STORAGE-1/2 and CRYPTO-2 satisfied.
MODEL
Local-storage paths surface MASVS-STORAGE. Network calls surface MASVS-NETWORK. Crypto APIs surface MASVS-CRYPTO. iOS Keychain and Android Keystore traced per platform.
ENFORCE
Each guardrail names the MASVS control it enforces. WebView hardening, biometric auth, certificate pinning, jailbreak detection, anti-tamper.
EVIDENCE
Every mobile diff runs the platform's specific guardrails. Android-only and iOS-only rules fire on the right files.
REPORT
Coverage report aligns with the MASTG test catalogue. Per-category, per-control, per-test mapping.
WHAT'S COVERED
Coverage is platform-dependent. Your mapping report names the controls enforced for your iOS or Android repo.
Point us at the iOS or Android repo. We generate the per-category coverage and walk you through it.