Skip to content

MAS-EUDIW - EU Digital Identity Wallet

How to proceed when no MASTG TEST exists

The MASTG does not yet provide dedicated tests for every MASWE. Defining a weakness and defining a reliable, reproducible way to test for it are different tasks, and some areas require extensive research, validation, or refinement before they can be captured as formal MASTG TESTs. The guide also evolves continuously as platforms, frameworks, and testing techniques change.

Even when no dedicated MASTG TEST exists, you can still assess the weakness.

  1. Start with the MASWE: Review its "Modes of Introduction" to understand the concrete conditions that may introduce the weakness and what should be tested.

  2. Check related MASTG content: Look at similar or related existing MASTG TESTs, as they can provide useful testing patterns, structure, and inspiration for designing a new test. Also consult relevant MASTG KNOW, TECH, and TOOL entries, together with the official mobile platform documentation, to understand the topic and identify suitable testing techniques.

  3. Contribute back: If you develop a reliable testing procedure, consider contributing a new MASTG TEST and a MASTG DEMO so others can reuse it.

The Netherlands joined forces with the OWASP MAS core team and worked to translate the applicable regulatory requirements into an OWASP MAS profile.

OWASP MAS EUDI Wallet Profile - Requirements Catalogue and Practical Guidelines

This work resulted in the OWASP MAS EUDI Wallet Profile Requirements Catalogue, which provides a list of requirements with which the EUDI Wallet Instance should comply, as well as a companion guide called the OWASP MAS EUDI Wallet Profile Practical Guidelines. The latter provides practical guidelines on applying these requirements and the OWASP MAS framework to sensitive and EUDI wallets.

The OWASP MAS EUDI Wallet Profile is currently being integrated into the Dutch national EUDI wallet certification scheme and the Dutch EUDIW Protection Profile.

This work was funded by the Dutch EUDI-program and built in collaboration between OWASP, MinBZK (NL), CCB (BE) and TRAFICOM (FI).

Learn more about the EU Digital Identity Wallet:

  • eudi.dev: the developer portal for the EU Digital Identity Wallet reference implementation.
  • EU Digital Identity Wallet Home: the European Commission's Digital Building Blocks wiki for the EU Digital Identity Wallet.

About the Profile

MAS-EUDIW draws on the large majority of the controls from all four existing MAS profiles and covers the assets unique to a digital identity system, such as Wallet Instance Attestations (WIA) and Person Identification Data (PID).

The profile's requirements are mapped to the Risk Register for European Digital Identity Wallets, linking each technical control to the high-level risks, system-related risks, technical threats, and wallet-specific threat scenarios it is designed to mitigate, as well as to the corresponding OWASP MASWE weakness. This provides a bridge between high-level regulatory requirements (such as eIDAS) and low-level technical tests.

The profile is built around two supporting concepts, Assets and Configurations, which are applied generically across requirements. It is the responsibility of the profile's user (the developer, issuer, or auditor) to map the relevant assets (e.g. usage logs, PIN salt, WIA, critical private keys) to the appropriate requirements, and to set the applicable configuration values (e.g. approved cryptographic algorithms, minimum OS version) based on their risk tolerance and current technology standards.

MAS-EUDIW is recommended for:

  • EUDI Wallet Instances that need to demonstrate resistance against attackers with "high attack potential", as set out in Implementing Regulation (EU) 2015/1502.
  • Other High Assurance (HA) apps that can benefit from applying a subset of, or extending, the same requirement set.

Documents

Requirements

