A reviewer says the estate is fully patched, so NTLM relay is fixed. Why is that wrong?
answer
- a property, not a defect
- nothing is malfunctioning
- one variant closed, the class open
- triggers are an open list
- capability shipped, capability disabled
basics
~20 sRelay is a design property, not a defect. The exchange proves possession to whoever holds the challenge and never states which service it was meant for, so no patch retires it. Updates removed only particular variants and particular triggers.
solid answer
~50 sNothing is malfunctioning during a relay. The protocol does exactly what it was designed to do: it proves that a party holds an account's key, to whoever issued the challenge, without stating an audience. Fix that and you have changed the design, not applied a patch. What updates actually did is narrower - one removed the variant that reflected an authentication back at the host that produced it, and others closed individual features that could be used to provoke a host into authenticating outward. New triggers keep appearing, because any feature that accepts a path and then goes and fetches it is a candidate. The claim is usually wrong a second way too: the properties that do retire the class - enforced signing, channel binding, service binding - ship disabled or permissive for compatibility, so a fully patched estate can have every one of them switched off.
go deeper
Recall that the protocol behaves as designed during a relay, so there is no malfunction for an update to repair.
Explain what updates genuinely removed - one reflect-to-self variant and individual features that provoke an authentication - and why the trigger list stays open.
Show you can redirect the review from patch level to an inventory of destinations that accept an unbound authentication, and name why rotation and transport encryption are not answers.
Own the distinction between a capability shipped and a capability enabled, and be ready to say what enabling it across the estate costs and who signs off the exceptions.
## Separating a defect from a property The useful distinction to draw for the reviewer is between a vulnerability and a design property. A vulnerability is behaviour the designers did not intend: a boundary that can be crossed, a value that is not checked, memory that is written past its end. A patch is the right instrument, because there is a correct behaviour to restore. Relay is not that. A challenge-response exchange is designed to convince a challenger that the answering party holds a key, and designed not to reveal the key. It succeeds at both. The property it lacks - a statement of intended audience that the far end verifies - was never in it. Restoring nothing restores that. This is why relay has been continuously exploitable for decades across estates that were entirely current on updates. ## What the patches did do, and why it looked like progress Two genuinely useful things have arrived as updates over the years, and both are narrower than the reviewer thinks. The first was removing a specific variant: reflecting an authentication straight back at the host that produced it, so a host would authenticate to itself and grant the operator its own privileges. That is a special case of the class, it was closed, and it stayed closed. The second is the ongoing removal or gating of individual features that can be used to make a host authenticate outward on demand. Each of those is a real reduction. But they are individually enumerated fixes against an open-ended input: the trigger is a feature that takes a location and then goes and fetches it, and that description covers document processing, print and scan destinations, remote administration calls, indexing, previewing and more. New triggers keep being found because the design pattern keeps recurring, so a fully patched estate is a snapshot of the triggers known so far, not a state of immunity. ## The second failure in the claim Even granting all of that, the sentence has a practical hole. The properties that actually end the technique - enforced session signing at the destination, channel binding, service binding - are configuration, not code. They exist in a patched estate; they are frequently off, or set to a permissive mode that accepts a missing binding value, because turning them on breaks something old. So the accurate rendering of *we are fully patched* is *we hold the capability to end this and have not enabled it*. Those are very different positions, and the second one is the one to say out loud in a review. ## How to make the point land Asking for the trigger inventory is a fast way to show the shape of the problem: which hosts in the estate can be made to authenticate outward, and to what. Nobody has that list, and the reason nobody has it is that it is not a list of bugs. Then reframe the question the reviewer should be asking: not *are we patched* but *which services that accept these identities will accept an authentication that names no audience, and what would it cost to make each of them refuse*. That also disposes of the neighbouring bad answers. Rotating the coerced account's password does nothing, because the password was never in play. Strengthening interactive sign-in does nothing, because the coerced principal is often a device or machine account that never signs in interactively. Encrypting the path does nothing, because the operator terminates the transport on both sides. The only levers are refusing at the destination and removing the protocol from the estate. ## The honest end state The class is retired in one of two ways: every service that accepts these identities refuses an authentication that is not bound to a channel and a service, or the protocol is no longer accepted anywhere. Both are programmes of work with a compatibility bill, and both are decisions somebody has to own. Neither of them arrives on patch day, and saying so clearly is the whole value of answering this question well.
- What would you actually ask for in that review instead of a patch level?The list of services in the estate that accept these identities and whether each refuses an authentication with no channel or service binding, plus whether signing is enforced rather than merely negotiated. That is a short, answerable inventory, and it maps directly onto the work that ends the class.
- Is there any version of the claim that is defensible?Only the narrow one: specific variants and specific coercion triggers have been removed by updates, so being current genuinely reduces the number of ways to provoke an authentication. It does not make the estate relay-proof, and stating the reduced claim precisely is the difference between an accurate answer and a comforting one.
- The reviewer counters that the account has a rotated 40-character password. What do you say?That password strength and rotation are irrelevant because the secret is never guessed, transmitted or held by the operator. The coerced host computes the response with the real key, and the operator only carries it. A machine account with a generated password relays exactly as well.
saying these in an interview costs you the question
- Treats relay as a vulnerability awaiting a patch
- Cites a current patch level as evidence the class is closed
- Confuses shipping a capability with enabling it
- Proposes password rotation as the remedy
- Assumes the list of coercion triggers is finite and known