How CyberZeals Secured an End-to-End Digital Banking Ecosystem

Digital Banking Security
Employees

100+

Industry

Banking

Location

United States

PRIMARY SCOPE

Android Mobile Banking • Internet Banking • Payment Gateway

ASSESSMENT LENS

Shared APIs • Authentication • Device Trust • Transaction Integrity

CORE TECHNIQUES

Reverse Engineering • Runtime Instrumentation • Business Logic Testing

KEY TOOLING

Frida • Burp Suite • HTTP Toolkit • MobSF • Turbo Intruder

Security that survives a hostile client.

The engagement focused on whether backend controls remained authoritative after the official client workflow was deliberately manipulated.

Executive Summary

THREE INTERCONNECTED PLATFORMS. ONE DISTRIBUTED IDENTITY AND TRANSACTION TRUST MODEL.

A commercial bank engaged CyberZeals to conduct an in-depth security assessment of its digital banking ecosystem before a major production expansion.

The engagement went significantly beyond a traditional vulnerability assessment.

Three interconnected platforms were placed in scope: the bank’s Android mobile banking application, internet banking web application, and online payment gateway, including the APIs, authentication mechanisms, session flows, device-binding logic, transaction-processing workflows, payment callbacks, and backend authorization controls supporting them.

The objective was simple:

Determine whether a capable attacker could compromise a customer account, manipulate a transaction, access another customer’s financial information, bypass device and authentication controls, or interfere with the payment lifecycle—even when conventional perimeter security controls were functioning correctly.

CyberZeals approached the environment from the perspective of an attacker rather than treating each application as an isolated system.

The testing team reverse-engineered the Android application, instrumented it at runtime, bypassed client-side protections within the authorized test environment, intercepted encrypted application traffic, manipulated API requests and responses, analyzed authorization boundaries, tested transaction state machines, examined browser and mobile sessions, and deliberately attacked the assumptions connecting the mobile application, internet banking portal, payment gateway, and backend services.

The assessment identified multiple weaknesses that individually appeared manageable but became significantly more dangerous when chained together.

The most serious attack paths involved weak server-side device validation, insufficient binding between OTP verification and subsequent authentication state, over-privileged authentication tokens, broken object-level authorization, client-trusted transaction attributes, payment-state manipulation, race-condition exposure, insufficient replay protection, and sensitive information being returned before the server had fully established the security state of the requesting device.

The result was not simply a penetration-test report.

CyberZeals worked directly with the bank’s application, API, infrastructure, DevOps, fraud, SOC, and product teams to redesign critical trust boundaries and move security enforcement from client applications into authoritative backend controls.

The Challenge

Modern banking applications are no longer three independent systems called “mobile banking,” “internet banking,” and “payment gateway.”

They are one distributed identity and transaction platform.

The mobile application establishes device identity and customer authentication. The web application exposes account-management and transactional functionality. The payment gateway communicates with merchants, processors, acquiring systems, card networks, internal banking services, and asynchronous notification mechanisms.

A weakness in one trust boundary can therefore propagate into another.

The bank already had several security controls in place.

Its Android application used TLS, certificate pinning, root detection, application obfuscation, device identification, OTP verification, biometric controls, anti-tampering mechanisms, and runtime security checks.

The internet banking platform implemented MFA, server-side sessions, authorization middleware, HTTP security headers, WAF protection, and transaction confirmation mechanisms.

The payment gateway included transaction references, merchant authentication, callback processing, payment status APIs, transaction limits, fraud controls, and backend reconciliation.

On paper, the architecture appeared defensible.

CyberZeals’ job was to determine what happened when those controls were deliberately manipulated.

Engagement Scope

Attack Surface

Assessment Coverage

