S4U Extensions
Two Kerberos extensions underpin all constrained delegation abuse:
S4U2Self and S4U2Proxy flow: how a service obtains a forwardable ticket on behalf of a user and uses it to access a third service
TRUSTED_TO_AUTH_FOR_DELEGATION set.
msDS-AllowedToDelegateTo. On RBCD, it validates the source against msDS-AllowedToActOnBehalfOfOtherIdentity on the target.

How unconstrained and constrained delegation appear in Active Directory Users and Computers (Delegation tab)
userAccountControl Bitmask
Every AD object has auserAccountControl bitmask controlling account behaviour. Delegation-relevant flags:
SeEnableDelegationPrivilege
Normally only Domain Admins can set delegation flags. This privilege grants that ability to non-admin accounts. If a low-priv user has it, they can configure delegation on any account they control without DA — then immediately exploit it.Unconstrained Delegation

Unconstrained delegation: the KDC embeds the user's full TGT in the service ticket. Service A extracts and caches it, then can impersonate the user against anything.
TRUSTED_FOR_DELEGATION flag on the account. When a user authenticates to an unconstrained delegation host, the KDC embeds their full TGT in the service ticket. The host extracts and caches it in LSASS.
Attack goal: coerce a privileged account (usually the DC machine account) into authenticating to the compromised host, extract its TGT, then DCSync.
Requirements:
- Compromised account with
TRUSTED_FOR_DELEGATIONset (a computer or service account) - Account has an SPN (machine accounts always do)
- DNS write access to register an A record for your attacker listener
- Ability to coerce outbound auth from a privileged account (PetitPotam, printerbug, etc.)
Enumeration
Exploitation (krbrelayx)
The most reliable approach from Linux. You add an SPN to the compromised account pointing at your attacker host, register a DNS record for it, then coerce the DC to authenticate. krbrelayx captures the incoming AP-REQ and extracts the embedded TGT.Exploitation (Rubeus, Windows)
Cleanup
Constrained Delegation

Constrained delegation: Service A can only impersonate users to the specific SPNs listed in msDS-AllowedToDelegateTo. With protocol transition (T2A4D), it can also use S4U2Self to get a forwardable ticket for any user without their password.
msDS-AllowedToDelegateTo set to a specific list of SPNs it can delegate to. There are two sub-variants depending on whether protocol transition is enabled.
Requirements:
- Controlled account with
TRUSTED_TO_AUTH_FOR_DELEGATIONset — enables S4U2Self, without it the impersonation ticket cannot be generated msDS-AllowedToDelegateTopopulated with a valid SPN — the SPN must be registered in AD, the KDC rejects S4U2Proxy if it can’t find the target account- Valid credentials for the delegating account (password, hash, or TGT) — needed to request the initial TGT to kick off the chain
- Without protocol transition: need a controlled SPN account to generate a forwardable ticket via RBCD first, then feed it into S4U2Proxy
Enumeration
With Protocol Transition (T2A4D flag set)
TRUSTED_TO_AUTH_FOR_DELEGATION is set on the account. The service can call S4U2Self to obtain a forwardable ticket for any user without that user authenticating first, then feed it into S4U2Proxy.
Without Protocol Transition
S4U2Self cannot produce a forwardable ticket on its own. Workaround: configure RBCD from the constrained delegation account to an attacker-controlled account, use that RBCD path to get a forwardable ticket, then feed it back into S4U2Proxy.altservice: SPN Substitution
If delegation rights exist to a low-value SPN (e.g.,time/target), substitute it for a useful one. The KDC only checks the PAC at ticket-use time, not whether the SPN matches the allowed list.
RBCD (Resource-Based Constrained Delegation)

RBCD inverts the trust model: the target resource controls who can delegate to it via msDS-AllowedToActOnBehalfOfOtherIdentity. No Domain Admin needed to configure it — write access on the target object is enough.
msDS-AllowedToActOnBehalfOfOtherIdentity on the target. Requires only write access to that attribute — no Domain Admin.
Requirements:
- Write access on the target object’s
msDS-AllowedToActOnBehalfOfOtherIdentity(GenericAll, GenericWrite, WriteProperty, or WriteDACL) - A controlled account with an SPN: machine account (
MachineAccountQuota > 0) or existing user/computer with an SPN - If
MachineAccountQuota = 0: use an existing SPN account or the SPN-less U2U path below - DC functional level: Windows Server 2012+