An account that should see nothing got client data from eight endpoints

Wealth management: an account with no rights got client data from eight endpoints. The worst returned hundreds of records and was rated critical.
Case study

An account that should see nothing got client data from eight endpoints

For CISOs and CTOs at platforms that hold client and portfolio data.

To test who can see what in a wealth-management API, we created an account with no access at all and called the endpoints with it. Several returned data anyway.

  • Wealth management
  • Client, portfolio and mandate API
  • Compliance
  • Clients
  • Reputation
A BetterQA colleague in a blue sweater smiling at a laptop in a glass-walled meeting room in the Cluj-Napoca office
At stake

What was at risk

Compliance

Personal data shown to an account with no rights

A people search and a portfolio search each returned dozens of rows to an account with no permissions. Context: unauthorised disclosure of personal data raises a GDPR breach question.

Clients

A protocol listing open to any login

The worst endpoint, a regulation-protocol listing, returned hundreds of records to the zero-access account (exact count withheld) and was rated critical.

Reputation

A gap that one-role tests never see

The same token was refused elsewhere, so the leaks were scoping gaps in specific endpoints. A test that only checks the happy role will not find them.

The numbers
9tests red: eight endpoints, one of them on two aliases
5positive controls green, proving the probe was sound
hundredsof records from the worst endpoint, rated critical
0permissions held by the account that read client data from eight endpoints
Rules

Standards and rules in play

  • Context: broken access controlOWASP lists broken access control first in its Top 10 web risks. We asserted the secure state: an account with no permissions gets an empty list or a refusal from every endpoint.
  • Context: GDPR security of processingPersonal data returned to someone with no rights is an access-control failure of the kind GDPR security duties address.
Method

How we tested it

Test level
System testing at API level, against the live environment.
Test types
Security testing (access control) and functional negative testing, run as a re-runnable suite.
Test basis
The rule: an account with no permissions must receive an empty list or a refusal from every endpoint.
  • TechniqueError guessingWhere it showed upOne zero-permission account called the endpoints, and each test asserted the secure state, so a test is red exactly while the endpoint leaks.
  • How we workedPositive controls for the probeWhere it showed upFive controls ran beside the nine tests: an empty positions tree, a permission error, a 403 on the standard API, and a garbage token and a missing token both turned away. All five stayed green.

Terms as in the ISTQB CTFL 4.0.1 syllabus and glossary.

Findings

What we found, and what it costs

  • FindingCriticalA regulation-protocol listing returned hundreds of records to a zero-access accountWhat it costs youRecords meant for permitted users were readable by any login.
  • FindingLeakA people search and a portfolio search returned dozens of rows each, the latter also through a collection aliasWhat it costs youNames and portfolios reached someone who should see nothing.
  • FindingScopeEight endpoints in all, nine failing checksWhat it costs youNot one bug but a pattern of endpoints missing their scoping. Fixing them one by one turns each test green.

A call and a count were enough evidence to make the case to the client for each of them.

Outcome

What changed

Each leak is now a test that is red while the endpoint leaks and turns green when it is fixed. The run exits as passed only if the five controls pass, so the suite stays useful while fixes land endpoint by endpoint.

What this means for you: Ask whether your access tests include an account that should see nothing, and what every endpoint returns to it.

Want your access control tested with an account that should see nothing?

We assert the secure state and prove the probe with controls. The first month is a trial.

Talk to our team
Share the Post: