Blog
Technical Walkthroughs

How a mobile application pentest works

The real sequence of an iOS or Android engagement, from the rules of engagement to the retest, including what this kind of test deliberately does not cover.

M
Marta Alarcón
COO
29 July 2026
7 min read
Compartir:
A mobile application drawn in three layers, binary, on-device storage and transport, with its traffic routed through an intercepting proxy.

What this test is, and what it answers

A mobile application penetration test is a manual assessment of an iOS or Android app and the backend it talks to, run from the position of somebody who downloaded your app onto a device they fully control.

That last clause is the whole discipline. Once a build reaches a store the attacker owns the runtime: they take it apart offline, install it on unrestricted hardware, hook it as it runs and replay what it sends, none of which touches your infrastructure.

So the test does not answer "is the app secure", but three narrower questions: what can somebody extract from the build, what can they bypass on the device, and what does that let them do to your server.

Scope, builds and rules of engagement

Nothing technical starts until the scope is on paper: which apps, which platforms, which build identifiers, which backend environment, which test accounts, and what we may do to each.

The rules of engagement matter more here than clients expect, because the work has two halves with very different blast radii. Taking a build apart on our hardware touches nothing of yours. Following the token we found inside it into your API does. NIST SP 800-115 defines rules of engagement as the document that "gives the test team authority to conduct defined activities without the need for additional permissions". The backend half needs agreed windows, agreed rate limits and a named contact first.

Worth being explicit about
We test a build you supply, on our own instrumented handsets. Not on your users’ phones, and not against production data unless a named, non-destructive action is authorised in writing first.

Static analysis: the build, taken apart

The first technical phase needs nothing running. We open the .apk, .aab or .ipa: manifest or Info.plist, compiled code, resources, bundled SDKs and every string that shipped by accident.

What comes out of the package

  • Hardcoded credentials, API keys and endpoint URLs. OWASP puts this first on the Mobile Top 10 2024, as "M1: Improper Credential Usage".
  • Debug artefacts that survived the release build: staging hosts, verbose logging, developer-only endpoints.
  • Third-party SDKs and what they collect. Supply chain is second on the same list, as "M2: Inadequate Supply Chain Security".

Where the platforms differ

iOS and Android are scoped separately, because a flaw on one is often absent on the other. Android’s Network Security Configuration lets an app choose its trusted certificate authorities, opt out of cleartext traffic and pin certificates; for apps targeting Android 9 (API level 28) and higher the default sets cleartextTrafficPermitted to false. App Transport Security operates by default for apps linked against the iOS 9.0 SDK or later, requiring TLS 1.2 or later and forward secrecy through ECDHE. Both can be loosened in a few lines, and this is where you find out.

Runtime: the app on a device we control

This phase belongs to mobile and nothing else. The build goes onto a rooted or jailbroken handset and we watch it work. MASVS-RESILIENCE-1 states the premise better than we can: "Running on a platform that has been tampered with can be very dangerous for apps, as this may disable certain security features." So we tamper with it deliberately, then examine what the app assumed it could trust.

  • Insecure local storage. MASVS-STORAGE-1 covers data stored on purpose; MASVS-STORAGE-2 covers leaks nobody intended, "typically as a side-effect of using certain APIs, system capabilities such as backups or logs".
  • Root and jailbreak detection, tested as built rather than as documented. MASVS-RESILIENCE-4 exists because runtime instrumentation lets an attacker change the app’s behaviour while it executes.
  • IPC and deep link hijacking: exported components, custom URL schemes, universal links, clipboard, notifications. MASVS-PLATFORM-1 governs the mechanisms apps use "to intentionally expose data or functionality".
  • Session and biometric behaviour: what really gates a sensitive action, and what survives backgrounding, a screenshot or a restore from backup.

The traffic, and the backend behind the app

Now the app talks and we need to read it, which means defeating certificate pinning on a device we already control. That bypass is not a finding by itself. It is the entry ticket to the half of the engagement where the damage lives.

The half most mobile tests skip
MASVS-AUTH-1 puts it flatly: enforcement of authentication and authorisation "must be on the remote endpoint". A test that stops at the binary sees where the keys are, never what they unlock.

Server-side the work is what an API engagement covers, scoped to the surface the app calls. It starts with broken object level authorisation, first on the OWASP API Security Top 10 2023: change the identifier in a request from your object to somebody else’s and see whether the server checks. Broken function level authorisation, unrestricted resource consumption and improper inventory management sit on the same list.

Those chains rarely end in the app: the same object identifiers reach the API, and the API reaches whatever the cloud account behind it can.

Exploitation, chaining and verification

Until now we hold candidates. Exploitation turns a candidate into a fact, and it is what separates a pentest from a scan. NIST SP 800-115 draws the line: "While vulnerability scanners check only for the possible existence of a vulnerability, the attack phase of a penetration test exploits the vulnerability to confirm its existence."

