Mobile App Security Review Checklist

Work through manifest, permissions, networking, storage, authentication, cryptography, logging, components, export, and deep-link checks — mark items complete, filter to what's left, and jump straight to the relevant reference entry.

Checklist

0 of 26 complete (0%)

Manifest0 / 3

Confirm android:debuggable is false (or absent) in the release build

Open
Why this matters

A debuggable release build allows ADB attachment and inspection on any device — never appropriate for production.

ASVS V14: Configuration

Set android:allowBackup deliberately, not by default

Open
Why this matters

The default allows full app data extraction via adb backup on unencrypted devices — decide explicitly rather than inheriting the platform default.

ASVS V14: Configuration

Confirm targetSdkVersion is current

Open
Why this matters

Older target SDKs receive more permissive defaults for permissions and background behavior on newer OS versions.

Permissions0 / 3

Audit every declared permission against actual app functionality

Open
Why this matters

An unused declared permission is pure attack surface with no corresponding benefit.

Mobile App Security Checklist (full detail)

Document the justification for every dangerous-permission-group request

Open
Why this matters

Location, contacts, SMS, and similar groups warrant a written reason a reviewer (or app store) can evaluate.

Verify bundled third-party SDKs aren't silently requesting extra permissions

Open
Why this matters

A dependency's own manifest merge can add permissions the app team never explicitly requested.

Networking0 / 3

Confirm no cleartext HTTP endpoints remain in a release build

Open
Why this matters

Cleartext traffic is trivially interceptable on any network the device joins.

M5: Insecure Communication

Evaluate certificate pinning for high-value endpoints

Open
Why this matters

Pinning defends authentication and payment endpoints against a broader class of interception than TLS alone.

M5: Insecure Communication

Review ATS exceptions (iOS) and Network Security Config (Android) for scope creep

Open
Why this matters

A broad exception added for one debug endpoint can end up covering far more than intended.

Storage0 / 2

Confirm tokens and PII use platform-encrypted storage, not plain SharedPreferences/SQLite

Open
Why this matters

Plaintext local storage is trivially readable given root, jailbreak, or backup extraction access.

M9: Insecure Data Storage

Check for sensitive files written to world-readable external storage

Open
Why this matters

External storage is readable by any app holding the relevant storage permission, not just the app that wrote the file.

M9: Insecure Data Storage

Authentication0 / 3

Confirm no custom TrustManager or certificate validator disables validation

Open
Why this matters

An empty or overridden trust check silently defeats TLS's authentication guarantee.

ASVS V2: Authentication

Verify OAuth authorization-code flows implement PKCE

Open
Why this matters

Mobile apps can't reliably keep a client secret confidential — PKCE is the mitigation designed for that constraint.

ASVS V2: Authentication

Confirm session tokens are stored in Keychain/Keystore, not SharedPreferences

Open
Why this matters

Token storage location determines whether a device-level compromise also compromises the user's session.

Cryptography0 / 3

Confirm no DES, 3DES, MD5, or SHA-1 usage for security-relevant operations

Open
Why this matters

These algorithms are cryptographically broken for security purposes even though they remain available in standard libraries.

Framework Coverage — CVSS & crypto mapping

Confirm no hardcoded encryption keys or IVs in source or resources

Open
Why this matters

A hardcoded key is extractable from the binary by anyone who obtains it, defeating the encryption entirely.

CWE-798: Use of Hard-coded Credentials

Confirm block ciphers do not use ECB mode

Open
Why this matters

ECB mode leaks structural patterns in the plaintext even when the underlying cipher is strong.

Logging0 / 2

Confirm logs never contain tokens, credentials, or PII

Open
Why this matters

Debug logging that includes a token or password is one of the most common accidental data leaks in mobile apps.

OWASP Coverage — M6 Inadequate Privacy Controls

Review what crash reporting / analytics SDKs actually capture

Open
Why this matters

Third-party crash and analytics tooling can capture more request/response detail than the team realizes by default.

Components0 / 2

List every exported Activity, Service, and BroadcastReceiver and confirm each needs to be exported

Open
Why this matters

An exported component with no permission requirement is reachable by any other app on the device.

OWASP Coverage — M8 Security Misconfiguration

Review broadcast receivers handling system events (boot, SMS, package-replaced)

Open
Why this matters

These receivers are common, easily overlooked targets since they trigger without direct user interaction.

OWASP Coverage — M8 Security Misconfiguration

Export0 / 3

Confirm the release build is signed with the production key, not a debug keystore

Open
Why this matters

The Android debug keystore is shared across every developer's environment and is not a secret.

APK Security Scanner

Confirm APK Signature Scheme v2+ is used, not v1-only signing

Open
Why this matters

V1-only signing is vulnerable to APK tampering exploits (e.g. the Janus class of attack) on older Android versions.

APK Security Scanner

Confirm the iOS provisioning profile and entitlements match the intended distribution channel

Open
Why this matters

An Enterprise-signed IPA bypasses App Store review entirely — verify that's actually the intended distribution path.

IPA Security Scanner

Deep Links0 / 2

Validate and sanitize every parameter a deep link or App Link can pass in

Open
Why this matters

A deep link handler is an input entry point exactly like a network API — unvalidated parameters carry the same injection risk.

Mobile App Security Checklist (full detail)

Review custom URL schemes for intent hijacking risk

Open
Why this matters

A custom scheme claimed by more than one installed app creates ambiguity an attacker can exploit.