Back to Blog
APPSEC

Mobile App Security: iOS and Android Developer's Guide to Common Vulnerabilities (2026)

26 min readEmre Sakarya
mobile::ios & android

Mobile app security in 2026 is structurally different from web application security in three operationally significant ways: the application binary ships to the user's device where attackers can inspect and modify it; the device's security model (Android's permissions, iOS's sandbox, the platform-level cryptographic stores) is part of the application's threat model rather than a separate concern; and the operating systems themselves change security boundaries with every major release in ways that web applications never face. This guide walks the mobile application security discipline from a developer's perspective in 2026 — what makes mobile distinct, the OWASP Mobile Top 10 and MASVS as the canonical reference frames, platform-specific concerns for iOS (App Tracking Transparency, App Attest, the security boundaries iOS 17+ tightened) and Android (Play Integrity API, work profile boundaries, scoped storage), the common vulnerability classes that show up in real pentest reports, and how mobile fits into the broader application security verification work captured in the ASVS 5.0 developer guide. The hands-on vulnerability deep-dives — webview injection, certificate pinning bypass, insecure storage — sit alongside this pillar as the per-vulnerability-class detail.

Why Mobile Application Security Is Different

The first structural difference between mobile and web application security is the location of the application code. A web application runs on servers the operator controls; the user's browser receives only HTML, CSS, and JavaScript shaped for that user's session, and the application's business logic, data access patterns, and authentication state live on the server side beyond the attacker's reach. A mobile application is distributed as a binary — an IPA on iOS, an APK or AAB on Android — that the user installs on a device the user owns. The application's code, resources, embedded credentials, network requests, and storage layout are all available for inspection by anyone with the device or the application's distribution package. The first defensive consequence is that mobile applications cannot rely on secrecy of code as a security property; the second is that anything embedded in the binary should be assumed visible to attackers.

The second structural difference is the platform security model. Web applications operate above the operating system through the browser's abstraction; mobile applications sit directly on iOS or Android with the platform's security model — process sandboxing, permission model, cryptographic key storage, app signing, inter-process communication boundaries — as load-bearing components of the application's overall security. A mobile application that misuses the platform's APIs (storing credentials outside the Keychain or Keystore, requesting more permissions than necessary, exposing inter-app communication unsafely) has security failures the developer is responsible for; the platform provides the primitives but does not enforce their correct use.

The third structural difference is the platform's security boundary mobility. iOS releases (16, 17, 18) and Android releases (13, 14, 15) tighten security boundaries with every major version — App Tracking Transparency in iOS 14.5, photo library access changes in iOS 16, scoped storage in Android 11, Privacy Sandbox in Android 13, attestation API changes across both platforms. Mobile applications targeting current OS versions have a moving security baseline; defensive practices that worked three years ago may not align with current OS capabilities, and applications that haven't kept up with platform security changes accumulate technical debt that shows up as App Store / Play Store review rejections and CVE disclosures.

The fourth difference is the distribution and update model. A web application can patch a vulnerability instantly by deploying new server-side code; a mobile application has to ship an updated binary through the App Store or Play Store, wait for users to update, and live with the previously-deployed binary remaining in use on devices that haven't updated. Critical mobile vulnerabilities have remediation windows measured in weeks rather than hours. The defensive consequence is to design assuming users will run older versions for extended periods — server-side validation of mobile-originated requests cannot trust the mobile binary's behavior, and security-critical changes need backward-compatible enforcement at the API layer.

The OWASP Mobile Top 10 and MASVS as Reference Frames

Two OWASP projects anchor the mobile application security discipline. The OWASP Mobile Top 10 — most recently updated in 2024 — is the awareness-oriented list of the ten risks most consequential for mobile applications. The OWASP MASVS (Mobile Application Security Verification Standard) is the verification-oriented detailed requirement list, structured like the main ASVS standard with levels (L1, L2, plus the resilience-focused R level) and chapter organization.