A key in the binary is a note. A key that still authenticates against a production endpoint, which then returns another customer’s records, is an incident somebody has not had yet. So each candidate is carried as far as it goes, and the phases loop: the four-stage model in NIST SP 800-115, planning, discovery, attack and reporting, has a documented feedback path from attack back into discovery.

Every working step is captured so your engineers can replay it: request and response, instrumentation script, device state, build identifier.

What you receive, and the retest that closes it

  • An executive read. What an attacker can do, to which data, and what it costs. Written to be forwarded.
  • A technical read. Per finding: affected component and platform, reproduction steps, the request and response or the hooking script, evidence, severity and fix.
  • The evidence pack. Captures, logs, proof-of-concept scripts and the build identifier behind each proof.
  • A coverage map, so you see what was verified and not only what failed. The OWASP MAS Checklist "contains links to the MASTG test cases for each MASVS control".

Severity is scored with CVSS, maintained by FIRST. A base score is intrinsic technical severity, constant across environments and over time, and the specification is explicit that it feeds a risk process weighing regulatory exposure, customer impact and business loss too. Findings are ranked by what they reach in your environment.

Then the retest. A finding is closed when the original proof of concept stops working against the fixed build, re-run on the same devices with the same steps. That catches the fix aimed at the demonstration rather than the pattern, and the fix that landed in the app while the server kept accepting the old request. Every Asperis engagement includes it at no extra cost.

What you need ready, and how long it takes

Have this ready before day one

  • A signed, installable build per platform, ideally the release build, plus the identifier to print on the report.
  • Test accounts, two per role minimum, with whatever gets past onboarding: readable OTP delivery, sandbox identity checks, a funded test wallet.
  • The backend environment and base URLs, and a decision on production versus staging, stating any difference in authentication, data volume or configuration.
  • Named contacts on both sides, and a channel where a critical finding reaches a decision-maker within the hour.
  • API documentation, the SDK inventory and previous reports.

How long the window is

A single-platform app is typically one to two weeks of active testing. Both iOS and Android, or a complex backend inside the scope, runs to two or three weeks. Scoping happens before that window opens and the retest follows your fixes.

What moves it: platforms in scope, how many authenticated roles there are, the size of the API surface, whether the app handles payments, identity or health data, and whether resilience controls must be defeated first.

The frameworks this maps to

  • OWASP MASVS, currently v2.1.0, released January 2024. Eight control groups: MASVS-STORAGE, MASVS-CRYPTO, MASVS-AUTH, MASVS-NETWORK, MASVS-PLATFORM, MASVS-CODE, MASVS-RESILIENCE and MASVS-PRIVACY. Since v2.0.0 it drops the old L1, L2 and R verification levels, which became MAS Testing Profiles in the MASWE.
  • OWASP MASTG, the testing guide beside it: test cases, techniques, tools and demos for Android and iOS. MASVS says what has to be true; MASTG says how you check.
  • NIST SP 800-115, "Technical Guide to Information Security Testing and Assessment", September 2008, for the shape of the engagement: planning, discovery, attack, reporting.
  • PTES, whose seven sections run from pre-engagement interactions and intelligence gathering through threat modelling, vulnerability analysis, exploitation and post exploitation to reporting.

The OWASP Mobile Top 10 2024 is an awareness list rather than a methodology; findings are mapped onto it because your stakeholders have heard of it. For apps you procure rather than build, NIST SP 800-163 Revision 1, "Vetting the Security of Mobile Applications", April 2019, is the companion process.

What a mobile pentest does not cover

  • It does not make the app safe on a hostile device. MASVS-RESILIENCE-4 aims to make dynamic analysis "as difficult as possible". Difficult, not impossible. Mobile app attestation and root checks raise an attacker’s cost; they do not replace a server that validates every request.
  • It is not a full test of your backend. We cover the API surface the app calls. Endpoints no mobile client touches, internal services and admin panels need their own web application engagement.
  • It is not a source code audit. A shipped binary shows what shipped, the attacker’s view, but it is not your repository: logic we cannot reach inside the window can be missed.
  • It is not an infrastructure or cloud assessment. The servers, storage, identity configuration and network behind your API belong to a cloud engagement.
  • It is not continuous. A pentest is a point in time against a named build; the next release can reintroduce anything closed. NIST SP 800-115 calls the technique labour-intensive and expertise-heavy: the trade is depth on one build, not coverage over time.
  • It is not a compliance certificate. The report is evidence an auditor can accept, not an ISO 27001 or ENS statement.

If a supplier says their mobile test covers all six, ask which of the six they are quietly not doing.

Sources

Every framework reference and platform default above comes from one of these.

M
Marta Alarcón
COO
Compartir:

If any of this looks like a problem you are carrying, half an hour on a call scoping it with a senior pentester is worth more than reading another article.

Hablar con un pentester senior