Fraud and identity

OWASP Mobile Top 10 and mobile fraud: where each risk bites

The OWASP Mobile Top 10 (2024) read through a fraud lens: which risks fraudsters exploit, what an app can see, and how Otukan maps each risk to a control.

The OWASP Mobile Top 10 is a list of the ten most common classes of mobile app weakness, last revised in 2024. Read through a fraud lens, it becomes a map of where fraudsters get their foothold: a key left in the package, a binary that can be modified, traffic that can be read, a login that trusts whatever the device says. This article walks through the attack behaviour behind each risk, what an app can and cannot see, and how Otukan maps each risk to a control on Android and iOS. For turning industry index findings into a code and binary protection test of your own app, see mobile security index analysis.

The 2024 list at a glance

RiskNameWhat a fraudster gets
M1Improper credential usageAPI keys and tokens to call your backend directly
M2Inadequate supply chain securityA compromised SDK or build step inside a trusted app
M3Insecure authentication and authorisationActions that the server allows without proper checks
M4Insufficient input and output validationInjection into app logic or the backend
M5Insecure communicationReadable or modifiable traffic
M6Inadequate privacy controlsPersonal data to support impersonation
M7Insufficient binary protectionsAn app that can be read, modified and repackaged
M8Security misconfigurationDebug features, exported components, loose permissions
M9Insecure data storageTokens and data readable on the device
M10Insufficient cryptographyData that looks protected but is not
How the list has evolved
  1. 2016

    OWASP Mobile Top 10 (2016)

    The long-standing edition most security reviews still reference.

  2. 2024

    OWASP Mobile Top 10 (2024)

    A revised list that adds supply chain security and privacy controls, and names binary protections explicitly.

Attack behaviour: how fraud chains use the risks

Fraud rarely uses a single weakness. A typical account-takeover chain on a banking app strings three of them together.

  1. Read the app

    Decompile the package; find endpoints and a hard-coded key (M1, M7).

  2. Script the API

    Call login and transfer endpoints from a bot, outside the app (M3).

  3. Reuse a session

    Lift a token from a compromised device and replay it (M9).

  4. Evidence with each request

    Attestation and runtime signals travel with login and payment calls.

  5. Backend decides

    Your risk engine steps up or refuses the request.

An example chain: each step depends on the one before it, so each is also a place to break it.

Where Otukan maps each risk

Otukan groups its application security controls into five layers. The table below shows where each 2024 risk lands.

RiskCodeRuntimeDataNetworkAPI
M1 Credential usageSecrets kept out of the packageKeys verified server-side
M2 Supply chainIntegrity of shipped codeSDK behaviour watched at run time
M3 AuthenticationHooked sign-in detectedRequests carry app evidence
M5 CommunicationHardened transport
M6 PrivacySensitive data kept out of logs and screenshots
M7 Binary protectionsObfuscation, anti-tamperingRASP
M8 MisconfigurationRelease build checks
M9 Data storageKeystore and Keychain use
M10 CryptographyPlatform cryptography
Risks mapped to each Otukan layer
Data4Code3Runtime3API2Network1

Counts come from the mapping table above. M4 (input and output validation) is a secure-coding responsibility and sits outside the five layers.

Detection limits: what the app can see

An app sees its own process, its own package and what the operating system tells it. That is a lot, and it is not everything.

Visible to the app

  • Hooking and debugging of its own process
  • Changes to its own code, resources and signature
  • Rooted or jailbroken environments, emulators
  • Screen capture and overlays during sensitive steps

Needs the backend or other sources

  • Whether a request came from the app at all
  • Whether a token is being replayed elsewhere
  • Account history and transaction patterns
  • Confirmation that an incident really happened
App-visible signals are strongest when your backend combines them with what it already knows.

On Android and iOS the visible set differs. Android exposes more about installed software and system state; iOS keeps each app in a stricter sandbox, so signals focus on the app’s own process and on Apple’s attestation service. Otukan builds each check for its platform and never carries an assumption from one to the other.

Response: proportionate controls for real users

Treat each risk as a question for a specific user flow: what should happen at login, at payee creation, at transfer, when the signal fires?

  • Observe first. Send signals to your backend without changing the experience and measure how often each fires.
  • Step up where it matters. Ask for a second factor or a confirmation on high-value actions when signals combine.
  • Restrict, then terminate. Pause sensitive features before ending a session, and give support teams a clear path for genuine users.

Before your next review

  • Map your last penetration test findings to the 2024 risk numbers.
  • List every secret shipped in the package, and move each one server-side.
  • Check which API calls your backend accepts without app evidence.
  • Decide the response for each signal on login, payee creation and transfer.
  • Test the protected build on your oldest and newest supported devices.

Common questions

  • Which OWASP Mobile Top 10 risk sits outside Otukan's controls?

    M4, insufficient input and output validation. It is a secure-coding responsibility and sits outside Otukan's five control layers of code, runtime, data, network and API. The other 2024 risks map to one or more of those layers, as the mapping table on this page shows, with the data layer carrying the most.

  • Will fixing one OWASP risk stop a fraud chain?

    Rarely. Most fraud chains combine two or three risks, such as a hard-coded key in a readable package, a scripted API and a replayed session token. The example chain breaks at a package that resists reading, a backend that refuses requests without app evidence, and sessions bound to their device. Layering all three makes it expensive.

  • What can an app detect on its own, and what needs the backend?

    The app can see hooking and debugging of its own process, changes to its code, resources and signature, rooted or jailbroken environments, emulators, and screen capture or overlays during sensitive steps. Whether a request came from the app at all, token replay, account history and incident confirmation need the backend or other sources.

  • Are the Android and iOS checks the same?

    No. Android exposes more about installed software and system state, while iOS keeps each app in a stricter sandbox, so iOS signals focus on the app's own process and on Apple's attestation service. Otukan builds each check for its platform and never carries an assumption from one to the other.

  • Should a detection block the user straight away?

    Not by default. A detection is evidence, not a verdict, and legitimate users sometimes run developer settings or unusual devices. Start by observing how often each signal fires, step up with a second factor on high-value actions when signals combine, and restrict sensitive features before ending a session.

Keep reading