Markdown Editor

Mobile App Security Assessment Template (OWASP MASVS 2.1, MASTG, MASWE)

App scope, MAS profile choice (L1, L2, R, P), method, attack surface, 8 MASVS categories with MASWE and MASTG IDs, 24-control matrix, findings, retest

보안 엔지니어링전체OWASP MASVS v2.1.0; MASWE v1.0.0; MASTG v2.0.0CC BY-SA 4.0mobileappassessment

사용법: Use it to assess one Android or iOS release against OWASP MASVS v2.1.0, citing MASWE v1.0.0 weaknesses and MASTG v2.0.0 tests. Pick the MAS profile and record exact build numbers first, then work category by category. The main pitfall is copying MASWE numbers from MASTG test files, which still use the pre-v1.0.0 numbering.

미리보기

Mobile App Security Assessment: [App name, platform and version]

Security and privacy assessment record for one Android and/or iOS app release: scope and app profile, choice of MAS testing profile, method and evidence, data flow, assessment of all 24 controls of the OWASP Mobile Application Security Verification Standard (MASVS) v2.1.0 across its eight categories, with weaknesses from the OWASP Mobile Application Security Weakness Enumeration (MASWE) v1.0.0 (August 2026) and atomic tests from the OWASP Mobile Application Security Testing Guide (MASTG) v2.0.0 (June 2026), a scored findings register, summary, remediation, retest and sign-off. Versions as checked in October 2026. The structure, questions and examples are original. Replace every [bracketed] value and every row marked Example.

Document control

FieldValue
Document ID[MASA-2026-004]
Version[1.0]
Status[Draft / In review / Approved / Superseded]
Owner (app product owner)[@mobile-owner]
Assessor(s)[@mobile-security-tester], [@second-assessor]
Approvers[@engineering-lead], [@security-lead], [@privacy-lead]
Last updatedYYYY-MM-DD
Classification[Confidential: contains unremediated findings]
App and builds[Android com.example.app 3.8.0 (380), iOS 3.8.0 (2026.10.1)]
MAS profile[MAS-L2 + MAS-P]
BaselinesOWASP MASVS v2.1.0; MASWE v1.0.0; MASTG v2.0.0
Assessment windowYYYY-MM-DD to YYYY-MM-DD

Approvals

RoleNameDecisionDate
Lead assessor[@name][Submitted]YYYY-MM-DD
App product owner[@name][Accepted / Accepted with conditions / Rejected]YYYY-MM-DD
Security lead[@name][Approved / Changes requested]YYYY-MM-DD
Privacy lead (MAS-P)[@name][Approved / Changes requested]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]Scope, profile and builds recorded
0.9YYYY-MM-DD[@name]Example: Testing complete, 11 findings recorded
1.0YYYY-MM-DD[@name]Example: Owner decision and remediation dates agreed
1.1YYYY-MM-DD[@name]Example: Retest of MOB-001, MOB-005 and MOB-009 on Android build 381 and MOB-006 on iOS build 2026.10.2

Contents

1. Scope and app profile

ItemValue
App purposeExample: Tallowmere Rewards: loyalty points, stored payment card reference, points transfer between members
Platforms and minimum OSExample: Android minimum API level 28, target API level [current]; iOS minimum 16
Build type assessed[Release build signed for store, plus debug build for dynamic testing]
Framework[Native Kotlin and Swift / React Native / Flutter / .NET MAUI / Kotlin Multiplatform]
Sensitive dataExample: Session tokens, member profile, partial card number, location (for store finder)
Backend APIsExample: api.[example].com/v2 (reviewed in [APISR-2026-001])
Third-party SDKsExample: Crash reporting, push notifications, maps, analytics (list with versions in the SBOM)
Platform featuresExample: WebView for offers, app links, biometric unlock, push notifications, home-screen widget
Distribution[Google Play, Apple App Store, enterprise MDM]

In scope: [both release builds, local storage, network traffic to first-party and third-party hosts, IPC surfaces, WebViews, authentication flows, privacy declarations].

