Hunting NTLM coercion and relay: when a forced login lands on the wrong service
Windows authentication was designed to be forwarded: a client proves who it is to a server, and nothing in a
challenge-response exchange inherently ties that proof to the service the client meant to reach. An attacker
exploits both halves. First coercion: a feature that makes a machine or account connect outbound, an automatic
connection to a supplied path, a print or backup trigger, or any function that authenticates to an
attacker-named host. Second relay: the captured authentication is forwarded to a different service, and if
that service does not require signing or verify channel binding, it accepts the forwarded proof and treats the
attacker as the coerced identity. A relayed domain controller or privileged host becomes control of that
service. The bug is a service that accepts network authentication without binding it to the channel, reachable
by an identity an attacker can coerce. You hunt these by pairing coercion triggers with services that fail to
enforce signing or channel binding.
When to use
- Services accept network authentication without mandatory signing or channel binding on a network you assess.
- A privileged machine or account can be induced to authenticate outbound to an attacker-named host.
- A directory, certificate, or file service is reachable by a coercible identity without channel protection.
Scope check
Test coercion and relay only on networks you own or are authorized to assess, on non-production or a lab
domain, coercing only hosts you are permitted to and relaying only to services in scope, never acting as a
real privileged identity beyond a benign proof. A confirmed relay authenticates as a privileged account, so
keep every probe within scope. If you can't name the authorization, stop.
The loop
Establish whether the target service enforces signing and channel binding first. For each service that
accepts network authentication, determine whether it requires signing and verifies channel binding, so a
relayed authentication is rejected, or whether it accepts forwarded proof unbound to the channel. This is
the false-positive killer: a service that mandates signing or binds the channel cannot be relayed to, so a
coercion trigger alone is not a finding. Name the service's enforcement before pairing it with a trigger.
Enumerate coercion triggers. Identify the functions that make a privileged machine or account
authenticate outbound to a host the tester names: automatic connections to a supplied path, print,
backup, or maintenance triggers, and any feature that resolves and authenticates to an operator-supplied
location. Note which privileged identities each trigger causes to authenticate.
Enumerate relay targets and their enforcement. List the services reachable on the network that accept
network authentication, and for each read whether signing is required and channel binding is verified.
Directory, certificate enrollment, and file services are common targets; a target that does not bind the
channel is a candidate sink.
Pair a trigger with an unbound target. A finding is a coercion trigger that authenticates a privileged
identity paired with a reachable service that accepts the relayed authentication unbound. Confirm the
coerced identity has meaningful privilege at the target, since relaying an unprivileged account gains
nothing there.
Determine the impact at the target. Relaying to a directory service can grant object writes as the
coerced account; relaying to a certificate enrollment interface can obtain a certificate for the coerced
identity; relaying to a file service can read or write shares as that identity. Name what the coerced
identity is authorized to do at the target.
Confirm and record. Confirm by coercing a permitted privileged host to authenticate and relaying it to
an in-scope service that accepts it, observing a benign privileged action on an isolated lab domain. Kill
the lead if the target enforces signing or verifies channel binding, if no trigger coerces a privileged
identity, or if the coerced identity has no privilege at the target. Record the trigger, the coerced
identity, the target service, its enforcement gap, and the benign proof, or set a kill_reason.
Where coercion and relay leaks
- The target's enforcement is the finding. A service that mandates signing and verifies channel binding
rejects a relay; the bug is a reachable service that accepts forwarded authentication unbound to the channel.
- Coercion supplies the identity. A trigger that makes a domain controller or a privileged host
authenticate outbound hands the attacker that identity's authentication to forward.
- Directory and certificate services are high-value targets. Relaying a machine or privileged account to
a directory write or a certificate enrollment yields object control or a durable credential for that
identity.
- File services leak as the coerced user. A relay to a file service reads and writes shares as the coerced
identity, reaching data the attacker's own account cannot.
- Signing off by default is the recurring gap. Services left without mandatory signing or channel binding,
often for compatibility, are exactly the relay targets; the default, not a special weakness, is the hole.
Worked example (a confirm and a kill)
Confirm. A coercion trigger causes a privileged host to authenticate outbound to a tester-controlled
host, and a reachable certificate enrollment interface accepts the relayed authentication without channel
binding. Relaying it obtains a certificate for the coerced privileged identity on an isolated lab domain,
demonstrated by a benign authentication with that certificate. Confirmed privilege escalation through
coercion and relay to certificate enrollment, high, remediation = enforce signing and channel binding on
the enrollment and directory services, disable the coercion trigger or restrict outbound authentication, and
require channel-bound authentication network-wide.
Kill. Every reachable service requires signing and verifies channel binding, so a relayed authentication
is rejected, and outbound authentication from privileged hosts is restricted to known destinations. A
coerced authentication cannot be forwarded to any service that will accept it. Killed, kill_reason =
"all relay targets enforce signing and channel binding and reject forwarded authentication; coercion yields
a proof that no reachable service will accept unbound."
Rationalizations to reject
- "We use a modern authentication protocol." -> The relay question is whether the target binds the
authentication to the channel and enforces signing, not which protocol; an unbound modern exchange relays
too.
- "Coercion requires a special trigger." -> Many ordinary features authenticate to an operator-supplied
path; enumerate them rather than assuming coercion needs an exotic primitive.
- "Only unprivileged users would be relayed." -> Coercion targets machines and privileged accounts
specifically; confirm which identity the trigger authenticates, since that is what gets relayed.
- "Signing is on somewhere." -> Enforcement must hold at the specific target service; signing on one service
does not protect another that accepts unbound authentication.
- "The certificate service is internal." -> Internal reachability is exactly the relay path; if a coercible
identity can reach the enrollment interface unbound, internal placement does not protect it.
Executing this in practice
You need every service that accepts network authentication with whether it enforces signing and channel
binding, the coercion triggers that make privileged identities authenticate outbound, and the privilege each
coerced identity holds at each reachable target. Pair a trigger that coerces a privileged identity with a
reachable target that accepts unbound authentication. Reading each target's enforcement settles most leads;
coercing a permitted host and relaying it to an in-scope service for a benign privileged action on an isolated
lab domain settles the rest.
Related
hunting-adcs-certificate-template-abuse - relaying a coerced authentication to a certificate enrollment
interface obtains a certificate for the coerced identity, joining relay to that template escalation.
hunting-kerberos-and-ad-delegation-abuse - a relayed or coerced authentication feeds the ticket-based
escalation that skill pursues once the identity is captured.
auditing-windows-named-pipe-and-rpc-exposure - the interfaces a coercion trigger abuses to induce outbound
authentication are the local endpoints that skill audits.
auditing-tls-and-certificate-validation - channel binding ties authentication to the transport, the
validation control that skill audits from the channel side.
- FINDING-SCHEMA.md - source = the coerced outbound authentication, sink = the
relaying service accepting it unbound, evidence = a benign privileged action as the coerced identity on an
isolated lab domain.
1---2name: hunting-ntlm-coercion-and-relay3description: Hunt authentication coercion and relay on a Windows network, where an attacker induces a privileged machine or account to authenticate to a host it controls and forwards that authentication to a service that does not bind or verify the channel, authenticating as the coerced identity because signing is not enforced and channel binding is absent. Use when services accept network authentication without mandatory signing or channel binding and a privileged host can be induced to authenticate outbound. Covers coercion triggers, relay to directory, certificate, and file services, missing signing, and absent channel binding. The coerced outbound authentication is the source, the relaying service accepting it is the sink, and acting as the coerced privileged identity is the bug.4license: MIT5---67# Hunting NTLM coercion and relay: when a forced login lands on the wrong service89Windows authentication was designed to be forwarded: a client proves who it is to a server, and nothing in a10challenge-response exchange inherently ties that proof to the service the client meant to reach. An attacker11exploits both halves. First coercion: a feature that makes a machine or account connect outbound, an automatic12connection to a supplied path, a print or backup trigger, or any function that authenticates to an13attacker-named host. Second relay: the captured authentication is forwarded to a different service, and if14that service does not require signing or verify channel binding, it accepts the forwarded proof and treats the15attacker as the coerced identity. A relayed domain controller or privileged host becomes control of that16service. The bug is a service that accepts network authentication without binding it to the channel, reachable17by an identity an attacker can coerce. You hunt these by pairing coercion triggers with services that fail to18enforce signing or channel binding.1920## When to use2122- Services accept network authentication without mandatory signing or channel binding on a network you assess.23- A privileged machine or account can be induced to authenticate outbound to an attacker-named host.24- A directory, certificate, or file service is reachable by a coercible identity without channel protection.2526## Scope check2728Test coercion and relay only on networks you own or are authorized to assess, on non-production or a lab29domain, coercing only hosts you are permitted to and relaying only to services in scope, never acting as a30real privileged identity beyond a benign proof. A confirmed relay authenticates as a privileged account, so31keep every probe within scope. If you can't name the authorization, stop.3233## The loop34351. **Establish whether the target service enforces signing and channel binding first.** For each service that36 accepts network authentication, determine whether it requires signing and verifies channel binding, so a37 relayed authentication is rejected, or whether it accepts forwarded proof unbound to the channel. This is38 the false-positive killer: a service that mandates signing or binds the channel cannot be relayed to, so a39 coercion trigger alone is not a finding. Name the service's enforcement before pairing it with a trigger.40412. **Enumerate coercion triggers.** Identify the functions that make a privileged machine or account42 authenticate outbound to a host the tester names: automatic connections to a supplied path, print,43 backup, or maintenance triggers, and any feature that resolves and authenticates to an operator-supplied44 location. Note which privileged identities each trigger causes to authenticate.45463. **Enumerate relay targets and their enforcement.** List the services reachable on the network that accept47 network authentication, and for each read whether signing is required and channel binding is verified.48 Directory, certificate enrollment, and file services are common targets; a target that does not bind the49 channel is a candidate sink.50514. **Pair a trigger with an unbound target.** A finding is a coercion trigger that authenticates a privileged52 identity paired with a reachable service that accepts the relayed authentication unbound. Confirm the53 coerced identity has meaningful privilege at the target, since relaying an unprivileged account gains54 nothing there.55565. **Determine the impact at the target.** Relaying to a directory service can grant object writes as the57 coerced account; relaying to a certificate enrollment interface can obtain a certificate for the coerced58 identity; relaying to a file service can read or write shares as that identity. Name what the coerced59 identity is authorized to do at the target.60616. **Confirm and record.** Confirm by coercing a permitted privileged host to authenticate and relaying it to62 an in-scope service that accepts it, observing a benign privileged action on an isolated lab domain. Kill63 the lead if the target enforces signing or verifies channel binding, if no trigger coerces a privileged64 identity, or if the coerced identity has no privilege at the target. Record the trigger, the coerced65 identity, the target service, its enforcement gap, and the benign proof, or set a `kill_reason`.6667## Where coercion and relay leaks6869- **The target's enforcement is the finding.** A service that mandates signing and verifies channel binding70 rejects a relay; the bug is a reachable service that accepts forwarded authentication unbound to the channel.71- **Coercion supplies the identity.** A trigger that makes a domain controller or a privileged host72 authenticate outbound hands the attacker that identity's authentication to forward.73- **Directory and certificate services are high-value targets.** Relaying a machine or privileged account to74 a directory write or a certificate enrollment yields object control or a durable credential for that75 identity.76- **File services leak as the coerced user.** A relay to a file service reads and writes shares as the coerced77 identity, reaching data the attacker's own account cannot.78- **Signing off by default is the recurring gap.** Services left without mandatory signing or channel binding,79 often for compatibility, are exactly the relay targets; the default, not a special weakness, is the hole.8081## Worked example (a confirm and a kill)8283> **Confirm.** A coercion trigger causes a privileged host to authenticate outbound to a tester-controlled84> host, and a reachable certificate enrollment interface accepts the relayed authentication without channel85> binding. Relaying it obtains a certificate for the coerced privileged identity on an isolated lab domain,86> demonstrated by a benign authentication with that certificate. **Confirmed** privilege escalation through87> coercion and relay to certificate enrollment, `high`, remediation = enforce signing and channel binding on88> the enrollment and directory services, disable the coercion trigger or restrict outbound authentication, and89> require channel-bound authentication network-wide.90>91> **Kill.** Every reachable service requires signing and verifies channel binding, so a relayed authentication92> is rejected, and outbound authentication from privileged hosts is restricted to known destinations. A93> coerced authentication cannot be forwarded to any service that will accept it. **Killed**, `kill_reason` =94> "all relay targets enforce signing and channel binding and reject forwarded authentication; coercion yields95> a proof that no reachable service will accept unbound."9697## Rationalizations to reject9899- *"We use a modern authentication protocol."* -> The relay question is whether the target binds the100 authentication to the channel and enforces signing, not which protocol; an unbound modern exchange relays101 too.102- *"Coercion requires a special trigger."* -> Many ordinary features authenticate to an operator-supplied103 path; enumerate them rather than assuming coercion needs an exotic primitive.104- *"Only unprivileged users would be relayed."* -> Coercion targets machines and privileged accounts105 specifically; confirm which identity the trigger authenticates, since that is what gets relayed.106- *"Signing is on somewhere."* -> Enforcement must hold at the specific target service; signing on one service107 does not protect another that accepts unbound authentication.108- *"The certificate service is internal."* -> Internal reachability is exactly the relay path; if a coercible109 identity can reach the enrollment interface unbound, internal placement does not protect it.110111## Executing this in practice112113You need every service that accepts network authentication with whether it enforces signing and channel114binding, the coercion triggers that make privileged identities authenticate outbound, and the privilege each115coerced identity holds at each reachable target. Pair a trigger that coerces a privileged identity with a116reachable target that accepts unbound authentication. Reading each target's enforcement settles most leads;117coercing a permitted host and relaying it to an in-scope service for a benign privileged action on an isolated118lab domain settles the rest.119120## Related121122- `hunting-adcs-certificate-template-abuse` - relaying a coerced authentication to a certificate enrollment123 interface obtains a certificate for the coerced identity, joining relay to that template escalation.124- `hunting-kerberos-and-ad-delegation-abuse` - a relayed or coerced authentication feeds the ticket-based125 escalation that skill pursues once the identity is captured.126- `auditing-windows-named-pipe-and-rpc-exposure` - the interfaces a coercion trigger abuses to induce outbound127 authentication are the local endpoints that skill audits.128- `auditing-tls-and-certificate-validation` - channel binding ties authentication to the transport, the129 validation control that skill audits from the channel side.130- [FINDING-SCHEMA.md](../../FINDING-SCHEMA.md) - source = the coerced outbound authentication, sink = the131 relaying service accepting it unbound, evidence = a benign privileged action as the coerced identity on an132 isolated lab domain.