PRIMARY SCOPE
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 Banking | APK 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 Banking | Authentication, MFA, session management, password reset, beneficiary management, fund transfer, account statements, authorization, CSRF, XSS, access control, business logic, request manipulation and API security |
| Payment Gateway | Payment 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 APIs | BOLA/IDOR, authentication, authorization, token scope, object/property authorization, rate limiting, sensitive data exposure, mass assignment and workflow abuse |
| Supporting Controls | WAF 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
| Tool | Use During Engagement |
|---|---|
| Burp Suite Professional | Primary interception platform for web/API testing, request manipulation, session analysis, authorization testing, repeater workflows, intruder attacks and extension assisted testing |
| Frida | Runtime instrumentation of the Android application, function hooking, inspection of application behavior and controlled bypass of client-side security checks |
| MobSF | Static and dynamic mobile application analysis, manifest review, exported component identification, certificate analysis, insecure configuration detection and initial code review |
| HTTP Toolkit | Interception and analysis of mobile API communication and validation of application networking behavior |
| JADX | Decompilation and analysis of Android Java/Kotlin bytecode |
| apktool | Android resources, manifest, XML and package-level analysis |
| ADB | Application installation, package inspection, file-system access on authorized test devices, log analysis and runtime interaction |
| Ghidra | Review of native libraries and security-sensitive native functionality where required |
| Burp Repeater | Manual validation of authentication, authorization and transaction vulnerabilities |
| Burp Intruder | Controlled parameter mutation, enumeration and workflow testing |
| Turbo Intruder | High-concurrency testing of race-sensitive payment and transaction endpoints |
| Autorize / AuthMatrix-style testing | Horizontal and vertical authorization verification |
| Postman / curl | Reproduction of isolated backend requests independently of the official clients |
| Python | Custom request generators, token analysis, replay testing, cryptographic validation, differential-response testing and transaction workflow automation |
| Browser DevTools | Client-side code, storage, JavaScript, cookies, CSP and application-state analysis |
| Nmap / OpenSSL | Supporting 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()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_TRUSTEDSensitive 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 = ZThe 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_stateThe 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 functionalityThe 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.continueOnly 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?
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 resourceObject 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}/authorizeThe 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 creditCyberZeals mapped the complete payment lifecycle:
Merchant
↓
Payment Initialization
↓
Gateway
↓
Payment Method Selection
↓
Authorization
↓
Processor
↓
Gateway Status
↓
Merchant Callback
↓
ReconciliationEvery 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_statusAny 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 PAYMENTThe 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 = PENDINGOnly 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
)The transaction state machine additionally rejected impossible transitions.
For example:
SUCCESS → PENDINGwas 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
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 State | Expected Access |
|---|---|
| Unauthenticated | Login bootstrap and public configuration only |
| Pre-authenticated | OTP/device-verification functions only |
| Authenticated / untrusted device | Limited account-recovery or verification operations |
| Authenticated / trusted device | Standard customer functionality |
| Transaction verified | Specific authorized transaction |
| Administrative | Explicit 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 exposedBut 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 accessibleThis 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 riskThis 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:

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.
| Severity | Finding | Primary Impact |
|---|---|---|
| Critical | Device verification not consistently enforced server-side | Authentication/device-control bypass |
| Critical | OTP verification insufficiently bound to authentication context | Account takeover risk |
| Critical | Excessive privileges in pre-authentication token | Unauthorized authenticated API access |
| Critical | Broken object-level authorization | Cross-customer financial-data exposure |
| Critical | Client-influenced transaction attributes | Transaction integrity risk |
| Critical | Race condition in payment-state processing | Duplicate/inconsistent financial processing |
| High | Sensitive API accessible before full device trust | PII/account-data exposure |
| High | Webhook replay/state-validation weakness | Payment status manipulation |
| High | Payment-method control partly enforced by client | Business-rule bypass |
| High | Security-sensitive session not revoked after account event | Persistent account compromise |
| Medium | Root/anti-tamper control bypass through instrumentation | Reduced client-side defense |
| Medium | Excessive API response properties | Increased information exposure |
| Medium | Predictable transaction references | Enumeration risk when combined with authorization weaknesses |
| Medium | Weak browser security-policy configuration | Increased client-side attack surface |
| Low | Information disclosure through verbose errors | Reconnaissance 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?