Android Mobile BankingAPK reverse engineering, runtime instrumentation, local storage, cryptography, device binding, authentication, biometric controls, OTP, root detection, anti-tamper, certificate pinning, deep links, exported components, API communication and transaction flows
Internet BankingAuthentication, MFA, session management, password reset, beneficiary management, fund transfer, account statements, authorization, CSRF, XSS, access control, business logic, request manipulation and API security
Payment GatewayPayment initiation, order creation, transaction authorization, merchant integration, payment options, amount integrity, callback/webhook security, transaction state handling, idempotency, replay protection, race conditions and reconciliation
Shared Backend APIsBOLA/IDOR, authentication, authorization, token scope, object/property authorization, rate limiting, sensitive data exposure, mass assignment and workflow abuse
Supporting ControlsWAF behavior, logging, fraud monitoring, error handling, security headers, TLS implementation, secrets handling and environment separation

The methodology incorporated mobile verification principles from OWASP MASVS/MASTG, web application controls from OWASP ASVS, API attack classes from the OWASP API Security Top 10, and payment-related security considerations relevant to PCI DSS environments.

Tooling and Technical Approach

CyberZeals deliberately combined automated reconnaissance with extensive manual testing.

Automated scanners were used to increase coverage. They were never treated as evidence that an application was secure.

Tool Use During Engagement

ToolUse During Engagement
Burp Suite ProfessionalPrimary interception platform for web/API testing, request manipulation, session analysis, authorization testing, repeater workflows, intruder attacks and extension assisted testing
FridaRuntime instrumentation of the Android application, function hooking, inspection of application behavior and controlled bypass of client-side security checks
MobSFStatic and dynamic mobile application analysis, manifest review, exported component identification, certificate analysis, insecure configuration detection and initial code review
HTTP ToolkitInterception and analysis of mobile API communication and validation of application networking behavior
JADXDecompilation and analysis of Android Java/Kotlin bytecode
apktoolAndroid resources, manifest, XML and package-level analysis
ADBApplication installation, package inspection, file-system access on authorized test devices, log analysis and runtime interaction
GhidraReview of native libraries and security-sensitive native functionality where required
Burp RepeaterManual validation of authentication, authorization and transaction vulnerabilities
Burp IntruderControlled parameter mutation, enumeration and workflow testing
Turbo IntruderHigh-concurrency testing of race-sensitive payment and transaction endpoints
Autorize / AuthMatrix-style testingHorizontal and vertical authorization verification
Postman / curlReproduction of isolated backend requests independently of the official clients
PythonCustom request generators, token analysis, replay testing, cryptographic validation, differential-response testing and transaction workflow automation
Browser DevToolsClient-side code, storage, JavaScript, cookies, CSP and application-state analysis
Nmap / OpenSSLSupporting exposure and TLS verification where relevant to application endpoints

Phase 1 — Reverse Engineering the Mobile Banking Application

CyberZeals began by treating the Android application as hostile code running on an attacker-controlled device.

This distinction was critical.

A mobile application cannot safely assume that its local execution environment is trustworthy.

The APK was extracted and analyzed through MobSF, JADX and apktool.

The team reconstructed the package architecture, Android manifest, exported activities, services, broadcast receivers, content providers, network-security configuration, deep-link handlers, local storage mechanisms, cryptographic functions, authentication flows, device-identification logic and anti-tampering implementation.

Special attention was paid to code responsible for:

deviceId → authentication → OTP → device binding → token issuance → account access → transaction authorization

The objective was to identify where the server made security decisions and where it merely trusted information coming from the Android client.

This distinction eventually became one of the most important findings of the entire engagement.

Runtime Instrumentation

Static analysis showed what the application was designed to do.

Runtime instrumentation showed what an attacker could force it to do.

The assessment team launched the application on controlled rooted test devices and used Frida to inspect security-sensitive methods during execution.

Instrumentation was used to observe root-detection functions, emulator checks, certificate-validation routines, cryptographic operations, device identifiers, authentication state, API request construction, response parsing and security decision branches.

For example, a response-validation function effectively implemented logic conceptually similar to:

if deviceValidation.success == true:
    continueLogin()
else:
    startDeviceVerification()
That looks reasonable until the application itself is responsible for interpreting a security decision that the backend does not independently enforce.

CyberZeals therefore tested what happened if the client’s interpretation of that state was modified.

The result exposed a deeper architectural weakness.