The Mobile Top 10's 2024 list represents a substantial restructure from the 2016 list that dominated industry discussion for years. The 2024 categories: M1 Improper Credential Usage, M2 Inadequate Supply Chain Security, M3 Insecure Authentication/Authorization, M4 Insufficient Input/Output Validation, M5 Insecure Communication, M6 Inadequate Privacy Controls, M7 Insufficient Binary Protections, M8 Security Misconfiguration, M9 Insecure Data Storage, M10 Insufficient Cryptography. Several categories from the 2016 list (improper platform usage, code tampering) were absorbed into broader 2024 categories; supply chain and privacy emerged as standalone categories reflecting how dominant these concerns have become in modern mobile development. The authentication-specific subset of the Mobile Top 10 — M1 Improper Credential Usage and M3 Insecure Authentication/Authorization in particular — gets dedicated treatment in the mobile app authentication best practices guide, which walks MASVS V4 verification requirements with implementation patterns at the depth this pillar cannot.

MASVS provides the granular verification frame the Top 10 cannot. Where the Top 10 says "M9 Insecure Data Storage is a top mobile risk," MASVS V2 Data Storage and Privacy provides individually-verifiable requirements — sensitive data is stored in the platform's secure storage, sensitive data is not logged, sensitive data is not exposed via inter-process communication, and so on. The verification level (MASVS-L1 for typical applications, MASVS-L2 for applications with elevated security requirements, MASVS-R for applications also needing resilience against client-side attacks like reverse-engineering) determines the depth at which each requirement is verified. Mature mobile application security programs anchor to MASVS the way mature web programs anchor to ASVS.

The MASVS-R category is unique to mobile. It addresses the client-side resilience concerns that don't exist in server-side web applications — making the binary harder to reverse-engineer, harder to tamper with, harder to instrument with debuggers or hooking frameworks. MASVS-R is appropriate for applications protecting valuable IP, payment-handling apps, gaming applications with anti-cheat requirements, or any application where compromising the client provides material attacker value. Most line-of-business mobile applications don't need MASVS-R; understanding when to invoke it is itself a design decision.

iOS-Specific Security Concerns

iOS has converged on a small set of platform security primitives that nearly every well-built iOS application uses. The patterns worth knowing in 2026, with the iOS version that introduced or substantially changed each.

Keychain Services. The platform-provided secure storage for credentials, cryptographic keys, and small sensitive values. iOS Keychain items are encrypted at rest with keys bound to the device's secure enclave; access can be further constrained by user presence (Face ID / Touch ID required), application identity, and accessibility classes that determine when the item is decryptable (only when the device is unlocked, only after first unlock since boot, always). The defensive baseline: sensitive credentials go in Keychain with the strictest accessibility class the application's flow tolerates. The anti-pattern: NSUserDefaults, Core Data with unencrypted SQLite, or plain files in the application's documents directory — all of which are accessible to a jailbroken-device attacker without effort.

App Attest and DeviceCheck. The iOS attestation APIs that let server-side code verify the mobile application is the legitimate App Store binary running on a genuine Apple device rather than a modified binary, a simulator, or a reverse-engineered client. App Attest (iOS 14+) provides cryptographic attestation tied to the application's bundle ID and the device's secure enclave; the server can verify the attestation against Apple's CA and gate sensitive operations on positive attestation. The defensive value: anti-replay and anti-cloning at the server-side API layer that cannot be bypassed by client-side modification.

App Tracking Transparency (ATT, iOS 14.5+). The user-consent framework gating any cross-application or cross-website tracking. Compliance is mandatory for App Store distribution if the application performs any tracking activity; the technical implementation is straightforward (request authorization with AppTrackingManager.requestTrackingAuthorization, gate tracking-related calls on the returned status) but the business decisions around what counts as tracking and what alternatives exist drive substantial product work. From a security perspective, ATT primarily intersects with privacy controls and the M6 category of the Mobile Top 10.

App Transport Security (ATS). The networking security policy that requires HTTPS for outbound connections by default. Applications can declare exceptions in Info.plist for specific domains, but exceptions are subject to App Store review and increasingly difficult to justify. The 2026 baseline: ATS in strict mode, no ATS exceptions for non-development domains, TLS 1.2 or higher with modern cipher suites. The certificate pinning guide covers the additional defense-in-depth pattern of pinning the application's expected server certificate or public key.

Photo and contact permissions (iOS 16+). Apple has tightened the per-resource permission model — applications request access to specific photos rather than the full library, contact access requests are scoped by specific contact properties, and location permissions support precise/approximate distinctions. The defensive baseline: request the minimum permission scope the application's function requires, and degrade gracefully when the user denies broader access.

Android-Specific Security Concerns