Out of scope (with reason): [backend API server-side testing (separate API review), payment provider SDK internals (covered by provider attestation), denial of service].

Test devices: [Pixel test device with Android version n, rooted for dynamic testing; iPhone with iOS version n, jailbroken test device; non-rooted devices for behaviour checks].

2. MAS profile selection

ProfileUse when (own summary)SelectedReason
MAS-L1 Essential SecurityBaseline for every app: secure storage, network, platform use and code hygieneYes (always)Minimum
MAS-L2 Advanced SecurityApps handling sensitive data or transactions, where defence in depth is expectedExample: YesPoints transfer has monetary value; stored card reference
MAS-R Resilient SecurityApps where reverse engineering, tampering or cloning is a business threat (for example DRM, games, payment apps with client-side secrets)Example: NoNo client-side logic whose disclosure causes loss; server enforces all limits
MAS-P Baseline PrivacyApps that collect personal data or embed tracking SDKsExample: YesLocation, profile and analytics SDK

In MASWE v1.0.0, every weakness carries one or more of the profile tags L1, L2, R and P. Example scope: 78 weaknesses in the catalogue, of which 15 are tagged R only (MASWE-0051 to MASWE-0065) and are out of scope because MAS-R is not selected.

3. Method, evidence and rating

TechniquePurposeMASTG v2 test styleUsed
Static analysis of the packageConfiguration, manifest and plist settings, API references, hardcoded data"References to ..." tests[Yes / No]
Dynamic analysis on deviceRuntime behaviour, storage written, IPC, WebView behaviour"Runtime use of ..." tests[Yes / No]
Network interceptionTLS, pinning, cleartext, personal data in trafficNetwork traffic tests[Yes / No]
Dependency and SBOM analysisKnown vulnerable componentsSBOM tests[Yes / No]
Privacy declaration reviewStore data declarations, permission rationale, tracking domainsPrivacy tests[Yes / No]

Rating. Score each finding as likelihood (1 to 5) x impact (1 to 5). 20 to 25 Critical, 10 to 16 High, 5 to 9 Medium, 1 to 4 Low. Likelihood must reflect the attacker position the weakness needs (another app on the device, physical access to an unlocked device, network position, rooted device), because many mobile weaknesses need a privileged position.

ID translation rule. MASTG v2.0.0 test files reference MASWE beta numbers. Example: MASTG-TEST-0287 (runtime storage of unencrypted data via the SharedPreferences API) carries beta MASWE-0006, which maps to v1.0.0 MASWE-0001 (sensitive data stored unencrypted in private storage). Record the v1.0.0 ID in this document.

4. Data flow and attack surface

SurfaceSensitive data crossingMain MASVS controlsTested
Private storage and keystoreSession token, profile, keysSTORAGE-1, CRYPTO-2[Yes]
OS servicesCard fragment on screen, notificationsSTORAGE-2, PLATFORM-3[Yes]
Exported components and deep linksAccount actionsPLATFORM-1, CODE-4[Yes]
WebViewSession context, JavaScript bridgePLATFORM-2[Yes]
NetworkAll API trafficNETWORK-1, NETWORK-2[Yes]
Third-party SDKsDevice and usage dataPRIVACY-1 to PRIVACY-3, CODE-3[Yes]

5. Assessment by MASVS category

5.1 MASVS-STORAGE

Controls: STORAGE-1 (sensitive data is stored securely) and STORAGE-2 (sensitive data does not leak).

Questions:

  • Where does the app write sensitive data (preferences, databases, files, caches, WebView storage, shared containers), and is it encrypted with a key in the platform keystore?
  • Does sensitive data appear in logs, backups, keyboard caches or shared storage?
  • Are secrets such as API keys or encryption keys hardcoded in the package?

Relevant MASWE v1.0.0: MASWE-0001 to MASWE-0006. Example MASTG tests: Android MASTG-TEST-0287, MASTG-TEST-0203, MASTG-TEST-0262; iOS MASTG-TEST-0299, MASTG-TEST-0296, MASTG-TEST-0215.

