Skip to content

Non-functional

Security testing for financial applications

Security testing for financial applications attacks web apps, APIs, and mobile apps through payment and transfer logic abuse, access to other customers' accounts, race conditions on money movement, card data exposure, and leaked partner API keys. Buyers receive a penetration test report, findings with retest results, PCI DSS requirement 11 test evidence, and an access control and authorisation test matrix.

What fintech penetration testing covers

A refund call on another merchant's payment, a withdrawal sent twice in the same millisecond, or a processor secret key inside a mobile build moves money directly. We run web, API, and mobile penetration tests for payment acquirers, banking-as-a-service platforms, neobanks, crypto exchanges, business banking, spend management, open banking, KYC and AML providers, and trading platforms. PCI DSS v4.0.1 requirement 11.4.1 requires a methodology that includes application-layer testing to identify, at a minimum, the vulnerabilities listed in requirement 6.2.4. Our test cases follow the OWASP API Security Top 10 2023 (checked 2026-09-16) and the financial failure patterns below.

Payment and transfer business logic

Business logic flaws move money with valid requests and no injection payload. Tests per flow:

  • a refund or reversal above the captured amount, in a different currency, or on a payment already refunded;
  • negative, zero, and over-precise amounts, such as three decimals on a currency with two minor units, and rounding that credits a fraction on each call;
  • a skipped state: capture without authorisation, payout before KYC approval, or transfer from a frozen account, by calling the later endpoint directly;
  • a daily transfer limit, card spend control, or withdrawal cap that only the client app enforces;
  • an FX quote reused after expiry, or a quote for one amount applied to a larger amount.

OWASP API6:2023, Unrestricted Access to Sensitive Business Flows, covers flows exposed without compensating for how the functionality could harm the business if used excessively in an automated manner. We script that use: referral bonuses and promotional credits claimed from batches of new accounts, and FX quotes requested in bulk so that only the most favourable rate gets executed. Each finding records the ledger effect: which account gained funds and which account or balance sheet lost them.

Authorisation between accounts

Broken Object Level Authorization (API1:2023, CWE-639 Authorization Bypass Through User-Controlled Key) is the defect where customer A reads or acts on customer B's balance, statement, beneficiary, card, or KYC document by changing an ID. We create at least two customers, two tenants, and every documented role, then call each operation with another party's object IDs. Random UUIDs do not fix a missing ownership check, so we collect IDs from responses, webhooks, and exports.

Property and function checks follow. A customer sets limit, fee_rate, or status through a field the API should ignore (API3:2023). A customer token calls a support endpoint for manual balance adjustment or limit override (API5:2023). In multi-user business accounts, a viewer approves a payment, or an approver approves a payment they created. Every result goes into the access control and authorisation test matrix.

Race conditions on money movement

CWE-362, Concurrent Execution using Shared Resource with Improper Synchronization, turns one balance into two withdrawals. We send parallel requests that each spend the full balance, redeem one voucher, or move funds during a concurrent limit change, then count ledger entries and the final balance instead of trusting HTTP responses. Idempotency abuse tests reuse a key from another account and check that the key is bound to the caller. Functional retry behaviour sits in API and webhook testing, and the payment idempotency guide shows the request sequences.

Card and account data exposure

We search API responses, error messages, logs, analytics events, crash reports, and mobile storage for full PANs, card verification codes, and account numbers. Handling of cardholder data and account data in our own test environment follows our security page. A full PAN in a log platform or crash reporting service brings that system into PCI DSS scope; a full PAN in app storage on a customer device is reported as a finding against requirement 3.5.1. Findings cite PCI DSS v4.0.1 requirements 3.3.1, 3.4.1, and 3.5.1, which the PCI DSS page explains. A payment token that charges a card outside the merchant or wallet it was issued for is also a finding.

Step-up authentication on money movement

Adding a beneficiary, raising a transfer limit, and revealing full card details are the actions an account takeover needs. We replay a step-up token from one payment on a second payment, change the amount or beneficiary after the challenge completes, and call the payment endpoint with a session created before a password reset or device removal. Each accepted request is a finding with the amount it could move.

Partner API keys and secrets

Secret keys for processors, partner banks, and KYC vendors leak through mobile bundles, JavaScript, repositories, and CI logs. Tests confirm that a publishable key cannot run a secret-key operation, that a key scoped to one merchant cannot reach another, that production rejects sandbox keys, and that a rotated key stops working. For mobile app penetration testing we test against OWASP MASVS v2.1.0 (18 January 2024), including certificate pinning with the proxy CA trusted on the device, where the app must still refuse the connection.

Deliverables

  • Web, API, and mobile penetration test report

    A report that records the agreed scope, test dates, methodology, attack paths tried against each web, API, and mobile target, and every finding, for a security lead, a PCI DSS assessor, or a partner bank's vendor review.

  • Findings with severity, reproduction steps, and retest results

    One record per finding with a severity rating, the affected endpoint or screen, the requests or steps that reproduce the finding, the effect on accounts or funds, and the dated retest result after the fix.

  • PCI DSS requirement 11 test evidence

    Penetration test methodology, scope, dates, results, and retest records mapped to PCI DSS v4.0.1 requirements 11.4.1 to 11.4.4, as input to the PCI DSS assessment of a Qualified Security Assessor.

  • Access control and authorisation test matrix

    A matrix of roles, tenants, and API operations that records the expected and the observed result of each call made with another user's, tenant's, or role's credentials, for engineering leads and auditors.

How penetration tests fit your release process

Scope and environment. Tests run against a staging build with production configuration, synthetic customers, test card numbers, and tenants we create. Production tests run only with written authorisation, named test accounts, and an agreed time window. Effort depends on the number of roles and tenant types, state-changing API operations, mobile platforms, and retest rounds; that list is the basis of the quote.