Android's security model differs from iOS's in several ways relevant to application security. Android has more device fragmentation (multiple manufacturers with different security patch cadences), a more permissive permission model historically (tightened substantially in Android 11-14), and a richer inter-process communication system (intents, content providers, services) that creates an attack surface iOS does not have. The patterns worth knowing.

Android Keystore. The Android equivalent of iOS Keychain, providing hardware-backed (where supported) cryptographic key storage. Keys generated in the Keystore can be flagged as requiring user authentication (biometric or PIN) for use, can be bound to the StrongBox security module on devices that have one, and can be configured for use only after the device has been unlocked. The defensive baseline: sensitive cryptographic operations use Keystore-managed keys; the application never sees the raw key material. Anti-patterns: storing API tokens in SharedPreferences, embedding keys in the APK, or using SoftKeyMaster keys when StrongBox is available.

Play Integrity API. The Android attestation API (succeeding the older SafetyNet) that provides server-side verification of device integrity, application integrity, and the application's source of distribution. The integrity verdict — MEETS_DEVICE_INTEGRITY, MEETS_BASIC_INTEGRITY, MEETS_STRONG_INTEGRITY — lets the server make decisions about which clients to trust. Integrity API is the Android equivalent of App Attest; both serve the same purpose with platform-specific implementation. Production Android applications handling sensitive operations should integrate Play Integrity verdict checking at their server-side API boundary.

Scoped Storage (Android 11+). The major change to Android's filesystem access model. Applications no longer have arbitrary read/write access to the device's storage; instead, applications work within their own private storage directory, with explicit-grant access to specific user-selected files outside that directory. The defensive baseline: store application-private data in the application's internal storage (which is encrypted on devices with full-disk encryption); use the Storage Access Framework to access user-selected files; do not request the broad MANAGE_EXTERNAL_STORAGE permission unless the application genuinely needs filesystem-level access (file managers, backup applications).

Work Profile and Personal Profile boundaries (Android Enterprise). Devices managed through Android Enterprise have separate work and personal profiles with distinct application instances and data. Applications need to handle the profile boundary correctly — sensitive enterprise data must not flow to the personal profile, application identity must be consistent across reinstalls within the work profile, and intents crossing the boundary need explicit permission. Most consumer applications can ignore this complexity; enterprise-distributed applications must engage with it explicitly.

Inter-Process Communication (intents, content providers, services). Android's IPC model is more permissive than iOS's and produces a class of vulnerabilities iOS doesn't typically have. The defensive patterns: explicit intents (named target component) rather than implicit intents (action-based, potentially routed to any handling app); permission-protected content providers and services; careful validation of incoming intent data as untrusted user input. The webview injection guide covers a specific high-impact IPC-related vulnerability class that shows up in real-world Android pentest reports.

Common Mobile Vulnerability Classes

The vulnerability classes that show up in real-world mobile pentest reports cluster around six themes. Each maps to a Mobile Top 10 category and to specific MASVS verification requirements; the operational defense pattern for each is established.

