Excessive Permissions Are an Attack Path Multiplier

One of the more common things we see during penetration tests isn’t a critical vulnerability or some exotic exploit.
It’s excessive access.
Users have permissions they no longer need. Service accounts have accumulated privileges over time. Cloud roles are broader than their intended function. API tokens can perform actions nobody expected. Administrative groups still contain people who changed roles years ago.
The problem isn’t necessarily the account itself.
It’s what an attacker can reach after compromising it.
A penetration test doesn’t stop once we get access. That’s often where the more interesting work starts.
What can this identity see?
What can it modify?
What other systems trust it?
What credentials or secrets can it access?
Can it assume another role, modify permissions, or reach another environment?
That’s where excessive permissions become dangerous.
Privilege creep creates attack paths
Access tends to accumulate.
Someone gets temporarily added to an administrative group for troubleshooting.
A developer receives production access during an incident.
An employee changes roles but retains access from their previous position.
A service account receives broad permissions because narrowing them would require additional testing.
A cloud role gets wildcard permissions because it gets a deployment working quickly.
Six months later, the immediate problem is forgotten, but the access remains.
During an internal pentest, we may begin with a normal Active Directory user that appears to have very little authority.
Then we start enumerating.
Maybe that user can access a server they don’t need.
Maybe a service account on that server has local administrator rights elsewhere.
Maybe another privileged user has an active session on one of those systems.
Maybe an ACL allows modification of another account or security group.
Individually, those permissions may not look severe. Together, they can create a valid path from an ordinary domain user to privileged access.
That’s why tools like BloodHound are useful during Active Directory assessments. We’re not just identifying administrators. We’re looking at relationships between users, groups, systems, sessions, ACLs, and privileges.
An account might be several steps away from Domain Admin.
If every step is exploitable, the number of steps doesn’t provide much protection.
Cloud environments have the same problem
AWS, Azure, and GCP use different terminology, but the underlying issue is the same.
An identity doesn’t need an Administrator label to effectively have administrative capability.
A seemingly limited account might be able to modify an IAM role, pass a privileged role to a compute service, change a serverless function, retrieve secrets, alter a CI/CD pipeline, or create credentials for another identity.
The permission itself may look narrow.
What matters is what that permission allows the attacker to do next.
A developer who can modify a production deployment pipeline may effectively have production administrative access.
A CI/CD service account that can retrieve secrets and deploy code may be more valuable to an attacker than a traditional administrator account.
The better question isn’t simply
Who is an administrator?
It’s
Who can become one, impersonate one, modify something trusted by one, or access something an administrator depends on?
Applications and APIs aren’t immune
The same issue appears in web applications and APIs.
A user may authenticate correctly but still have more authority than intended.
Can a normal user access another customer’s records by changing an object ID?
Can a manager call administrative API endpoints that the UI hides from them?
Can a read-only account perform state-changing actions?
Can one tenant access another tenant’s data?
Can an API token created for one integration call unrelated endpoints?
These aren’t authentication failures. The user is already authenticated.
They’re authorization failures.
Organizations often spend considerable effort strengthening authentication while giving less attention to what an authenticated identity can actually do.
MFA makes an account harder to compromise.
It doesn’t reduce the damage that account can cause once an attacker controls a valid session.
Service accounts deserve special attention
Service accounts are particularly interesting during pentests because they can survive for years.
Applications get replaced. Employees leave. Environments change. Nobody is completely sure what still depends on the account, so nobody wants to touch it.
That’s how service accounts end up with old passwords, interactive logon, local administrator rights across multiple systems, access to both development and production, or credentials stored in scripts and configuration files.
Compromise the right service account and one machine can become twenty.
One application can become database access.
One environment can become another.
A small foothold becomes lateral movement.
Think about blast radius
Least privilege is often discussed as a compliance requirement.
I think it’s more useful to think about blast radius.
Assume an identity will eventually be compromised.
Then ask what happens next.
If a developer account is compromised, can it reach production?
If an API key leaks, what operations can it perform?
If a service account is exposed, how many systems trust it?
If a cloud identity is compromised, can it modify its own privileges or create another identity?
That’s what least privilege is really protecting against.
It doesn’t prevent the initial compromise.
It limits how far the attacker can travel afterward.
When reviewing permissions, don’t stop at asking
“Does this person still need access?”
Ask
“If this identity were compromised today, what could an attacker do next?”
That question usually tells you a lot more about the actual risk.