HACKR.GG
← Blog
Identity2026-08-2711 min read

The Credential Nobody Owned: Machine Identities Are the Attack Surface of 2026

API keys, service accounts and OAuth tokens now outnumber employees 45 to 1 — and almost none of them have MFA, rotation, an expiry date or an owner. Here's why machine credentials are harder to defend than passwords, and how one forgotten 2022 credential reached 200 organisations.

Abstract field of tiny key shapes receding into darkness, a few glowing red with threads spreading outward

Ask a company how many employees it has and you will get an exact number. Ask how many API keys, service accounts, OAuth tokens, CI secrets, webhook signing keys and workload identities it has, and you will usually get a pause.

That pause is the vulnerability. Machine identities now outnumber human ones by roughly 45 to 1 in a typical enterprise, and by as much as 144 to 1 in cloud-native and DevOps-heavy environments. Every one of them is a credential that authenticates to something. Almost none of them have an owner, an expiry date, or anyone who would notice if a stranger started using them.

// KEY POINTEvery security control you have built around human logins — MFA, password rotation, joiner/mover/leaver, anomalous login alerts — applies to the smaller half of your identities.

Why machine credentials are worse than passwords

A stolen employee password is a bad day with a well-rehearsed response. MFA probably blocks it, the login looks anomalous, the account gets disabled, everyone moves on. A stolen API key has none of those brakes.

HUMAN IDENTITYcreatedMFA enforcedpassword rotatesaccess reviewedoffboardedMACHINE IDENTITYcreatedit never expires, never rotates, and nobody is offboarded from itso it stays valid until someone finds it
A human identity moves through a lifecycle with several natural revocation points. A machine identity is issued and then, in most organisations, nothing else ever happens to it.
Human credentialMachine credential
Second factorEnforced almost everywhereStructurally impossible — nobody is there to approve
RotationPolicy-driven, often automaticManual, disruptive, so usually never
OffboardingTriggered by HR the day someone leavesNo equivalent event exists
OwnershipThe person it belongs toFrequently nobody — the author left years ago
ScopeTied to one roleOften broad standing access no human would be granted
Anomaly detectionOdd location or hour looks wrongIt is automation. Odd hours are normal.

That last row is the one defenders underestimate. Automated traffic at 3am from a datacentre IP is precisely what a service account is supposed to look like. An attacker using a stolen machine credential is not hiding in the noise — they are indistinguishable from the signal.

The scale of what is already leaked

This is not a hypothetical exposure. SpyCloud's 2026 Identity Exposure Report recaptured 18.1 million exposed API keys and tokens from 2025 alone, spanning cloud providers, payment platforms and developer services. Stolen credentials remain the single most common initial access vector, appearing in around 22% of breaches, and 88% of basic web application attacks involve them.

The reason so many leak is that secrets end up in places nobody thinks of as published:

git history        — deleted from HEAD, still in an old commit
frontend bundles   — an API key compiled into main.js
CI/CD logs         — echoed by a debug step, retained for a year
container layers   — ENV set in an early Dockerfile layer
mobile apps        — decompile the APK, read the strings
public buckets     — .env backed up next to the assets
error pages        — a stack trace with a connection string
issue trackers     — pasted into a ticket "temporarily"
Rotating a leaked key fixes the exposure. It does not fix the four years the key was exposed before anyone looked, which is the window attackers are actually operating in.
// try it yourself
Hunting exposed secrets in git history, JS bundles and public assets is a whole discipline — the Secrets & Credential Discovery module walks the real hiding places.

What it looks like when it goes wrong: the Klue breach

June 2026 produced an almost perfect case study. Klue, a market intelligence SaaS provider, was breached between 11 and 24 June by a threat actor tracked as Icarus. The entry point was not a zero-day or a phished employee.

It was a credential Klue issued in 2022 for a limited pilot, which then sat live and unmonitored for roughly four years.

01
A pilot ends, the credential does not
Issued in 2022 for a small trial. The trial concluded. Nobody revoked the credential, because revoking it was not anybody's job.
02
An attacker finds it
Four years of exposure is a long time for a credential that nothing is watching.
03
It reaches the integration infrastructure
The credential had access to the systems holding customer OAuth tokens.
04
Tokens are harvested
Not one company's tokens — every customer who had connected their CRM.
05
Downstream data is exfiltrated
Business contacts, sales communications, pricing and opportunity notes pulled from customers' own Salesforce environments, followed by extortion.
one stale credentialissued 2022, never revokedthe OAuth token storeevery customer's integration tokensCRMCRMCRMCRMCRMCRMCRMCRMCRM≈200 downstream organisations — none of whom were breached themselves
The blast radius of a single unrevoked credential. Roughly 200 organisations lost data without anything being compromised on their own side.

Nearly 200 organisations were affected, including security vendors — Huntress, Recorded Future, Tanium and Jamf among them. Salesforce disabled the Klue integration in response.

The part worth sitting with: none of those 200 companies were breached. Their controls worked. Their staff did nothing wrong. They had authorised an integration, which is a completely ordinary thing to do, and the token issued for it turned out to be reachable through somebody else's forgotten credential.

If you have ever clicked “Allow” on an OAuth consent screen for a SaaS tool, you have created a machine identity in your own environment whose security now depends on a third party's credential hygiene.
// try it yourself
OAuth is where most of these tokens come from, and its failure modes are specific and testable — work through them in the OAuth & SSO Attacks module.

How an attacker actually works this

From an offensive perspective this is a recon problem before it is an exploitation problem, and it rewards patience over cleverness.

// try it yourself
Forgotten infrastructure is the same root cause from a different angle — the Subdomain Takeover module is a good companion to this one.

What to do about it

The honest answer is that this is an inventory problem wearing a security costume. You cannot rotate, scope or revoke credentials you do not know exist.

StepWhy it matters
Inventory every non-human identityNothing else on this list is possible without it. Expect the count to be several times higher than anyone guesses.
Give every credential a human ownerNot a team — a person. The Klue credential survived four years precisely because it belonged to nobody.
Set an expiry on everythingA credential that expires by default converts "we forgot" from a breach into an outage. An outage is the far better failure.
Scope to the single taskBroad standing access is what turns one stolen token into 200 affected organisations.
Scan for leaked secrets continuouslyPre-commit hooks stop new leaks; history scanning finds the ones already shipped.
Audit third-party OAuth grantsReview what you have authorised, and revoke integrations nobody uses. Every live grant is standing access into your data.
// THE FIXShort-lived, narrowly-scoped, owned by a named human. If a credential fails any one of those three, it is a future incident with the date left blank.

Why this is becoming urgent rather than merely important

Because AI agents are machine identities, and organisations are deploying them fast. Every agent needs credentials to be useful, those credentials tend to be broad so the agent can handle whatever it is asked, and they are standing rather than per-task. That is the same pattern described above, being created at speed, in a context where the credential holder can also be talked into things by anyone who can put text in front of it.

The organisations that struggle with this over the next few years will not be the ones with weak cryptography or unpatched servers. They will be the ones that could not answer a simple question: what credentials do we have, what can each of them reach, and who would notice if one of them started behaving differently?

// Practice this

Everything in this post has a hands-on lab on hackr.gg. Exploit it yourself right inside the lesson — no setup, no install, runs in your browser.

Open Secrets & Credential Discovery course →
More posts
Web Security
OWASP Top 10 2025: What Actually Changed (and What It Means for You)
12 min
AI Security
Prompt Injection Grew Up: How AI Agents Became a Real Attack Surface
13 min
Teams
Security Training for Teams: Who It's For, and What Actually Changes
10 min