5.2 MASVS-CRYPTO

Controls: CRYPTO-1 (current strong cryptography used correctly) and CRYPTO-2 (key management follows good practice).

Questions:

  • Which algorithms, modes and key sizes does the app use, and are any broken or deprecated?
  • Are keys generated in or protected by the platform keystore, with access restricted to the purpose?
  • Is randomness for security purposes taken from a secure source?

Relevant MASWE v1.0.0: MASWE-0007 to MASWE-0017. Example MASTG tests: Android MASTG-TEST-0221, MASTG-TEST-0204, MASTG-TEST-0212; iOS MASTG-TEST-0210, MASTG-TEST-0311, MASTG-TEST-0213.

5.3 MASVS-AUTH

Controls: AUTH-1 (secure authentication and authorization protocols), AUTH-2 (local authentication done securely) and AUTH-3 (sensitive operations need additional authentication).

Questions:

  • Does the app rely on the backend for authentication and authorization decisions, using a standard protocol such as OAuth 2.0 with PKCE?
  • Is biometric unlock bound to a keystore key (event-bound), and is the key invalidated when a new biometric is enrolled?
  • Do sensitive actions (points transfer, profile change) require step-up authentication without a weak fallback?

Relevant MASWE v1.0.0: MASWE-0018 to MASWE-0025. Example MASTG tests: Android MASTG-TEST-0326, MASTG-TEST-0327, MASTG-TEST-0328; iOS MASTG-TEST-0266, MASTG-TEST-0268, MASTG-TEST-0270.

5.4 MASVS-NETWORK

Controls: NETWORK-1 (all traffic secured with current practice) and NETWORK-2 (identity pinning for endpoints the developer controls).

Questions:

  • Is any cleartext traffic allowed by configuration (Android network security configuration, iOS App Transport Security exceptions) or used at run time?
  • Is server certificate and hostname validation ever weakened in code or WebViews?
  • For L2: are first-party endpoints pinned, and do pins have a rotation plan?

Relevant MASWE v1.0.0: MASWE-0026 to MASWE-0028. Example MASTG tests: Android MASTG-TEST-0235, MASTG-TEST-0283, MASTG-TEST-0242; iOS MASTG-TEST-0322, MASTG-TEST-0396, MASTG-TEST-0385.

5.5 MASVS-PLATFORM

Controls: PLATFORM-1 (IPC used securely), PLATFORM-2 (WebViews used securely) and PLATFORM-3 (user interface used securely).

Questions:

  • Which components are exported (activities, services, receivers, content providers, URL schemes, universal and app links), and does each check the caller and validate input?
  • Do WebViews load only trusted content, and is any native bridge exposed to untrusted pages?
  • Is sensitive data hidden in screenshots, app switcher previews, notifications, text fields and the clipboard?

Relevant MASWE v1.0.0: MASWE-0029 to MASWE-0040. Example MASTG tests: Android MASTG-TEST-0364, MASTG-TEST-0393, MASTG-TEST-0252, MASTG-TEST-0289; iOS MASTG-TEST-0370, MASTG-TEST-0376, MASTG-TEST-0290, MASTG-TEST-0276.

5.6 MASVS-CODE

Controls: CODE-1 (up-to-date platform version required), CODE-2 (update enforcement exists), CODE-3 (no components with known vulnerabilities) and CODE-4 (untrusted input validated and sanitised).

Questions:

  • Does the app target the latest platform version and refuse to run on unsupported OS versions where needed?
  • Can the backend force an update when a vulnerable version is in the field?
  • Does the SBOM show components with known vulnerabilities, and are compiler protections enabled for native code?
  • Is data from deep links, intents, files and the network validated before use, including deserialisation and SQL?

Relevant MASWE v1.0.0: MASWE-0041 to MASWE-0050. Example MASTG tests: Android MASTG-TEST-0245, MASTG-TEST-0392, MASTG-TEST-0274, MASTG-TEST-0339; iOS MASTG-TEST-0383, MASTG-TEST-0275, MASTG-TEST-0386.