Triggers. PCI DSS v4.0.1 requirements 11.4.2 and 11.4.3 require penetration tests at least once every 12 months and after any significant infrastructure or application upgrade or change. We scope a change test when a release adds a payment flow, a processor or partner bank integration, a new role, or a new public API version.

During the test. Critical findings, such as funds moved between accounts, go to your security lead as soon as they are confirmed, with the reproduction requests. Other findings arrive in the report.

Fix and retest. Under requirement 11.4.4, exploitable vulnerabilities and security weaknesses found during penetration testing are corrected according to the entity's assessment of risk defined in requirement 6.3.1, and penetration testing is repeated to verify the corrections. We retest each fix against the original finding ID and record the retest date in the findings record.

Into CI. Each authorisation and race condition finding becomes an automated API test in your repository. The access control and authorisation test matrix runs on each pull request that changes an endpoint, so a removed ownership check fails the build instead of reaching the next annual test.

Handover. You receive the report, findings in your issue tracker format, and the PCI DSS requirement 11 test evidence for the assessor. The PCI DSS assessment preparation scenario shows where the evidence enters the assessment timeline. Your team owns the fixes, severity acceptance, and any decision to accept a residual risk.

Sample deliverable

Sample, synthetic data

test evidence packTest evidence pack: card payments and account access release
Test evidence pack: card payments and account access release
Control or requirementTest case IDsRun dateResultEvidence fileReviewer role
PCI DSS v4.0.1 3.3.1: the card verification code is not stored after authorisationTC-PCI-031, TC-PCI-032, TC-PCI-033, TC-PCI-0342026-09-08Passed: 4 of 4 test cases, no card verification code found in databases, logs, or queuesEP-01_pci-3.3.1_data-store-search.csvSecurity test lead
PCI DSS v4.0.1 3.4.1: a displayed PAN shows at most the BIN and the last four digitsTC-PCI-040, TC-PCI-041, TC-PCI-0422026-09-10Passed on retest: 3 of 3 test cases after the fix for defect DEF-118 (full PAN on the support detail view)EP-02_pci-3.4.1_masking-per-role_retest.pdfQA lead
PCI DSS v4.0.1 6.2.4: the refund API rejects a refund on a payment that another account ownsTC-SEC-210, TC-SEC-2112026-09-09Passed: 2 of 2 test cases, each cross-account refund request returned HTTP 404EP-03_pci-6.2.4_refund-object-authorisation.pdfSecurity test lead
SOC 2 CC6.2: sessions and API tokens of a deactivated user are rejectedTC-ACC-015, TC-ACC-016, TC-ACC-0172026-09-09Passed: 3 of 3 test cases, each request after deactivation returned HTTP 401EP-04_soc2-cc6.2_deprovisioning-log.csvQA lead
SOC 2 CC8.1: every change in the release ran the regression suite before productionRUN-REG-0907, RUN-REG-09102026-09-10Passed: 27 of 27 change tickets link to a green CI runEP-05_soc2-cc8.1_ci-runs-per-change.csvTest automation lead
PSD2 RTS Article 4(3)(b): access is blocked after five consecutive failed authentication attemptsTC-SCA-007, TC-SCA-008, TC-SCA-009, TC-SCA-0102026-09-10Failed: 3 of 4 test cases passed; the app resets the attempt counter on a new session (defect DEF-131, release blocker)EP-06_rts-art4-3b_lockout-per-channel.pdfQA lead
PSD2 RTS Article 5(1): the payment executes only with the amount and payee shown at authenticationTC-SCA-020, TC-SCA-021, TC-SCA-0222026-09-08Passed: 3 of 3 test cases, a changed payee after authentication invalidated the authentication codeEP-07_rts-art5-1_dynamic-linking.csvPayments QA engineer
PSD2 RTS Article 10a: account information access through a third-party provider requires SCA again after 180 daysTC-AIS-004, TC-AIS-005, TC-AIS-0062026-09-09Passed: 3 of 3 test cases, access allowed on day 179 and refused on day 181 without a new SCAEP-08_rts-art10a_access-decisions.csvPayments QA engineer

Test case IDs, defect IDs, run dates, and evidence file names belong to a fictional release; PAN checks used scheme test card numbers, and no real account, customer, or person appears.

Questions

How often should fintech companies conduct penetration testing?

PCI DSS v4.0.1 requirements 11.4.2 and 11.4.3 require internal and external penetration testing at least once every 12 months and after any significant infrastructure or application upgrade or change. PCI DSS v4.0.1 requirement 11.4.6 requires service providers that use segmentation to penetration test the segmentation controls at least once every six months and after any change to segmentation controls or methods.

Which compliance frameworks require fintech penetration testing?

PCI DSS v4.0.1 requirement 11.4 requires penetration testing. The Digital Operational Resilience Act (DORA), which applies to EU financial entities, requires threat-led penetration testing under Article 26 from entities the competent authority identifies. The Swift Customer Security Controls Framework (CSCF) v2026 sets penetration testing as advisory control 7.3A. The 2022 SOC 2 points of focus for criterion CC4.1 list penetration testing as an example of a separate evaluation.

What is cybersecurity in fintech?

Cybersecurity in fintech is the protection of systems that hold customer accounts, card data, and money movement against attacks that steal data or move funds. Fintech cybersecurity covers infrastructure controls and application risks such as access to another customer's account, abuse of payment and refund logic, race conditions on balance updates, and exposed partner API keys.

Scope your security testing

Send your API specification, the list of user roles, and the flows that move money, and we return a penetration test scope per application and role.

Scope your testing