BROKEN OBJECT-LEVEL AUTHORIZATION
One customer reads another customer’s data
You separate customers into tenants, which means every request your backend serves has to prove the caller owns the thing they asked for.
Sign up as our own tenant
No exploit required. We use the front door, the same as any prospect would.
Harvest identifiers
Responses hand out organisation IDs, user IDs, document and invoice references. We map every one.
Replay with someone else’s ID
The same authenticated request, one identifier swapped. Nothing malformed, nothing that looks like an attack in a log.
Find the endpoint that forgot to check
It only takes one. Teams enforce ownership in the UI and on the main routes, then miss an export, a webhook replay or an internal admin route.
Escalate from read to write
The same gap on a write endpoint means altering another company’s records, not just reading them.
AUTHENTICATION & RECOVERY
Taking an account without knowing the password
Anyone can create an account on your system, so an attacker begins as a legitimate user studying your login and recovery flows.
Learn who exists
Signup, login and reset flows almost always answer differently for a real address than a fake one. That difference is a user list.
Take apart the reset flow
Token entropy, token reuse, expiry that never fires, and whether the reset link honours a host header we control.
Test what is actually enforced
Rate limits that only cover the login page, MFA that the API path skips, sessions that survive a password change.
Chain it
Individually these are findings. Together they are entry into a real account without ever guessing a password.
IAM PRIVILEGE ESCALATION
One leaked key becomes the whole account
You configure your own cloud environment, so the blast radius of any single credential is set by your IAM policies rather than by your provider.
Get one credential
A build log, a mobile bundle, a public repository, a stale CI variable, or a server-side request forgery that reaches the metadata service.
Enumerate what it can do
Almost no environment is genuinely least-privilege. The first question is never "am I admin", it is "what can this identity change".
Follow the escalation chain
PassRole into a more privileged role, update a function’s execution role, attach a policy to ourselves. Documented paths, not exotic ones.
Arrive at control
A low-privilege key becomes administrative control of the account: data, backups, logs and the ability to quietly turn the logging off.
PERIMETER TO DOMAIN ADMIN
From a login portal to your entire network
Your staff log into internal systems, so there is a perimeter, and perimeters accumulate forgotten hosts faster than anyone documents them.
Inventory what is exposed
VPN portals, mail, remote desktop, management interfaces and the hosts nobody remembers standing up. Public certificate logs alone usually name several.
Spray, do not brute force
One common password against every account we found. Slow enough to avoid lockouts, and it only has to work once.
Land and listen
On the internal network we relay authentication, capture hashes from broadcast protocols and read what a normal user account can already reach.
Follow the misconfigurations
Delegation settings, certificate templates, over-privileged service accounts and stale group membership. The path to domain admin is usually a chain of defaults.
CLIENT TRUST
Your app hands over the keys
You ship a mobile app, which means you have shipped a copy of part of your system to every attacker who wants one.
Pull the bundle apart
The app is downloadable and decompilable. Strings, endpoints, feature flags and debug paths come out in minutes.
Take what was baked in
API keys, third-party secrets and internal hostnames get compiled into builds constantly, because the client "isn’t exposed".
Get between app and server
Certificate pinning is bypassable on a device we control. Now we see the real API traffic, including calls the UI never lets you make.
Talk to the backend directly
Every check the app performs client-side stops existing. The only controls left are the ones your server actually enforces.
HUMAN LAYER
The email your finance team will act on
Your domain’s email authentication does not instruct receiving servers to reject forgeries, so a convincing message can arrive from your own address.
Build the target list
Public certificate logs, your website, LinkedIn and breach corpora give names, roles and address format.
Forge from your own domain
With DMARC unenforced, mail claiming to be from your finance lead has no technical reason to be refused.
Ask for something ordinary
Not a password. An updated bank detail, an urgent approval, a document that needs signing on a page we host.
Use what comes back
Credentials get replayed against the portals we already found. Or the payment simply goes to the wrong account and nobody notices for a month.