The application was not merely displaying the backend’s decision.

In several workflows, the application was effectively participating in making the security decision.

Certificate Pinning and Traffic Inspection

The mobile application implemented certificate pinning.

CyberZeals verified the control, then evaluated the system under the assumption that a sufficiently capable attacker could instrument their own device.

Within the authorized test environment, runtime instrumentation enabled the assessment team to observe application traffic through HTTP Toolkit and Burp Suite.

This did not mean that certificate pinning itself was considered broken.

Instead, it allowed CyberZeals to evaluate the more important question:

If an attacker gains visibility into requests originating from their own device, does the backend remain secure?

That distinction became extremely important because multiple vulnerabilities discovered later could only be fixed correctly on the server.

Strengthening certificate pinning alone would not have addressed them.

Critical Finding 1 — Device Verification Was Partially Client-Enforced

During new-device authentication, the mobile application called a device-validation API.

The backend returned information representing whether the presented device was already trusted.

CyberZeals manipulated the response consumed by the application and observed that portions of the verification flow could be influenced by changing the security state interpreted by the client.

The underlying issue was architectural.

The backend allowed subsequent actions without consistently verifying that the required device-verification state had actually been completed server-side.

Security impact

An attacker who could manipulate application execution or network responses on an attacker-controlled device could potentially cause the application to enter an authenticated workflow that should have required additional device verification.

The key remediation was therefore not:

Make the mobile application harder to modify.

It was:

Make successful completion of device verification a server-side prerequisite for every security sensitive downstream action.

CyberZeals recommended a server-maintained device state similar to:

UNTRUSTED
   ↓
OTP_VERIFIED
   ↓
IDENTITY_VERIFIED
   ↓
COOL_OFF_ACTIVE
   ↓
DEVICE_TRUSTED

Sensitive APIs would evaluate this state independently rather than trusting the mobile client’s UI flow.

Critical Finding 2 — OTP Validation Was Not Cryptographically Bound to the Intended Authentication Context

CyberZeals reconstructed the OTP workflow and found that OTP generation and verification were not sufficiently tied to the complete authentication context.

Conceptually, the vulnerable workflow resembled:

Generate OTP
mobile = X

Verify OTP
otp = Y

Continue device authentication
customer = Z

The security assumption was that because an OTP had been successfully validated, the user had been verified.

However, successful OTP verification is only meaningful if the OTP is bound to the correct customer, action, device, session and challenge.

CyberZeals demonstrated that weaknesses in that relationship could allow the system to recognize “a valid OTP” rather than “the valid OTP issued for this exact customer’s exact authentication operation.”

The remediation introduced contextual challenge binding:

challenge_id
customer_id
registered_mobile
device_id
purpose
issued_at
expires_at
attempt_count
verification_state

The challenge became single-use and could only transition the exact originating authentication workflow.

This eliminated an entire class of cross-context OTP attacks.

Critical Finding 3 — Pre-Authentication Tokens Had Excessive Privileges

During authentication, the backend issued an intermediate token before the full login process was completed.

CyberZeals decoded the token’s claims, mapped the accessible API surface and manually attempted authenticated calls normally expected only after successful login.

Several backend services treated possession of the token as equivalent to fully authenticated status.

This created a classic trust-boundary problem:

Pre-authentication token
        ↓
Should access:
OTP / device verification only

Observed access:
OTP
Device verification
Profile-related APIs
Account-related APIs
Additional authenticated functionality

The vulnerability significantly increased the impact of weaknesses in the pre-authentication process.

CyberZeals recommended distinct token classes and explicit scopes.

For example:

token_type = PRE_AUTH

scope =
device.verify
otp.verify
authentication.continue

Only after all required controls were satisfied would the identity service issue:

token_type = ACCESS

scope =
account.read
statement.read
beneficiary.manage
transfer.create
...

Backend APIs were modified to reject incorrect token classes regardless of whether the token signature itself was valid.

High-Risk Finding — Sensitive Banking Information Returned Before Full Device Trust