Insecure data storage. Sensitive data — credentials, tokens, personal information, business data — stored in locations accessible to attackers with device access. Common patterns: tokens in SharedPreferences (Android) or NSUserDefaults (iOS), application data in unencrypted SQLite databases, credentials in app-internal log files. The insecure storage guide walks the defense patterns — Keychain/Keystore for credentials, encrypted databases (SQLCipher, Android's EncryptedSharedPreferences) for application data, no sensitive data in logs.

Insecure communication. Application network traffic not adequately protected. Common patterns: HTTP fallbacks for specific endpoints, TLS configuration accepting downgrade or weak cipher suites, missing certificate validation, lack of certificate pinning for high-security applications. The defense: ATS strict mode on iOS, NetworkSecurityConfig requiring HTTPS on Android, TLS 1.2 or higher with modern cipher suites, certificate pinning where the threat model warrants. The certificate pinning guide covers the implementation and the bypass classes pinning defends against.

Improper authentication and session management. Authentication flows that can be bypassed, session tokens improperly stored or transmitted, biometric authentication treated as the sole factor when it should be one of several. Common patterns: long-lived tokens in plain storage, no token rotation on suspicious activity, biometric "yes/no" treated as a full authentication rather than as a presence assertion. The defense aligns with the broader OIDC/OAuth implementation patterns with mobile-specific considerations around platform credential storage and biometric integration.

Insufficient binary protections. The application binary can be reverse-engineered, modified, or run in environments (debuggers, hooking frameworks like Frida) without the application detecting and refusing to operate. The MASVS-R category covers this; the defensive techniques include code obfuscation, runtime integrity checks, jailbreak/root detection, and anti-debugging measures. The pattern is appropriate for high-value applications (payment apps, applications protecting valuable IP) and largely overkill for typical line-of-business applications.

Improper credential usage. Hardcoded API keys and secrets in the application binary, inadequate token handling, credentials sent in URL parameters where they appear in logs. The defense: no hardcoded secrets (the hardcoded secrets guide covers this for general code, with the same patterns applying to mobile), tokens in platform-secure storage, credentials only in HTTP headers or body never in URLs.

Privacy control failures. The application requests permissions beyond what its function requires, tracks users without appropriate consent, or transmits personal data without justified purpose. The defense: minimum-necessary permission requests, ATT compliance on iOS, Privacy Sandbox engagement on Android, data minimization at the design level. Privacy and security overlap substantially in mobile contexts because the platform's privacy model uses security primitives (permissions, attestation) as enforcement.

MASVS V1-V8 Walked Chapter by Chapter

MASVS is structured into eight verification chapters, each with requirements at L1, L2, and the resilience-focused R level. Walking the chapters at the operational depth a verification effort actually requires.

V1 — Architecture, Design and Threat Modeling. Pre-implementation requirements covering the security architecture decisions made before code is written — threat model artifacts, identification of sensitive data flows, identification of security-critical components. The chapter is short but load-bearing; a mobile application without a documented threat model and without explicit identification of which data is sensitive cannot satisfy V1 evidence regardless of how well the subsequent chapters are implemented. The pragmatic deliverable is a threat-modeling document produced during design that survives into the verification evidence package.

V2 — Data Storage and Privacy. The chapter most consequential for typical mobile applications. Sensitive data classification (what counts as sensitive in this application — credentials, tokens, personal identifiers, regulated content), storage location requirements (sensitive data goes in Keychain / Keystore, application-private data in encrypted storage, never in shared external storage), backup behavior (sensitive data is excluded from cloud backups via NSFileProtectionComplete / android:allowBackup="false"), and inter-process exposure (sensitive data does not flow through inter-app communication, log files, or screenshots). V2 verification produces evidence that satisfies both MASVS requirements and the data-protection elements of PCI DSS, GDPR, and similar privacy regimes.

V3 — Cryptography. Application-level cryptographic operations — when the application encrypts, signs, or hashes data itself rather than relying on platform-managed cryptographic stores. Requirements around algorithm selection (AES-GCM for symmetric, ECDSA on modern curves for asymmetric, SHA-256+ for hashing, no deprecated primitives), key generation (Keychain / Keystore-backed where possible, with hardware backing on devices that support it), and randomness (CSPRNG sources only, never seeded random for cryptographic purposes). Mobile cryptography failures are particularly punishing because the application binary contains the cryptographic code; an attacker reverse-engineering the binary can identify exactly which algorithms and key derivation patterns the application uses and target them specifically.

V4 — Authentication and Session Management. The user-authentication flow and the session token lifecycle. Mobile-specific considerations: biometric authentication treated as a presence assertion (the user is the device's enrolled user) rather than a full authentication factor, server-side validation of every privileged operation regardless of biometric status, token storage in platform-secure stores with refresh-token rotation on use, and re-authentication after the application returns from background after extended periods. The integration with broader authentication standards is covered in the OIDC vs SAML vs OAuth 2.0 comparison; the mobile-specific surface is the platform-secure-storage and biometric-integration overlay.

V5 — Network Communication. The TLS configuration, certificate pinning, and protocol-level requirements for application network traffic. Requirements include TLS 1.2 minimum (TLS 1.3 preferred), modern cipher suites only (no RC4, 3DES, MD5, or SHA-1), certificate validation enabled (not bypassed for development convenience and forgotten in production), and certificate pinning for applications where the threat model warrants. The certificate pinning bypass guide covers the implementation patterns and the bypass classes pinning defends against.

V6 — Platform Interaction. Inter-process communication, deep links, custom URL schemes, and the broader category of how the application interacts with the platform and other applications. The chapter where Android applications have substantially more attack surface than iOS due to Android's richer IPC model. Requirements include explicit intents (named target components) rather than implicit intents (action-routed), permission-protected exported components, careful validation of incoming intent data, and deep-link handling that treats incoming URLs as untrusted input rather than trusted state. The webview injection guide covers one of the higher-impact V6-adjacent vulnerability classes.

V7 — Code Quality and Build Setting Requirements. Build configuration, debugging-related settings, and the broader category of preventing the application from shipping with development conveniences that compromise production security. Requirements include release builds without debugging enabled, production builds without verbose logging, anti-tampering measures appropriate to the application's risk tier, and the absence of unused debugging APIs that could be invoked by attackers with device access. Mobile applications that ship with NSURLSessionConfiguration set to ignore SSL errors, or with android:debuggable="true" left in the manifest, fail V7 verification at the most basic level.

V8 — Resilience Against Reverse Engineering Requirements (MASVS-R). The optional resilience tier. Requirements include code obfuscation, anti-debugger detection, jailbreak / root detection, integrity verification of the application binary at runtime, and the broader category of making client-side compromise more expensive for an attacker. MASVS-R is appropriate for high-value applications — payment processing, applications protecting valuable IP, applications where client compromise has material business consequence. Most line-of-business mobile applications do not need MASVS-R; understanding when to invoke it is itself a design decision worth making explicitly rather than by default.

iOS 17/18 and Android 14/15 Specific Concerns

The mobile platform security landscape evolves faster than the broader application security discipline. The releases worth knowing for 2026-targeting applications.

iOS 17 (September 2023) — Communication Safety expansion. The platform-level content safety features for messaging and shared content expanded substantially, and applications that mediate user-to-user content increasingly need to integrate with Apple's content safety APIs rather than implementing parallel detection. Privacy Manifests became required for SDKs distributed for iOS, with each SDK declaring the data types it accesses and the reasons for access.

iOS 18 (September 2024) — App Intents and Apple Intelligence. Apple's on-device AI features introduced new surface areas where application data can flow into AI processing, with corresponding privacy implications applications need to opt into deliberately rather than receive by default. App Intents — the framework for exposing application functionality to Siri, Shortcuts, and Apple Intelligence — has its own security model where exposed intents need to validate inputs as untrusted and limit the actions they can take when invoked outside the application's UI context.

Android 14 (October 2023) — Foreground service type changes and partial photo access. Foreground services must declare their type explicitly, and the system enforces restrictions on what each type can do. Photo library access supports per-photo selection at runtime rather than full-library access, aligning Android's permission model closer to iOS 16's behavior. Applications still requesting broad media access via READ_EXTERNAL_STORAGE on Android 14+ face Play Store review friction.

Android 15 (October 2024) — Private Spaces and stronger sandboxing. Private Spaces provide user-level isolation analogous to Android Enterprise work profiles but for personal use; applications need to handle being installed in either context. Sandbox tightenings around background execution and notification posting affect applications that depend on long-running background work.

The pattern across both platforms is that newer OS versions push toward narrower permission scopes, stricter sandboxing, and more explicit user consent for cross-application data flow. Applications targeting current OS versions inherit security improvements automatically; applications that have not migrated their permission requests and platform-API integrations to current patterns face progressively more friction from app store review and from users' privacy expectations.

Practical iOS Code Pattern — Keychain + App Attest

A worked example of the combined Keychain storage + App Attest attestation pattern that production iOS applications use for sensitive operations. The Swift code below illustrates the structural pattern — production implementations would extract this into a service class with error handling appropriate to the application's UX.

import Security
import DeviceCheck

// Store a credential in Keychain with strict accessibility
func storeCredential(token: String, account: String) throws {
    let data = token.data(using: .utf8)!
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: account,
        kSecAttrService as String: Bundle.main.bundleIdentifier!,
        kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
        kSecValueData as String: data,
    ]
    SecItemDelete(query as CFDictionary)
    let status = SecItemAdd(query as CFDictionary, nil)
    guard status == errSecSuccess else { throw KeychainError(status: status) }
}

// Request an App Attest assertion before a sensitive API call
func attestSensitiveCall(challenge: Data) async throws -> Data {
    let service = DCAppAttestService.shared
    guard service.isSupported else { throw AttestError.unsupported }

    let keyId = try await service.generateKey()
    let hash = SHA256.hash(data: challenge)
    let assertion = try await service.generateAssertion(keyId, clientDataHash: Data(hash))
    return assertion
}

The server receives the assertion alongside the API request, validates it against Apple's App Attest service, and only honors the request if the assertion validates. The client-side handling — checking isSupported first because not every device supports App Attest, persisting the keyId across launches, regenerating assertions per request — has enough operational nuance that production implementations typically use a library wrapper rather than calling the DeviceCheck APIs directly.

Practical Android Code Pattern — Keystore + Play Integrity

The Android equivalent — Keystore-backed key generation plus Play Integrity verdict checking before a sensitive operation. The Kotlin code illustrates the pattern; production implementations extract this into repository / service classes.

import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import com.google.android.play.core.integrity.IntegrityManagerFactory
import com.google.android.play.core.integrity.IntegrityTokenRequest

// Generate a hardware-backed AES key in Keystore (StrongBox when available)
fun generateProtectedKey(alias: String) {
    val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
    val spec = KeyGenParameterSpec.Builder(
        alias,
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
        .setUserAuthenticationRequired(true)
        .setIsStrongBoxBacked(true)
        .build()
    keyGenerator.init(spec)
    keyGenerator.generateKey()
}

// Request a Play Integrity token before a sensitive server call
suspend fun requestIntegrityToken(context: Context, nonce: String): String {
    val integrityManager = IntegrityManagerFactory.create(context)
    val request = IntegrityTokenRequest.builder()
        .setNonce(nonce)
        .build()
    val response = integrityManager.requestIntegrityToken(request).await()
    return response.token()
}

The integrity token is sent to the application's server, which decrypts it via Google's Play Integrity API and inspects the verdict — device integrity (MEETS_DEVICE_INTEGRITY indicates a genuine Android device with Play Protect), app integrity (the application binary matches what was signed and uploaded to Play Console), and account details (whether the Google account installing the app is known to Play). The server makes a decision based on the verdict — allow the sensitive operation, refuse it, or require additional verification.

The 2026 Mobile App Security Best Practices Stack

For developers building mobile applications in 2026, the recommended mobile app security best practices baseline — also referenced as mobile application security best practices in MASVS-aligned documentation — is: MASVS-L1 verification as the minimum quality bar for any application handling user data; MASVS-L2 for applications handling regulated data or operating in high-trust contexts; MASVS-R additionally for applications where client compromise has material business consequence. Server-side attestation (App Attest, Play Integrity) gating sensitive API operations. Platform-native secure storage (Keychain, Keystore) for all credentials and sensitive data. ATS / NetworkSecurityConfig in strict mode with TLS 1.2+ and modern cipher suites. Certificate pinning for applications where the threat model warrants. Minimum-necessary permission requests with graceful degradation when users decline broader permissions. ProGuard / R8 obfuscation for Android binaries to raise the bar against casual reverse engineering. Crash and integrity reporting feeding back to a server-side detection capability that flags compromised clients.

The discipline of security for mobile applications differs from security for web applications in the four structural ways covered earlier in this guide. The relationship between mobile apps and security is also distinct in operational tempo — mobile apps and security teams operate against an update cadence measured in weeks (App Store / Play Store review cycles, user-side update lag) rather than the hours-to-days web applications can achieve, which drives the design pattern of server-side enforcement for security-critical decisions rather than relying on mobile-side validation alone.

The integration with the broader application security program — verification anchored to MASVS, security activities embedded in the secure SDLC, compliance evidence flowing into the same artifacts the web/cloud sides produce — is the operational pattern that distinguishes a mobile-as-extension-of-AppSec program from a mobile-as-island program. The discipline is the same as for web applications covered in the ASVS 5.0 developer guide; the specific verification requirements and the platform-level primitives that satisfy them are mobile-specific. Programs that treat mobile as a separate practice from the broader AppSec program tend to underinvest in shared infrastructure (training, tooling, evidence collection); programs that treat mobile as an extension with mobile-specific verification activities have the cleanest operational structure.

Where Mobile Security Fits in ASVS and Secure SDLC

MASVS is the canonical verification standard for mobile applications, but the broader ASVS chapters apply with platform-specific interpretation. ASVS V11 Cryptography applies to mobile with the platform-secure-storage requirements (Keychain, Keystore) layered on top of the algorithm-correctness baseline. ASVS V14 Data Protection covers what data is stored where, which on mobile means platform-secure-storage decisions and the encrypted-database patterns. ASVS V6 Authentication covers the user-authentication flow with mobile-specific elements (biometric integration, platform-stored credentials) layered on top of the standard requirements. The mapping is not perfect — MASVS covers some mobile-specific requirements ASVS does not — but the relationship is complementary rather than competing.

The integration with the secure SDLC looks similar to the integration of web application security. Threat modeling at design time covers mobile-specific concerns (physical device access, platform security boundary placement, IPC attack surface) alongside the standard threat-modeling activities. Verification activities during testing exercise both the application-level concerns and the mobile-specific platform-integration concerns. Production monitoring includes mobile-specific signals (integrity verdict trends, certificate pinning failures, anomalous crash patterns) alongside the standard server-side observability.

The pragmatic adoption pattern for a development organization adding mobile to an existing web AppSec program: extend the existing ASVS verification process with MASVS for mobile applications, extend the existing threat-modeling template with mobile-specific sections, extend the existing developer training catalog with mobile-specific challenges. The compliance evidence falls out as a byproduct, satisfying the mobile-application elements of PCI DSS 6 (where payment-handling mobile apps are in scope), EU CRA Annex I (for products with digital elements that include mobile applications), and SOC 2 CC7.x change management. Organizations that build mobile AppSec as a parallel program rather than as an extension produce evidence duplication and operational fragility that they later have to refactor.

Mobile app security: questions developers ask

What are mobile app security best practices in 2026?

MASVS-L1 verification as the minimum quality bar (MASVS-L2 for regulated data, MASVS-R for high-value applications). Server-side attestation with App Attest (iOS) or Play Integrity (Android) gating sensitive operations. Platform-native secure storage (Keychain, Keystore) for credentials. ATS or NetworkSecurityConfig in strict mode with TLS 1.2+. Certificate pinning where threat model warrants. Minimum-necessary permissions. R8 or ProGuard obfuscation for Android. Server-side detection capability flagging compromised clients.

What is the difference between MASVS and the OWASP Mobile Top 10?

The OWASP Mobile Top 10 is an awareness list of the ten risks most consequential for mobile applications. MASVS (Mobile Application Security Verification Standard) is a verification standard with detailed individually-verifiable requirements organized by chapter and level (L1, L2, plus the resilience-focused R level). The Top 10 tells you which categories matter; MASVS tells you specifically what your application must do to satisfy each.

Should iOS apps use App Attest?

Yes for applications handling sensitive operations where server-side validation needs to verify the client is a genuine App Store binary on a real device. App Attest (iOS 14+) provides cryptographic attestation tied to the application bundle ID and device secure enclave. The server verifies the attestation against Apple's CA and can refuse to honor requests from modified clients, simulators, or jailbroken devices. The Android equivalent is Play Integrity API.

Where should I store credentials in a mobile app?

iOS: Keychain Services with the strictest accessibility class the application flow tolerates. Android: Keystore with hardware-backed key storage where available, EncryptedSharedPreferences for non-cryptographic-key sensitive data. Anti-patterns: NSUserDefaults / SharedPreferences for credentials, plain SQLite databases, files in the application documents directory — all accessible to attackers with device access.

Do I need to obfuscate my mobile app code?

For high-value applications (payment apps, IP-protecting applications, applications where client compromise has material business consequence), yes — code obfuscation (R8/ProGuard on Android, native LLVM obfuscation on iOS) raises the bar against reverse engineering. For typical line-of-business applications, obfuscation is helpful but not essential. MASVS-R covers the broader binary protection category for applications that need it.

How does mobile app security differ from web application security?

Four structural differences: the application binary ships to the user device where attackers can inspect and modify it; the platform security model (Android permissions, iOS sandbox, platform cryptographic stores) is part of the application threat model; operating systems change security boundaries with every major release; and updates take weeks to reach users rather than the hours-to-days web applications can deploy patches. These differences drive distinct defensive disciplines mobile applications need that web applications largely do not.

What is the difference between MASVS-L1, L2, and R?

L1 is the baseline for typical mobile applications. L2 is for applications with elevated security requirements (regulated data, sensitive operations). R is the resilience level adding client-side resilience requirements (anti-reverse-engineering, anti-tampering, anti-debugging) appropriate for high-value applications where client compromise has material business consequence. Applications can target L1+R or L2+R depending on the combination of data sensitivity and resilience needs.