Skip to main content
cd ../config-traps
risk/register/unconstrained-delegation-hiding-on-service-accounts.html
Active Directory Kerberos Delegationcritical severityActive Directory

Unconstrained Delegation Hiding on Service Accounts

Severity
critical
Reviewed
28 Jul 2026
Remediation
~20 minutes
Overview

A service account flagged TRUSTED_FOR_DELEGATION forwards a full copy of any caller's TGT into the hosting process's memory, not just an impersonation token. On Active Directory, when a privileged account authenticates to a scheduled task, IIS pool, or SQL service running under that identity, the ticket sits extractable in LSASS on every host the credential touches, and standard delegation reviews rarely check user accounts at all.

At a glance

Unsafe setting
Service account holds TRUSTED_FOR_DELEGATION (unconstrained Kerberos delegation) rather than constrained, resource-based delegation.
Failure trigger
A Tier-0 or admin account authenticates to any service or task running under that account, caching a full forwardable TGT in LSASS.
Blast radius
The extracted TGT lets an attacker impersonate the admin against every service in the domain, from any host running the delegating service.
Recommended control
Replace unconstrained delegation with resource-based constrained delegation on a gMSA and place Tier-0 accounts in Protected Users to block all delegation.

The Trap

Unconstrained Kerberos delegation set directly on a service account rather than a computer object — the userAccountControl bit TRUSTED_FOR_DELEGATION (0x80000) applied to an account such as svc-sqlprod or svc-iisapp.

The Default State

Admins provisioning a legacy application that needs to hop credentials to a backend database or file share open the account’s Delegation tab in ADUC and select “Trust this user for delegation to any service (Kerberos only)” because it is the option that just works, rather than configuring msDS-AllowedToDelegateTo for constrained delegation. The account keeps a static password, an SPN registered against it, and runs an IIS application pool or a Windows service across several member servers. No one revisits the setting once the application ships, and delegation reviews during audits typically enumerate computer objects for unconstrained delegation, skipping user accounts entirely.

The Blast Radius

Any Kerberos ticket a caller presents to a process running under that account arrives with a full, forwardable TGT copy, cached in LSASS on whichever host the service is running. If a Tier-0 admin, backup operator, or help-desk account with elevated rights ever authenticates through that service — browsing the IIS site, connecting to the SQL instance, or triggering the scheduled task — their TGT sits extractable via sekurlsa::tickets on that box. Because the flag lives on the account, not the host, every server that runs the service inherits the same harvesting surface: a cluster of four IIS nodes means four separate places an attacker can lift the same admin’s ticket. The stolen TGT then impersonates that admin against any service in the domain, not just the delegating application, for the remaining lifetime of the ticket.

The Lead Mechanic Fix

Audit first: Get-ADObject -LDAPFilter '(userAccountControl:1.2.840.113556.1.4.803:=524288)' -Properties sAMAccountName,ServicePrincipalName. Migrate each hit to resource-based constrained delegation bound to a group-managed service account so credentials never sit extractable: Install-ADServiceAccount plus Set-ADComputer -PrincipalsAllowedToDelegateToAccount on the target resource, then clear the flag with Set-ADAccountControl -TrustedForDelegation $false. Place every Tier-0 and admin account in Protected Users, or set “Account is sensitive and cannot be delegated,” so no delegation type — constrained or not — can forward their ticket.

03

Apply the safer control

Before you change production

Confirm the affected scope, export the current configuration, and test the replacement control in a non-production environment first.

Fix commands and configuration

Get-ADObject -LDAPFilter '(userAccountControl:1.2.840.113556.1.4.803:=524288)' -Properties sAMAccountName,ServicePrincipalName
Install-ADServiceAccount
Set-ADComputer -PrincipalsAllowedToDelegateToAccount
04

Verify, roll back or escalate

Verify

Re-run the detection test and a controlled negative-path test. Confirm the unsafe behaviour is blocked while approved traffic still succeeds.

Rollback

Restore the exported configuration if the new control blocks required production traffic, then narrow the policy before redeployment.

Escalate

Escalate when the blast radius is uncertain, the control cannot be tested safely, or remediation requires an outage or security exception.

After remediation

Further reading stays below the corrective workflow and is selected by platform, category and shared technical keywords.