During API enumeration, CyberZeals observed that an endpoint used to populate the application’s home screen returned substantially more information than the interface displayed.

The response contained information associated with account status and customer identity.

The critical issue was not merely excessive data exposure.

The API could be reached at a stage where the backend had not fully established that the requesting device had successfully completed all required security checks.

CyberZeals classified this as a combination of excessive object-property exposure and insufficient authorization-state validation.

The remediation was twofold.

The response schema was minimized according to business need, while the backend introduced mandatory device/authentication-state validation before sensitive customer data could be returned.

High-Risk Finding — Root Detection and Runtime Protection Could Not Be Treated as Authorization Controls

The bank had implemented root detection, anti-debugging and anti-tampering.

These controls added meaningful friction.

However, CyberZeals demonstrated through runtime instrumentation that client-side controls remained subject to manipulation because the attacker controlled the execution environment.

Frida was used during the authorized assessment to alter security-sensitive return values and inspect branches that would normally terminate execution.

The exercise reinforced a fundamental design requirement:

RASP, root detection, certificate pinning and anti-hooking are defense-in-depth controls. They must never replace backend authorization.

Following the engagement, the bank retained the protections but removed backend dependencies on client reported security states.

Local Data and Application-Surface Review

CyberZeals additionally inspected SharedPreferences, SQLite databases, cache directories, WebView state, application logs, screenshots, clipboard interaction, Android backup configuration and temporary files.

Exported activities, services, receivers and deep-link handlers were manually exercised.

Sensitive values discovered during static analysis were classified to determine whether they represented public configuration values, identifiers, test credentials, production secrets or cryptographic material.

Hardcoded cryptographic secrets were treated particularly seriously because application packages must be assumed recoverable by attackers.

Where secrets were required for server authentication, the architecture was redesigned so the mobile application no longer possessed reusable server-side credentials.

Phase 2 — Internet Banking Compromise Simulation

The web banking application was assessed independently from the mobile application and then tested as part of the same banking identity ecosystem.

CyberZeals authenticated using multiple test accounts representing different authorization levels.

Every important request was replayed across users, sessions and privilege boundaries.

Testing concentrated heavily on business logic rather than scanner output.

Critical Finding 4 — Broken Object-Level Authorization in Financial APIs

During account-statement testing, CyberZeals observed an account identifier within a backend API request.

The team authenticated as Customer A, captured the legitimate request and substituted an identifier belonging to Customer B.

The server returned data belonging to the second account because authorization had effectively been reduced to:

Is the requester authenticated?

instead of:

Is the requester authenticated?
AND
Is this account owned by or legitimately accessible to this requester?
This is the exact distinction that makes BOLA/IDOR vulnerabilities particularly dangerous in financial applications.

The same authorization pattern was subsequently tested across beneficiaries, transactions, statements, profile information, cards and payment instruments.

CyberZeals worked with developers to replace object-ID trust with server-side relationship validation:

authenticated_customer_id
        ↓
authorization service
        ↓
allowed account relationships
        ↓
requested resource

Object identifiers were treated as references, never proof of authorization.

Critical Finding 5 — Transaction Parameters Were Trusted After the User Confirmation Stage

The fund-transfer flow included a confirmation screen displaying the intended beneficiary and amount.

CyberZeals compared the request generated during transaction preparation with the request responsible for final execution.

A dangerous architectural assumption was identified.

The system partially trusted transaction information submitted during the final API request instead of executing an immutable server-side transaction object created during the verification stage.

An attacker able to modify the request after confirmation could therefore attempt to alter security-sensitive transaction properties.

CyberZeals recommended converting the flow into a server-authoritative transaction state machine.

Conceptually:

POST /transfer/prepare

Server creates:

transaction_id = random
source = account_A
beneficiary = account_B
amount = 10000
currency = PKR
state = PENDING_CONFIRMATION

After OTP or transaction authorization:

POST /transfer/{transaction_id}/authorize

The execution service retrieves the original transaction information from trusted server-side storage.

The client does not resubmit authoritative financial attributes.

This removed the ability for the browser or mobile client to redefine a transaction after authorization.