Requirement MASWE ID Platform MASVS ID Tests Status
The app encrypts sensitive data stored in private storage. MASWE-0001: Sensitive Data Stored Unencrypted in Private Storage platform:android platform:ios MASVS-STORAGE-1masvs-storage-1 11 currentstatus:current
The app encrypts sensitive data stored outside of private storage. MASWE-0002: Sensitive Data Stored Unencrypted Outside of Private Storage platform:android platform:ios MASVS-STORAGE-1masvs-storage-1 4 currentstatus:current
The app stores cryptographic keys inside the platform-provided secure keystore. MASWE-0003: Cryptographic Keys Stored Outside of Platform Keystore platform:android platform:ios MASVS-STORAGE-1masvs-storage-1 3 currentstatus:current
The app does not hardcode sensitive data in the application package. MASWE-0004: Sensitive Data Hardcoded in the App Package platform:android platform:ios MASVS-STORAGE-1masvs-storage-1 0 currentstatus:current
The app excludes sensitive data from application logs. MASWE-0005: Insertion of Sensitive Data into Logs platform:android platform:ios MASVS-STORAGE-2masvs-storage-2 4 currentstatus:current
The app excludes sensitive data from backups. MASWE-0006: Sensitive Data Not Excluded From Backup platform:android platform:ios MASVS-STORAGE-2masvs-storage-2 4 currentstatus:current
The app properly encrypts sensitive data. MASWE-0007: Improper Encryption platform:android platform:ios MASVS-CRYPTO-1masvs-crypto-1 10 currentstatus:current
The app properly hashes sensitive data. MASWE-0008: Improper Hashing platform:android platform:ios MASVS-CRYPTO-1masvs-crypto-1 1 currentstatus:current
The app properly uses Message Authentication Codes (MACs). MASWE-0009: Improper Use of Message Authentication Code (MAC) platform:android platform:ios MASVS-CRYPTO-1masvs-crypto-1 0 currentstatus:current
The app properly generates cryptographic signatures. MASWE-0010: Improper Generation of Cryptographic Signatures platform:android platform:ios MASVS-CRYPTO-1masvs-crypto-1 0 currentstatus:current
The app properly verifies cryptographic signatures. MASWE-0011: Improper Verification of Cryptographic Signature platform:android platform:ios MASVS-CRYPTO-1masvs-crypto-1 0 currentstatus:current
The app properly generates random numbers. MASWE-0012: Improper Random Number Generation platform:android platform:ios MASVS-CRYPTO-1masvs-crypto-1 4 currentstatus:current
The app securely generates cryptographic keys. MASWE-0013: Improper Cryptographic Key Generation platform:android platform:ios MASVS-CRYPTO-2masvs-crypto-2 2 currentstatus:current
The app derives cryptographic keys using approved key derivation functions. MASWE-0014: Improper Cryptographic Key Derivation platform:android platform:ios MASVS-CRYPTO-2masvs-crypto-2 0 currentstatus:current
The app rotates cryptographic keys regularly. MASWE-0015: Cryptographic Key Rotation Not Implemented platform:android platform:ios MASVS-CRYPTO-2masvs-crypto-2 0 currentstatus:current
The app restricts access to cryptographic keys. MASWE-0016: Cryptographic Key Access Not Restricted platform:android platform:ios MASVS-CRYPTO-2masvs-crypto-2 0 currentstatus:current
The app verifies that the device has a secure lock configured. MASWE-0017: Device Secure Lock Not Enforced platform:android platform:ios MASVS-CRYPTO-2masvs-crypto-2 4 currentstatus:current
The app enforces authentication and authorization on its components. MASWE-0018: Lack of Authentication or Authorization on App Components platform:android platform:ios MASVS-AUTH-1masvs-auth-1 6 currentstatus:current
The app enables auto-fill support for credential providers. MASWE-0019: Lack of Auto-fill Support for Credential Providers platform:android platform:ios MASVS-AUTH-1masvs-auth-1 0 currentstatus:current
The app implements local authentication securely. MASWE-0020: Local Authentication Can Be Bypassed platform:android platform:ios MASVS-AUTH-2masvs-auth-2 5 currentstatus:current
The app does not allow fallback to non-biometric credentials for sensitive transactions. MASWE-0021: Fallback to Non-biometric Credentials Allowed for Sensitive Transactions platform:android platform:ios MASVS-AUTH-2masvs-auth-2 3 currentstatus:current
The app invalidates keys after any enrollment of new biometric data. MASWE-0022: Crypto Keys Not Invalidated on New Biometric Enrollment platform:android platform:ios MASVS-AUTH-2masvs-auth-2 3 currentstatus:current
The app enforces step-up authentication before granting access to sensitive functionality. MASWE-0023: Step-Up Authentication Not Implemented for Sensitive Actions platform:android platform:ios MASVS-AUTH-3masvs-auth-3 0 currentstatus:current
The app makes sensitive data inaccessible after session termination. MASWE-0024: Sensitive Data Accessible After Session Termination platform:android platform:ios MASVS-AUTH-3masvs-auth-3 0 currentstatus:current
The app ensures non-repudiation for critical actions. MASWE-0025: Lack of Non-Repudiation for Critical Actions platform:android platform:ios MASVS-AUTH-3masvs-auth-3 0 currentstatus:current
The app encrypts all network traffic. MASWE-0026: Network Traffic Not Encrypted platform:android platform:ios MASVS-NETWORK-1masvs-network-1 16 currentstatus:current
The app validates certificates for all network traffic. MASWE-0027: Insecure Certificate Validation platform:android platform:ios MASVS-NETWORK-1masvs-network-1 9 currentstatus:current
The app correctly implements identity pinning. MASWE-0028: Insecure Identity Pinning platform:android platform:ios MASVS-NETWORK-2masvs-network-2 4 currentstatus:current
The app securely handles deep links. MASWE-0029: Insecure Deep Links platform:android platform:ios MASVS-PLATFORM-1masvs-platform-1 5 currentstatus:current
The app uses the clipboard securely and only with user consent. MASWE-0030: Improper Use of the Clipboard platform:android platform:ios MASVS-PLATFORM-1masvs-platform-1 0 currentstatus:current
The app only permits trusted app extensions to interact with it. MASWE-0031: Allowing Untrusted App Extensions platform:ios MASVS-PLATFORM-1masvs-platform-1 1 currentstatus:current
The app securely handles intents. MASWE-0032: Insecure Intents platform:android MASVS-PLATFORM-1masvs-platform-1 3 currentstatus:current
The app does not expose sensitive native functionality to WebView content. MASWE-0033: Sensitive Native Functionality Exposed in WebViews platform:android platform:ios MASVS-PLATFORM-2masvs-platform-2 0 currentstatus:current
The app only allows trusted WebView content to access local resources. MASWE-0034: WebViews Allow Access to Local Resources with Untrusted Content platform:android platform:ios MASVS-PLATFORM-2masvs-platform-2 13 currentstatus:current
The app only allows trusted content in WebViews. MASWE-0035: WebViews Loading Untrusted Content platform:android platform:ios MASVS-PLATFORM-2masvs-platform-2 5 currentstatus:current
The app does not unnecessarily expose sensitive data through its user interface. MASWE-0036: Unnecessary Exposure of Sensitive Data via the User Interface platform:android platform:ios MASVS-PLATFORM-3masvs-platform-3 12 currentstatus:current
The app does not unnecessarily expose sensitive data through system notifications. MASWE-0037: Unnecessary Exposure of Sensitive Data via Notifications platform:android platform:ios MASVS-PLATFORM-3masvs-platform-3 1 currentstatus:current
The app removes or masks sensitive data from its views when moved to the background, when being recorded or when a screenshot is taken. MASWE-0038: Insufficient Protection of Sensitive Data from Screenshots or Screen Recordings platform:android platform:ios MASVS-PLATFORM-3masvs-platform-3 6 currentstatus:current
The app protects its sensitive screens against overlay attacks. MASWE-0039: App Vulnerable to Overlay Attacks platform:android platform:ios MASVS-PLATFORM-3masvs-platform-3 0 currentstatus:current
The app prevents sensitive data from being exposed to, or captured by, accessibility services. MASWE-0040: Sensitive Data Leaked via Accessibility Services platform:android platform:ios MASVS-PLATFORM-3masvs-platform-3 1 currentstatus:current
The app detects if it is running on an unsupported OS version and reacts appropriately. MASWE-0041: Running on a Recent Platform Version Not Ensured platform:android platform:ios MASVS-CODE-1masvs-code-1 1 currentstatus:current
The app targets the latest platform version. MASWE-0042: Latest Platform Version Not Targeted platform:android platform:ios MASVS-CODE-1masvs-code-1 0 currentstatus:current
The app detects if it must be updated and reacts appropriately. MASWE-0043: Enforced Updating Not Implemented platform:android platform:ios MASVS-CODE-2masvs-code-2 4 currentstatus:current
The app's third-party components are regularly checked for known vulnerabilities. MASWE-0044: Dependencies with Known Vulnerabilities platform:android platform:ios MASVS-CODE-3masvs-code-3 4 currentstatus:current
The app uses the compiler-provided security features of the platform. MASWE-0045: Compiler-Provided Security Features Not Used platform:android platform:ios MASVS-CODE-3masvs-code-3 5 currentstatus:current
The app does not use deprecated APIs or functionality. MASWE-0046: Use of Deprecated APIs or Functionality platform:android platform:ios MASVS-CODE-3masvs-code-3 0 currentstatus:current
The app uses standard APIs for security-critical functionality. MASWE-0047: Using Non-Standard APIs for Security-Critical Functionality platform:android platform:ios MASVS-CODE-3masvs-code-3 0 currentstatus:current
The app package does not contain malicious code. MASWE-0048: Malicious Code Included in the App platform:android platform:ios MASVS-CODE-3masvs-code-3 0 currentstatus:current
The app loads dynamic code safely from trusted sources. MASWE-0049: Unsafe Dynamic Code Loading platform:android platform:ios MASVS-CODE-4masvs-code-4 0 currentstatus:current
The app securely handles untrusted data. MASWE-0050: Unsafe Handling of Untrusted Data platform:android platform:ios MASVS-CODE-4masvs-code-4 4 currentstatus:current
The app detects if it runs on a rooted/jailbroken device and reacts appropriately. MASWE-0051: Root/Jailbreak Detection Not Implemented platform:android platform:ios MASVS-RESILIENCE-1masvs-resilience-1 4 currentstatus:current
The app detects when it is running inside an app-virtualization environment. MASWE-0052: App Virtualization Environment Detection Not Implemented platform:android platform:ios MASVS-RESILIENCE-1masvs-resilience-1 0 currentstatus:current
The app detects when it is running in an emulated or virtual device environment. MASWE-0053: Emulated or Virtual Device Detection Not Implemented platform:android platform:ios MASVS-RESILIENCE-1masvs-resilience-1 2 currentstatus:current
The app implements device attestation. MASWE-0054: Device Attestation Not Implemented platform:android platform:ios MASVS-RESILIENCE-1masvs-resilience-1 0 currentstatus:current
The app detects attacks by malware. MASWE-0055: Malware Detection Not Implemented platform:android platform:ios MASVS-RESILIENCE-2masvs-resilience-2 0 currentstatus:current
The app implements app attestation. MASWE-0056: App Attestation Not Implemented platform:android platform:ios MASVS-RESILIENCE-2masvs-resilience-2 3 currentstatus:current
The app verifies the integrity of its resources. MASWE-0057: App Resources Integrity Not Verified platform:android platform:ios MASVS-RESILIENCE-2masvs-resilience-2 2 currentstatus:current
The app detects unauthorized changes to its code and execution flow at runtime. MASWE-0058: Runtime Code Integrity Not Verified platform:android platform:ios MASVS-RESILIENCE-2masvs-resilience-2 2 currentstatus:current
The app implements code obfuscation. MASWE-0059: Code Obfuscation Not Implemented platform:android platform:ios MASVS-RESILIENCE-3masvs-resilience-3 3 currentstatus:current
The app applies resource obfuscation to hinder reverse engineering. MASWE-0060: Resource Obfuscation Not Implemented platform:android platform:ios MASVS-RESILIENCE-3masvs-resilience-3 0 currentstatus:current
The app does not contain debug artifacts. MASWE-0061: Debug Artifacts Not Removed platform:android platform:ios MASVS-RESILIENCE-3masvs-resilience-3 7 currentstatus:current
The app applies application-level payload encryption in addition to transport-layer encryption. MASWE-0062: No Application-Level Payload Encryption platform:android platform:ios MASVS-RESILIENCE-3masvs-resilience-3 0 currentstatus:current
The app disables debug mechanisms. MASWE-0063: Debug Mechanisms Not Disabled platform:android platform:ios MASVS-RESILIENCE-4masvs-resilience-4 3 currentstatus:current
The app detects debugger attachment at runtime and responds to protect sensitive operations. MASWE-0064: Debugger Detection Not Implemented platform:android platform:ios MASVS-RESILIENCE-4masvs-resilience-4 4 currentstatus:current
The app detects dynamic analysis tools and responds to protect sensitive operations. MASWE-0065: Dynamic Analysis Tools Detection Not Implemented platform:android platform:ios MASVS-RESILIENCE-4masvs-resilience-4 0 currentstatus:current
The app adequately manages permissions. MASWE-0066: Inadequate Permission Management platform:android platform:ios MASVS-PRIVACY-1masvs-privacy-1 9 currentstatus:current
The app uses anonymization or pseudonymisation measures. MASWE-0067: Lack of Anonymization or Pseudonymisation Measures platform:android platform:ios MASVS-PRIVACY-2masvs-privacy-2 0 currentstatus:current
The app does not use persistent or unique identifiers in a way that enables user tracking. MASWE-0068: Incorrect Use of Identifiers for User Tracking platform:android platform:ios MASVS-PRIVACY-2masvs-privacy-2 0 currentstatus:current
The app uses privacy-preserving functionality. MASWE-0069: Usage of Non-Privacy-Preserving Functionality platform:android platform:ios MASVS-PRIVACY-2masvs-privacy-2 0 currentstatus:current
The app informs the user about the privacy implications before performing an action. MASWE-0070: Inadequate Awareness for Privacy Relevant Actions platform:android platform:ios MASVS-PRIVACY-2masvs-privacy-2 0 currentstatus:current
The app uses adequate defaults for privacy relevant actions. MASWE-0071: Inadequate Defaults for Privacy Relevant Actions platform:android platform:ios MASVS-PRIVACY-2masvs-privacy-2 0 currentstatus:current
The app provides an adequate privacy policy. MASWE-0072: Inadequate Privacy Policy platform:android platform:ios MASVS-PRIVACY-3masvs-privacy-3 0 currentstatus:current
The app adequately declares all user collected data. MASWE-0073: Inadequate Data Collection Declarations platform:android platform:ios MASVS-PRIVACY-3masvs-privacy-3 3 currentstatus:current
The app adequately declares all tracking domains it connects to. MASWE-0074: Inadequate Tracking Domains Declarations platform:android platform:ios MASVS-PRIVACY-3masvs-privacy-3 1 currentstatus:current
The app provides adequate controls to manage user data. MASWE-0076: Lack of Proper Data Management Controls platform:android platform:ios MASVS-PRIVACY-4masvs-privacy-4 0 currentstatus:current
The app provides adequate controls over the visibility of user data. MASWE-0077: Inadequate Data Visibility Controls platform:android platform:ios MASVS-PRIVACY-4masvs-privacy-4 0 currentstatus:current
The app requests user consent prior to any data processing. MASWE-0078: Inadequate or Ambiguous User Consent Mechanisms platform:android platform:ios MASVS-PRIVACY-4masvs-privacy-4 0 currentstatus:current