5.7 MASVS-RESILIENCE

Controls: RESILIENCE-1 (platform integrity checked), RESILIENCE-2 (anti-tampering), RESILIENCE-3 (anti-static analysis) and RESILIENCE-4 (anti-dynamic analysis).

Questions (MAS-R only):

  • Does the app detect rooted or jailbroken devices, emulators and hooking frameworks, and what does it do on detection?
  • Is the app signed with a current scheme, and are code and resources checked for integrity?
  • Are security-relevant code paths obfuscated and debug artefacts removed?

Relevant MASWE v1.0.0: MASWE-0051 to MASWE-0065. Example MASTG tests: Android MASTG-TEST-0224, MASTG-TEST-0226, MASTG-TEST-0368; iOS MASTG-TEST-0220, MASTG-TEST-0261, MASTG-TEST-0391. Note that some debug-related weaknesses (for example MASWE-0063, debug mechanisms not disabled) are tagged R in MASWE but still worth checking in every release build.

5.8 MASVS-PRIVACY

Controls: PRIVACY-1 (minimal access to sensitive data and resources), PRIVACY-2 (user not identifiable without need), PRIVACY-3 (transparent about collection and use) and PRIVACY-4 (user control over their data).

Questions (MAS-P):

  • Are permissions minimal, requested in context with a rationale, and reset or released when unused?
  • Do identifiers used for analytics allow tracking across apps or reinstalls?
  • Do the store data declarations, the privacy policy and the iOS privacy manifest match what the app and its SDKs actually collect and send?
  • Can users see, export and delete their data and withdraw consent from inside the app?

Relevant MASWE v1.0.0: MASWE-0066 to MASWE-0078. Example MASTG tests: Android MASTG-TEST-0255, MASTG-TEST-0206, MASTG-TEST-0318; iOS MASTG-TEST-0360, MASTG-TEST-0281.

Privacy findings may also have legal effects (for example under the EU and UK GDPR or US state privacy laws). This record documents technical observations; it is not legal advice, so route privacy findings to your privacy or legal team.

6. Control results matrix

ControlOwn short summaryProfile in scopeResultFindings
MASVS-STORAGE-1Store sensitive data securelyL1, L2Example: FailMOB-001, MOB-009
MASVS-STORAGE-2Prevent sensitive data leaksL1, L2Example: FailMOB-002
MASVS-CRYPTO-1Strong, current cryptographyL1, L2Example: Pass
MASVS-CRYPTO-2Sound key managementL1, L2Example: FailMOB-009
MASVS-AUTH-1Secure auth protocolsL1, L2Example: Pass
MASVS-AUTH-2Secure local authenticationL2Example: FailMOB-007
MASVS-AUTH-3Step-up for sensitive operationsL1, L2Example: Pass
MASVS-NETWORK-1Secure all network trafficL1, L2Example: FailMOB-003
MASVS-NETWORK-2Identity pinningL2Example: FailMOB-004
MASVS-PLATFORM-1Secure IPCL1, L2Example: FailMOB-005
MASVS-PLATFORM-2Secure WebViewsL1, L2Example: FailMOB-006
MASVS-PLATFORM-3Secure user interfaceL2Example: FailMOB-011
MASVS-CODE-1Up-to-date platformL1, L2Example: Pass
MASVS-CODE-2Update enforcementL2Example: Pass
MASVS-CODE-3No known vulnerable componentsL1, L2Example: FailMOB-008
MASVS-CODE-4Validate untrusted inputL1, L2Example: Pass
MASVS-RESILIENCE-1Platform integrityRExample: N/A (MAS-R not selected)
MASVS-RESILIENCE-2Anti-tamperingRExample: N/A (MAS-R not selected)
MASVS-RESILIENCE-3Anti-static analysisRExample: N/A (MAS-R not selected)
MASVS-RESILIENCE-4Anti-dynamic analysisRExample: N/A (MAS-R not selected)
MASVS-PRIVACY-1Data and resource minimisationPExample: FailMOB-010
MASVS-PRIVACY-2Prevent user identificationPExample: Pass
MASVS-PRIVACY-3TransparencyPExample: Pass
MASVS-PRIVACY-4User controlPExample: Pass