High-Risk Finding — Beneficiary Workflow Was Vulnerable to Cross Request State Manipulation

The beneficiary-registration process contained multiple steps involving beneficiary details, verification and confirmation.

CyberZeals discovered that individual steps were valid when evaluated independently but the server did not strongly bind the complete workflow together.

The application therefore trusted too much state originating from the browser.

The remediation introduced a short-lived server-side workflow identifier tying together the authenticated user, beneficiary, verification event and final confirmation.

Any mismatch invalidated the workflow.

Session Management Analysis

CyberZeals evaluated authentication cookies, access tokens, refresh tokens, session identifiers, remember me functionality, MFA state and logout behavior.

The assessment tested whether sessions rotated after authentication, whether MFA state survived incorrectly across sessions, whether password changes revoked existing sessions, whether logout invalidated tokens server-side, and whether parallel sessions followed bank policy.

One significant issue involved session persistence after a security-sensitive account event.

A customer could change credentials while previously established sessions remained operational longer than expected.

This transformed a stolen session from a temporary compromise into a persistent one.

The bank subsequently implemented centralized session revocation and risk-based invalidation.

CSRF and Browser-Origin Controls

State-changing functions were tested for CSRF independently of SameSite behavior.

CyberZeals evaluated beneficiary management, profile modification, payment operations and administrative functionality.

Origin and Referer validation, CSRF tokens, SameSite attributes and content-type restrictions were tested as complementary controls rather than assuming any single mechanism was sufficient.

Content Security Policy, clickjacking resistance, browser caching and cross-origin behavior were also reviewed.

Phase 3 — Payment Gateway Security Assessment

The payment gateway was treated differently from a normal web application.

A payment system is fundamentally a state machine involving money.

The assessment therefore focused on whether an attacker could cause:

displayed amount ≠ authorized amount
authorized amount ≠ processed amount
processed amount ≠ settled amount
settled amount ≠ merchant credit

CyberZeals mapped the complete payment lifecycle:

Merchant
   ↓
Payment Initialization
   ↓
Gateway
   ↓
Payment Method Selection
   ↓
Authorization
   ↓
Processor
   ↓
Gateway Status
   ↓
Merchant Callback
   ↓
Reconciliation

Every transition was tested for tampering, replay, concurrency and trust-boundary violations.

Critical Finding 6 — Payment Amount Integrity Was Insufficiently Protected

The payment interface displayed an amount originating from a legitimate merchant transaction.

CyberZeals then traced the amount across each backend call involved in completing the transaction.

One downstream request still accepted client-influenced payment attributes.

The critical question became:

Does the payment service execute the amount stored against the authoritative server-side order, or the amount received from the client?

Testing demonstrated that the trust boundary was weaker than expected.

The remediation eliminated client authority over the payment amount.

The gateway was changed to retrieve transaction attributes directly from server-side order state:

order_reference
        ↓
database
        ↓
merchant
amount
currency
customer
payment_status

Any amount supplied by the client was ignored for authorization purposes.

This transformed the browser from a trusted transaction participant into what it should always have been: an untrusted presentation layer.

Critical Finding 7 — Concurrency Testing Exposed a Race Window in Transaction Processing

CyberZeals identified an endpoint responsible for changing payment state.

Normal sequential testing appeared secure.

The team therefore used Turbo Intruder and custom Python concurrency tooling to send synchronized requests against the authorized staging transaction.

The goal was not simply to create load.

The objective was to determine whether multiple execution threads could observe the same transaction state before either thread committed its update.

Conceptually:

Thread 1:
READ status = PENDING

Thread 2:
READ status = PENDING

Thread 1:
PROCESS PAYMENT

Thread 2:
PROCESS PAYMENT
The test identified a race window requiring architectural remediation.

The bank implemented atomic state transitions, database-level safeguards and idempotency controls so that the transition effectively became:

UPDATE transactions
SET status = PROCESSING
WHERE transaction_id = ?
AND status = PENDING

Only one execution path could successfully acquire the transaction.

