Skip to content
devwallssecurity
A cable-stayed bridge lit across water at night
work / DW-2518

A tenancy bug that let one merchant read another's settlements

Authorisation was enforced at the gateway and assumed everywhere behind it. One internal endpoint had never been given the memo.

client
A pan-African payments platform
sector
Financial services
service
Application security
duration
Retained, 14 months
1
endpoint missing a tenancy check
2.1m
settlement records reachable
6h
from report to patch in production
the situation

The platform had grown from one country to nine in three years. Its authorisation model had been designed for the first country and extended by convention rather than by code.

A cash machine lit against a dark shopfront at night

Financial services

what we did
01

Built a threat model per service and found four places where tenancy was enforced by convention.

02

Wrote an abuse-case suite that asserts cross-tenant denial on every route, and handed it to their QA team.

03

Reviewed the settlement service line by line with two of their engineers in the room.

04

Stayed for the fix, the retest, and the postmortem.

selected findings
as they appear in the report
reffindingseverity
DW-2518-02Missing tenancy assertion on internal settlement exportcritical
DW-2518-05Authorisation enforced at gateway only, assumed downstreamhigh
DW-2518-11Merchant identifiers sequential and guessablemedium
DW-2518-02RRetest: cross-tenant access denied on all routesresolved
outcome

The specific bug was closed in six hours. The class of bug was closed by a test that now fails the build, which is the part that mattered.

The report was the least valuable thing they gave us. The failing test in our pipeline was the most.
VP Engineering · Pan-African payments platform
next engagement
forty-one roles that could reach patient data. three should have.
A dense city skyline at night, lit windows in red and amber

tell us what you would least like us to reach

Scoping is a conversation with the people who own the systems, not a form. Twenty minutes is usually enough to tell whether we are the right practice for the problem.