Example totals: 24 controls, 20 in scope, 9 Pass, 11 Fail, 4 not applicable. Pass rate for in-scope controls: 9 of 20 (45%).

The profile column is a planning aid derived from the MASWE profile tags of each control's weaknesses; confirm it against the MAS profile pages for your version.

7. Findings register

IDTitlePlatformMASVSMASWE v1.0.0MASTG testLIScoreSeverityOwnerDue
MOB-001 (Example)Session token stored unencrypted in shared preferencesAndroidSTORAGE-1MASWE-0001MASTG-TEST-02873412High[@android-lead]YYYY-MM-DD
MOB-002 (Example)Member email and points balance written to system logAndroidSTORAGE-2MASWE-0005MASTG-TEST-0203339Medium[@android-lead]YYYY-MM-DD
MOB-003 (Example)Cleartext traffic permitted for analytics domainAndroidNETWORK-1MASWE-0026MASTG-TEST-0235339Medium[@android-lead]YYYY-MM-DD
MOB-004 (Example)No pinning for first-party API hostiOSNETWORK-2MASWE-0028MASTG-TEST-0385236Medium[@ios-lead]YYYY-MM-DD
MOB-005 (Example)Exported activity starts account deletion without caller checkAndroidPLATFORM-1MASWE-0018MASTG-TEST-03643412High[@android-lead]YYYY-MM-DD
MOB-006 (Example)Native bridge in offers WebView returns session token to page scriptiOSPLATFORM-2MASWE-0033MASTG-TEST-03762510High[@ios-lead]YYYY-MM-DD
MOB-007 (Example)Points transfer accepts device passcode fallbackiOSAUTH-2MASWE-0021MASTG-TEST-0268236Medium[@ios-lead]YYYY-MM-DD
MOB-008 (Example)Image library with known vulnerability in SBOMAndroid, iOSCODE-3MASWE-0044MASTG-TEST-0274, MASTG-TEST-0275248Medium[@mobile-platform]YYYY-MM-DD
MOB-009 (Example)Symmetric key for offline cache hardcoded in codeAndroidSTORAGE-1, CRYPTO-2MASWE-0003MASTG-TEST-02123412High[@android-lead]YYYY-MM-DD
MOB-010 (Example)Background location requested where foreground is enoughAndroidPRIVACY-1MASWE-0066MASTG-TEST-0255224Low[@product-owner]YYYY-MM-DD
MOB-011 (Example)Card fragment visible in app switcher snapshotAndroid, iOSPLATFORM-3MASWE-0038MASTG-TEST-0289, MASTG-TEST-0290236Medium[@mobile-platform]YYYY-MM-DD

Detail for each finding (repeat the block):

FieldMOB-006 (Example)
DescriptionThe offers WebView registers a script message handler that returns the current session token to any page loaded in the WebView. Offer pages can include third-party content.
Attacker positionControl over any content loaded in the offers WebView (compromised offer partner or injected script).
ReproductionLoad a test offer page that calls the handler; the token is returned to page script (redacted log reference [EV-14]).
ImpactSession takeover for the member viewing the offer, including points transfer.
RecommendationRemove the token from the bridge; expose only narrow actions, check the message origin, and load third-party content outside the bridged WebView.
ReferencesMASVS-PLATFORM-2; MASWE-0033; MASTG-TEST-0376 (MASTG v2.0.0). The test carries beta MASWE-0069, which the mapping translates to MASWE-0034 (local resources); the weakness actually shown, a bridge exposing the token, is MASWE-0033, so record that ID and note the test's own tag

8. Summary and release decision

SeverityCount (Example)Share
Critical00.0%
High436.4%
Medium654.5%
Low19.1%
Total11100%

Example summary: no Critical findings. Four High findings (MOB-001, MOB-005, MOB-006, MOB-009) allow token theft or unwanted account actions from another app, a WebView page or a copied package, so they block store release of 3.8.0. The six Medium findings are scheduled within 90 days, MOB-010 for the next release.

DecisionConditionsDecided byDate
[Release / Release with conditions / Do not release]Example: Release 3.8.1 after the four High findings are fixed and retested[@mobile-owner]YYYY-MM-DD

Findings accepted without a fix need a time-limited security exception through the security exception request process.

9. Remediation plan and retest

IDFixAutomated check addedFixed in buildRetest dateRetest resultStatus
MOB-001 (Example)Token in encrypted storage with keystore-backed keyStatic rule for plain preference writes of tokens3.8.1 (381)YYYY-MM-DDPassClosed
MOB-005 (Example)Activity not exported; deletion requires in-app confirmation and step-upManifest lint rule3.8.1 (381)YYYY-MM-DDPassClosed
MOB-006 (Example)Bridge removed from offers WebView; origin check on remaining handlerUnit test on handler3.8.1 (2026.10.2)YYYY-MM-DDPassClosed
MOB-009 (Example)Key generated in Android Keystore at first runSecret scanning in CI3.8.1 (381)YYYY-MM-DD[Pending]Open

Preventive actions:

  • Example: Add MASTG static tests that have SAST rules to the mobile CI pipeline.
  • Example: Add the MASVS control list to the mobile design review checklist.
  • Example: Review every new SDK against PRIVACY-1 to PRIVACY-3 before adding it.

10. Sign-off and next assessment

ItemValue
All High findings closed or excepted[Yes / No]
Residual risk accepted by[@mobile-owner], YYYY-MM-DD
Next full assessmentYYYY-MM-DD (at least yearly, or each major release)
Earlier assessment triggersNew authentication method, new WebView content source, new SDK with data access, new platform major version, MASVS or MASWE release, security incident
MAS versions to recheckMASVS (GitHub releases), MASTG, MASWE

11. Glossary and references

TermMeaning
MASVSMobile Application Security Verification Standard: the controls an app should meet
MASWEMobile Application Security Weakness Enumeration: weaknesses that link MASVS controls to MASTG tests
MASTGMobile Application Security Testing Guide: techniques, tools and atomic tests
MAS profileTesting profile (L1, L2, R, P) that decides which weaknesses apply
IPCInter-process communication: intents, content providers, URL schemes, app links and extensions
Identity pinningAccepting only specific certificates or public keys for a host, beyond normal trust validation
Event-bound biometricsBiometric check that unlocks a keystore key, so the result cannot simply be faked in app code
ReferenceVersion (as checked October 2026)Official page
OWASP MASVSv2.1.0 (18 January 2024, latest release)https://github.com/OWASP/masvs/releases
OWASP MASTGv2.0.0 (30 June 2026)https://github.com/OWASP/mastg/releases
OWASP MASWEv1.0.0 (17 August 2026)https://github.com/OWASP/maswe/releases
MASWE v1.0.0 announcement17 August 2026https://mas.owasp.org/news/2026/08/17/maswe-v100-release/
OWASP MAS project siteLivinghttps://mas.owasp.org/

Standard and licence note

Based on the OWASP Mobile Application Security (MAS) project: MASVS v2.1.0, MASWE v1.0.0 and MASTG v2.0.0, published by the OWASP Foundation under CC BY-SA 4.0. Control IDs, weakness IDs, test IDs and profile names are cited for mapping only; the control summaries, questions, structure and examples are original and no OWASP control, weakness or test text is reproduced, so no ShareAlike obligation arises from this template. If you paste OWASP text into your copy, that adapted material is under CC BY-SA 4.0, must credit OWASP and must be shared alike. Check the current MAS releases before relying on the mapping, because MASWE IDs were renumbered in v1.0.0 and MASTG test references may lag behind. Template licence: MIT.

관련 템플릿