Skip to content
Offshore MobileDevelopment

Mobile App Security

A Mobile App Security Checklist Built on OWASP MASVS

By the Offshore Mobile Development editorial team · · 6 min read

Most mobile security failures are not exotic. Tokens left in plain-text preferences, API keys compiled into the binary, outdated SDKs with known vulnerabilities, and debug logging that ships to production account for a large share of the issues security testers find. A checklist will not make an app secure on its own, but it stops the common mistakes from reaching users.

We organize our checklist around the OWASP Mobile Application Security Verification Standard (MASVS) and cross-reference the OWASP Mobile Top 10 (2024). Both are free, maintained by the security community and widely used by testers, which means your engineering team, your security reviewer and your offshore mobile app development partner can all work from the same vocabulary.

MASVS, MASTG and the Mobile Top 10: how they fit together

The MASVS defines what a secure mobile app should do, grouped into control areas. The Mobile Application Security Testing Guide (MASTG) explains how to verify each control on iOS and Android. The OWASP Mobile Top 10 is a risk awareness list that ranks the most common categories of failure. Use the Top 10 to explain priorities to stakeholders and MASVS to define acceptance criteria for your team.

OWASP Mobile Top 10 (2024) mapped to MASVS control groups
Mobile Top 10 (2024)Main MASVS groups
M1: Improper Credential UsageAUTH, STORAGE
M2: Inadequate Supply Chain SecurityCODE
M3: Insecure Authentication/AuthorizationAUTH
M4: Insufficient Input/Output ValidationCODE, PLATFORM
M5: Insecure CommunicationNETWORK
M6: Inadequate Privacy ControlsPRIVACY
M7: Insufficient Binary ProtectionsRESILIENCE
M8: Security MisconfigurationPLATFORM, CODE
M9: Insecure Data StorageSTORAGE
M10: Insufficient CryptographyCRYPTO

The mapping is approximate; several risks touch more than one control group. It is a planning aid, not an official OWASP crosswalk.

STORAGE and CRYPTO: protecting data on the device

Start by listing every piece of sensitive data the app stores: tokens, personal data, health or financial records, cached files. Then decide whether each item needs to be stored at all. Data you never write to disk cannot leak from it.

  • iOS: store credentials and tokens in the Keychain with an appropriate accessibility class (for example, available only when unlocked and not migrated to other devices where that fits). Use Data Protection classes for sensitive files.
  • Android: generate and hold keys in the Android Keystore, ideally hardware-backed, and use them to encrypt sensitive data you store. Avoid storing tokens in plain SharedPreferences.
  • Cross-platform: in Flutter and React Native, use well-maintained plugins that wrap Keychain and Keystore rather than JavaScript or Dart-only storage.
  • Exclude sensitive data from logs, screenshots in the app switcher, clipboard and backups where appropriate.
  • Use platform crypto APIs and current algorithms. Never write custom cryptography or hardcode encryption keys.

AUTH and NETWORK: sessions, TLS and pinning trade-offs

Authentication and authorization decisions belong on the server. The app can hide a button, but the API must reject a request the user is not allowed to make. Use short-lived access tokens with refresh tokens, standard flows such as OAuth 2.0 with PKCE for third-party sign-in, and platform biometrics to unlock locally stored credentials rather than as a replacement for server-side auth.

All traffic should use TLS. Keep App Transport Security on iOS and Android's network security configuration strict, with no cleartext exceptions in release builds.

Certificate pinning: when it is worth it

Pinning makes the app trust only specific certificates or public keys, which raises the bar for interception. It also creates an outage risk: if your certificate changes and the app does not have the new pin, users lose connectivity until they update. If you pin, pin public keys rather than leaf certificates, include backup pins, coordinate certificate rotation with releases and consider a remote kill switch. For many consumer apps, strict TLS without pinning is a reasonable choice; for banking, health and high-value targets, pinning is usually worth the operational cost.

PLATFORM and CODE: secrets, inputs and dependencies

Anything compiled into the app can be extracted with freely available tools. Obfuscation slows attackers down but does not hide a secret. API keys for paid services, database credentials and signing keys should live on your backend, with the app calling your server, which then calls the third party.

  • Keep secrets out of source control and the binary; use a secrets manager in CI.
  • Validate deep links, intents, URL schemes and WebView inputs; never trust data from other apps.
  • Restrict exported Android components and limit WebView JavaScript bridges.
  • Run software composition analysis on every build to catch vulnerable libraries and SDKs.
  • Pin dependency versions, review new SDKs before adding them, and remove unused ones.
  • Strip debug logging and test endpoints from release builds.

RESILIENCE and PRIVACY: hardening and data minimization

Resilience controls, such as root and jailbreak detection, tamper checks, obfuscation and runtime integrity APIs like Apple's App Attest and Google's Play Integrity API, make reverse engineering and automated abuse harder. They are defense in depth, not a substitute for server-side checks. Apply them in proportion to risk: a payments app needs more than a recipe app.

MASVS-PRIVACY focuses on collecting only what you need, being transparent about it and giving users control. In practice that means minimizing permissions, avoiding device identifiers you do not need, keeping App Store privacy labels and Google Play data safety answers accurate, and honoring deletion requests. Teams building healthcare apps or fintech products should map these controls to their regulatory obligations with their compliance advisers.

Testing with the MASTG and building security into delivery

  1. 1

    Pick your verification level

    Agree which MASVS controls apply, and whether resilience controls are in scope, based on the data and threat model.

  2. 2

    Automate the basics

    Add static analysis, dependency scanning and secret detection to CI so every pull request is checked.

  3. 3

    Review high-risk changes

    Require a security-aware reviewer for authentication, payments, storage and networking code.

  4. 4

    Test against the MASTG

    Before major releases, have an internal or independent tester work through the relevant MASTG test cases on real devices.

  5. 5

    Track and retest

    Log findings with severity, fix them, and retest. Repeat after significant architecture or SDK changes.

Security does not end at launch. New OS versions, SDK updates and disclosed vulnerabilities all require follow-up, which is why we fold dependency updates and periodic retesting into ongoing app maintenance. For larger organizations, our enterprise mobile development work adds MDM, SSO and audit requirements on top of this baseline.

Frequently asked questions

Is MASVS a certification?

No. MASVS is an open standard that describes security requirements. Following it and testing against the MASTG gives you a structured, defensible baseline, but it is not a certification or a guarantee of compliance with any regulation.

Should every app use certificate pinning?

Not necessarily. Pinning adds protection against interception but introduces the risk of breaking connectivity when certificates change. It is most justified for high-risk apps such as banking and health, and only when you have a plan for rotation and backup pins.

Can obfuscation protect API keys in my app?

It can make extraction slower, but not prevent it. Treat any value shipped in the app as public. Keep sensitive keys on your server and have the app call your backend instead.

How often should we run a security test?

Automated checks should run on every build. A manual MASTG-based review is sensible before the first launch, after major changes to authentication, payments or data handling, and on a regular schedule agreed with your security lead.

This article is general guidance based on common delivery practice. It is not legal, tax or financial advice; platform rules and regulations change, so confirm current requirements with the relevant provider or adviser.

More articles

Tell us what you're building

Share your idea, current app or hiring need. A senior engineer reviews every inquiry and replies with next steps, questions and a realistic delivery approach.