Security Testing for Mobile Apps: Practical Guide (2026)
Mobile app security bugs have asymmetric impact: one vulnerability can affect millions of users and land you on the front page. Most mobile security testing falls into three buckets — static analysis
Mobile app security bugs have asymmetric impact: one vulnerability can affect millions of users and land you on the front page. Most mobile security testing falls into three buckets — static analysis of the APK/IPA, dynamic analysis of the running app and its traffic, and authorization testing of the backend APIs. This guide covers all three.
Threat model
Before testing, agree on what you are protecting against:
- Remote attacker with internet access, no device
- Local attacker on the same Wi-Fi (MITM)
- Device attacker with physical access to an unlocked phone
- Malicious app installed alongside yours
- Jailbroken / rooted device attacker with full runtime access
Coverage varies by threat. Banking apps cover all five. A casual utility app may care about the first three.
Static analysis (APK / IPA)
Catches hardcoded secrets, insecure configurations, over-privileged permissions.
What to check
- No API keys or secrets in the binary (
strings your.apk | grep -i "key\|secret\|token") - No developer URLs (
grep -i "staging\|dev\|localhost") android:debuggableis false in releaseandroid:allowBackupis false for apps with user data- Minimum required permissions only
- TLS settings strict (no cleartextTrafficPermitted)
- Certificate pinning present (for high-stakes apps)
- Exported components (Activities, Services, ContentProviders) are intentional
- ProGuard / R8 obfuscation enabled for release
- Debug symbols stripped from native libraries
Tools
- MobSF (Mobile Security Framework) — static + dynamic, open source
- Hammer (SUSA integration available) — 17 static scanners + 16 abuse scanners
- apktool + strings — manual inspection
- Binary SCA tools (Snyk, Mend) — third-party library vulnerabilities
iOS specific
NSAppTransportSecurityproperly configured- No
arbitrary loadsunless justified - Keychain items use appropriate accessibility levels
- Code signing intact and matches expected team
Dynamic analysis (running app + traffic)
Catches auth bugs, insecure storage, data exfiltration.
Traffic inspection
Use a proxy (mitmproxy, Burp, Charles):
- Install root CA on device (or bypass pinning for testing)
- Route device traffic through proxy
- Exercise the app, inspect every request and response
Look for:
- PII in URL parameters (query strings cached in logs)
- Tokens sent via HTTP (should be HTTPS only)
- Sensitive data in responses (passwords, full SSNs, etc.)
- Missing security headers on API responses
- Verbose error messages leaking stack traces or system info
Storage inspection
With ADB on Android (debug build or root):
/data/data/com.example/— SharedPreferences, databases, files- Look for plaintext credentials, tokens, PII
- Database should be encrypted (SQLCipher) for sensitive data
- SharedPreferences should use
EncryptedSharedPreferencesfor secrets
Runtime
- Frida for hooking — bypass checks, inspect variables
- Objection for iOS — similar for IPA
- Use to verify obfuscation, certificate pinning, root detection actually work
API / backend testing
Most mobile "security" bugs are really API authorization bugs. Test API-first.
IDOR (Insecure Direct Object Reference)
The mobile app prevents accessing user B's data. The API accepts the request if you send user B's ID. Test by swapping IDs with a second account.
Broken auth
- Can you call authenticated endpoints without a token?
- Can you call them with an expired token?
- Can you call them with another user's token?
Excessive data exposure
The API returns the full user record including fields the app ignores. Exposed fields can contain PII, internal IDs, password hashes.
Rate limiting
Login endpoint without rate limit → credential stuffing.
Mass assignment
API accepts a is_admin=true field even though no client sends it.
Injection
SQL, NoSQL, command injection, LDAP injection — especially at search and filter endpoints.
Tools
- Burp Suite (manual or pro)
- ZAP (free alternative)
- Hammer abuse scanners
- Postman + Newman for scripted API security tests
OWASP Mobile Top 10 (2024)
- Improper credential usage
- Inadequate supply chain security
- Insecure authentication / authorization
- Insufficient input / output validation
- Insecure communication
- Inadequate privacy controls
- Insufficient binary protections
- Security misconfiguration
- Insecure data storage
- Insufficient cryptography
Every release, verify each is covered by at least one test.
How SUSA approaches security
Three layers integrated:
- Static analysis via Hammer — 17 scanners on APK upload, findings persisted and tracked
- Runtime analysis during exploration — logcat PII, cleartext traffic, screenshot sensitive-data detection
- API surface analysis — captures APIs, detects auth patterns, key-in-URL, oversized responses, verbose errors
- Abuse simulation via Hammer — 16 scanners try IDOR, auth bypass, tampering, header injection on captured APIs
Cross-session tracking: security findings from session N compared against session N+1 to report regressions (fixed, new, persisting).
susatest-agent test myapp.apk --security-depth full
Frequency
- Static + dynamic: every release build
- Full pen test (external firm): annually at minimum, more for regulated industries
- Threat modeling review: per major feature
Mobile security has matured. Good tooling exists. The main barrier is making security testing routine rather than occasional. Build it into CI, make it blocking, and the compound effect over releases is a hardened product.
Test Your App Autonomously
Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.
Try SUSA Free