Duplicate requests then returned the existing transaction state rather than initiating another financial operation.

High-Risk Finding — Webhook Replay and Weak Event Binding

Payment completion relied partially on asynchronous callbacks.

CyberZeals captured legitimate callback behavior and evaluated signature validation, timestamp enforcement, replay protection and event uniqueness.

The assessment demonstrated why simply possessing a correctly signed historical event cannot be sufficient to alter present transaction state.

The hardened callback architecture incorporated cryptographic verification, event identifiers, timestamp tolerances, transaction-state validation and one-time event processing.

Conceptually:

HMAC(
    merchant_id
    + transaction_id
    + amount
    + currency
    + status
    + timestamp
    + event_id
)
After successful validation, event_id was stored and could not be processed again.

The transaction state machine additionally rejected impossible transitions.

For example:

SUCCESS → PENDING

was never accepted merely because a technically valid callback requested it.

High-Risk Finding — Payment Method Restrictions Were Partly Represented as Client State

The payment interface obtained configuration indicating which payment options were enabled for the transaction.

CyberZeals manipulated the client-consumed configuration to determine whether disabled payment methods were merely hidden or were genuinely prohibited by the backend.

This exposed an important difference between:

allowCreditCard = false

as a UI instruction and

SERVER POLICY:
Credit card payments prohibited for transaction X
as a security control.

The bank moved payment-method eligibility checks entirely into the transaction-processing layer.

The frontend remained responsible only for displaying the permitted options.

Transaction Reference Analysis

CyberZeals analyzed transaction identifiers for predictability, sequential behavior and information leakage.

Predictable identifiers are not automatically vulnerabilities.

They become vulnerabilities when authorization or confidentiality depends on an attacker being unable to guess them.

Consequently, identifiers were evaluated alongside transaction-status APIs, receipt endpoints, merchant callbacks and customer authorization logic.

Where identifiers represented sensitive transaction handles, CyberZeals recommended cryptographically random references with strong server-side authorization.

UUID-style randomness improved resistance to enumeration, while authorization remained the primary control.

API-Wide Authorization Matrix

One of the most valuable outputs of the engagement was not an individual vulnerability.

It was an authorization matrix.

CyberZeals extracted the meaningful backend endpoints from the mobile and web applications and mapped them against authentication states.

API StateExpected Access
UnauthenticatedLogin bootstrap and public configuration only
Pre-authenticatedOTP/device-verification functions only
Authenticated / untrusted deviceLimited account-recovery or verification operations
Authenticated / trusted deviceStandard customer functionality
Transaction verifiedSpecific authorized transaction
AdministrativeExplicit administrative functions only

Requests were then systematically replayed using tokens from the wrong state.

This approach identified authorization gaps that endpoint-by-endpoint scanning would likely have missed.

Attack Chain 1 — From Device Manipulation to Account Exposure

The most significant mobile attack scenario was not a single vulnerability.

It was a chain.

Attacker controls own Android environment
            ↓
Runtime instrumentation defeats client-only checks
            ↓
Weak device-verification enforcement
            ↓
OTP/session context insufficiently bound
            ↓
Pre-auth token has excessive API privileges
            ↓
Sensitive APIs become reachable
            ↓
Customer information exposed
Every control initially appeared to make exploitation more difficult.

But several controls trusted the previous control without independently validating the required security state.

CyberZeals’ remediation therefore focused on eliminating implicit trust.

The backend became authoritative at every transition.

Attack Chain 2 — From Authenticated Customer to Cross-Account Financial Data

The second major attack path required no malware, root access or sophisticated exploitation.

It required a legitimate low-privilege customer account.

Authenticate legitimately
        ↓
Capture account API request
        ↓
Modify object identifier
        ↓
Backend validates session
        ↓
Backend fails ownership validation
        ↓
Another customer's financial object becomes accessible

This finding was particularly important because perimeter controls such as WAF, MFA, CAPTCHA and TLS provide almost no protection against correctly formatted authenticated requests abusing broken business authorization.

The remediation occurred at the application authorization layer.

Attack Chain 3 — Manipulating the Payment State Machine

The payment-gateway testing produced another cross-layer scenario:

Legitimate payment initialized
        ↓
Client receives transaction state
        ↓
Security-sensitive fields manipulated
        ↓
Concurrent requests target transition
        ↓
Weak idempotency/state validation
        ↓
Potential payment inconsistency
        ↓
Merchant/gateway reconciliation risk
CyberZeals demonstrated that financial applications must validate not just individual requests but the sequence and uniqueness of state transitions.

This resulted in significant redesign of the gateway’s transaction-processing architecture.

Why Automated Scanning Would Have Missed the Most Important Problems

MobSF and Burp Scanner contributed useful coverage.

Neither discovered the complete attack chains.

A scanner can identify an exported Android activity.

It cannot reliably decide whether the bank’s device-binding architecture can be bypassed by manipulating the relationship between OTP verification and a later authentication request.

A scanner can identify an account identifier.

It cannot understand whether Customer A should legitimately be able to access Account B.

A scanner can fuzz a payment endpoint.

It cannot independently understand that a browser-visible amount should no longer be authoritative after the customer has approved a specific server-side transaction.

A scanner can detect missing headers.

It cannot reason about whether two simultaneous requests can move the same financial transaction through an impossible state.

That is why CyberZeals combined tooling with manual threat modeling, reverse engineering and business logic analysis.

Remediation Architecture

Instead of providing generic recommendations such as “perform proper validation,” CyberZeals worked with engineering teams to redesign specific security boundaries.

The mobile architecture was modified so device trust, OTP completion, biometric verification and cool-off state were persisted and enforced server-side.

The authentication platform introduced purpose-specific tokens and explicit scopes.

Sensitive APIs independently verified authentication state rather than relying on the frontend having followed the expected screen sequence.

The authorization layer validated customer-to-resource relationships for every account, beneficiary, card, statement and transaction object.

Payment authorization moved to immutable server-side transaction objects.

Payment state transitions became atomic.

Idempotency protections were introduced.

Webhook processing incorporated cryptographic verification, event uniqueness and replay resistance.

Session invalidation was centralized.

API responses were minimized according to business requirement.

Client-side protections remained active but were explicitly classified as defense-in-depth rather than trusted authorization mechanisms.

Secure Banking Architecture After Remediation

The resulting trust model became:

Secure Banking Architecture After Remediation

The important architectural change was not another SDK or another security product.

It was deciding where trust was allowed to exist.

Representative Finding Summary

REPRESENTATIVE PROFILE • 6 CRITICAL • 4 HIGH • 4 MEDIUM • 1 LOW

The following illustrates how CyberZeals communicated the results to both engineering and management stakeholders.

SeverityFindingPrimary Impact
CriticalDevice verification not consistently enforced server-sideAuthentication/device-control bypass
CriticalOTP verification insufficiently bound to authentication contextAccount takeover risk
CriticalExcessive privileges in pre-authentication tokenUnauthorized authenticated API access
CriticalBroken object-level authorizationCross-customer financial-data exposure
CriticalClient-influenced transaction attributesTransaction integrity risk
CriticalRace condition in payment-state processingDuplicate/inconsistent financial processing
HighSensitive API accessible before full device trustPII/account-data exposure
HighWebhook replay/state-validation weaknessPayment status manipulation
HighPayment-method control partly enforced by clientBusiness-rule bypass
HighSecurity-sensitive session not revoked after account eventPersistent account compromise
MediumRoot/anti-tamper control bypass through instrumentationReduced client-side defense
MediumExcessive API response propertiesIncreased information exposure
MediumPredictable transaction referencesEnumeration risk when combined with authorization weaknesses
MediumWeak browser security-policy configurationIncreased client-side attack surface
LowInformation disclosure through verbose errorsReconnaissance assistance

Revalidation

CyberZeals did not mark findings as resolved based solely on screenshots or developer statements.

Remediated builds were independently retested.

For authentication findings, the original attack sequence was repeated against the modified backend.

For authorization issues, cross-account object substitution was tested again.

For mobile controls, the application was instrumented again to ensure that manipulating the UI or local state no longer influenced server authorization.

For payment issues, concurrent requests were regenerated.

For webhook changes, legitimate events were replayed and modified events were submitted.

A vulnerability was considered closed only when the original exploitation condition could no longer be reproduced and the new implementation did not introduce an alternative bypass.

Outcome

The most significant result of the engagement was not the number of vulnerabilities discovered.

It was the shift from client-dependent security to server-authoritative security.

Before the assessment, several security controls operated correctly when customers used the applications exactly as designed.

CyberZeals tested what happened when the client application was deliberately modified, the expected sequence was ignored, API messages were constructed manually, requests were duplicated concurrently, identifiers were substituted, security responses were manipulated and payment states were replayed.

That exercise exposed the difference between a workflow that is difficult to misuse through the official UI and a backend that remains secure against an adversarial client.

Following remediation, authentication state, device trust, authorization and financial transaction integrity were significantly less dependent on assumptions made by the mobile or browser applications.

What Made the Engagement Different

This was not a vulnerability scan branded as a penetration test.

CyberZeals engineers reverse-engineered the mobile application using JADX, apktool and MobSF, instrumented it at runtime with Frida, inspected application traffic using HTTP Toolkit and Burp Suite, reconstructed authentication and device-binding protocols, manually attacked backend authorization controls, evaluated the web application using multiple identities, and stress-tested transaction state transitions with Turbo Intruder and custom Python tooling.

More importantly, the engagement tested how all three applications trusted each other.

That is where some of the most serious vulnerabilities existed.

The mobile team believed the API would enforce device state.

The API assumed the mobile application had already completed particular controls.

The payment frontend assumed the transaction service would validate immutable transaction attributes.

The transaction service assumed particular requests could occur only once.

Individually, each assumption sounded reasonable.

Combined, they created attack paths.

CyberZeals’ role was to find those paths before criminals did.

Final Takeaway

Secure digital banking cannot be achieved by adding SSL pinning to a mobile application, installing a WAF in front of internet banking, running an automated web scanner, or obtaining a clean PCI compliance report.

Those controls matter.

They solve different problems.

The decisive question is whether the bank continues to enforce its security model when every application controlled by the customer is assumed to be hostile.

CyberZeals therefore assesses banking applications according to a simple principle:

Never trust the mobile application. Never trust the browser. Never trust transaction parameters because they came from an official client. Trust only security state that the backend can independently prove.

That principle guided the assessment from Android reverse engineering to web authorization testing and payment-state manipulation.

And it transformed the engagement from a conventional penetration test into an end-to-end security review of the bank’s digital trust architecture.

CyberZeals

Application Security | Mobile Security | API Security | Payment Security | Red Teaming

CyberZeals helps financial institutions identify vulnerabilities that conventional scanners and compliance driven assessments frequently miss by combining reverse engineering, runtime instrumentation, API exploitation, business-logic testing and transaction-level threat modeling.

From mobile applications protected by RASP and certificate pinning to complex payment gateways and distributed banking APIs, CyberZeals evaluates one question above everything else:

What happens when an attacker stops using the application the way the developers intended?

Ron Wertlen

Former Head of Software Development at Doc Cirrus

We needed to flexibly grow our software development team and have had great success with Edvantis providing a fixed near-shore team of highly skilled developers. Some key product components are developed by Edvantis.

Contact Us today to protect your business from the latest threats!

Our Working Process How We Do

CyberZEALS is a professional IT services provider helping businesses across the USA manage, secure, and optimize their IT infrastructure.
01

Assess Needs

We analyze your IT infrastructure, risks, operations, and business requirements to identify gaps.

02

Plan Strategy

We design IT service and support solutions aligned with your operational goals growth. 

03

Implement Solutions

Our experts deploy secure IT infrastructure solutions efficiently with minimal business disruption risk. 

04

Ongoing Support

We provide managed IT support, monitoring, updates, security, optimization, and continuous performance improvement. 

Scroll to Top