A stolen bearer token works from the attacker's machine exactly as it worked from the user's, and token binding exists to end that. D3-TB Token Binding is the MITRE D3FEND countermeasure that D3FEND defines as "a security mechanism used to enhance the protection of tokens, such as cookies or OAuth tokens, by binding them to a specific connection." It sits in the Harden tactic under Credential Hardening and strengthens the Access Token artefact. The name refers to a specific IETF protocol (RFC 8471), which saw little deployment, but the idea lives on in sender-constrained OAuth tokens, device-bound sessions and identity provider token protection. This card explains what D3-TB hardens, which ATT&CK techniques D3FEND relates it to, how to implement the idea with mechanisms that are usable today, how to verify it, and where it stops helping. It is for identity architects, API owners and detection engineers dealing with token and cookie theft.
Key takeaways
- D3-TB removes the bearer property. A bound token is only accepted when the client also proves possession of a private key, so a copied token alone is useless.
- The original protocol did not reach browsers. RFC 8471 is a Proposed Standard from October 2018, but Chromium's 2018 intent to remove noted Token Binding "has never shipped", and D3FEND itself says browser support "remains limited".
- Use the successors for real deployments. Mutual-TLS certificate-bound tokens (RFC 8705) and DPoP (RFC 9449) bind OAuth tokens today; Device Bound Session Credentials (DBSC) is a W3C Editor's Draft for browser cookies.
- Binding is only as strong as key storage. RFC 8471 says binding private keys are "high-value assets" and should be protected, ideally in hardware; malware on the client can still use the key in place.
- The ATT&CK mapping is inferred. D3FEND relates D3-TB to token, cookie and credential techniques through shared artefacts; binding directly affects replay of stolen tokens and little else.
D3-TB at a glance
| Field | D3-TB Token Binding |
|---|---|
| D3FEND ID | D3-TB |
| Tactic | Harden |
| Parent technique | Credential Hardening |
| Digital artefact | Strengthens Access Token (the parent hardens Credential) |
| What it changes | The server records a client key identifier in the token and rejects the token when the presenting connection cannot prove the matching key |
| D3FEND reference | IETF RFC 8471, The Token Binding Protocol Version 1.0 |
| Usable mechanisms (November 2026) | RFC 8705 certificate-bound tokens, RFC 9449 DPoP, identity provider device-bound tokens; DBSC for browser cookies as a draft |
| Main limitation | Client support, key protection on the client, and TLS-terminating intermediaries |
How it works
D3FEND's knowledge base describes the protocol flow: when issuing a token to a client that supports Token Binding, the server includes the client's Token Binding ID (or its hash) in the token; when the token is presented later, the server checks the ID against the binding established on that connection and rejects the token on mismatch. RFC 8471 fills in the detail. The client keeps a key pair per target server. On each TLS connection it signs a value exported from that connection (the exported keying material defined in RFC 5705), which proves possession of the private key and ties the binding to the connection. A "provided" binding covers the server being connected to; a "referred" binding lets an identity provider bind a token that the client will present to a different relying party. RFC 8472 negotiates the protocol in the TLS handshake and RFC 8473 carries it over HTTP.
RFC 8471 was published in October 2018 as a Proposed Standard (status checked November 2026). The same year, the Chromium team posted an intent to remove: Token Binding "has been behind a flag for over two years and has never shipped", and the code would be removed. Without browser support, deployments moved to other ways of achieving the same result.
Mechanisms that bind tokens today
| Mechanism | Status (checked November 2026) | What the token is bound to | Best fit |
|---|---|---|---|
| Token Binding (RFC 8471, 8472, 8473) | Proposed Standard, October 2018 | Client key proven over each TLS connection | Reference model; little client support |
| Mutual-TLS certificate-bound access tokens (RFC 8705) | Standards Track, February 2020 | SHA-256 thumbprint of the client certificate, in the cnf claim as x5t#S256 | Server-to-server and workload clients, financial-grade APIs |
| DPoP (RFC 9449) | Standards Track, September 2023 | JWK thumbprint of a client key, in the cnf claim as jkt, proven by a signed DPoP proof per request | Browser single-page apps, mobile apps, clients without TLS client certificates |
| Device Bound Session Credentials | W3C Editor's Draft (dated 9 November 2026), marked as work in progress | A per-session key the browser stores, used to refresh short-lived cookies | Browser session cookies, as support develops |
| Identity provider device-bound tokens | Product features, per vendor documentation | A key held on a registered device | Workforce sign-in sessions |
RFC 9449 says DPoP is meant for cases where mutual TLS or Token Binding are unavailable, citing a "lack of support for HTTP token binding". As one example of the last row, Microsoft Entra Conditional Access Token Protection accepts only device-bound sign-in session tokens such as the Primary Refresh Token from supported applications; its status differs by platform and application. For deeper guidance on each mechanism, see the DPoP Guide, the mTLS Guide and the Device-Bound Session Credentials (DBSC) Guide.
ATT&CK techniques D3FEND relates to D3-TB
Relationship type: inferred only. D3FEND labels these mappings "inferred, experimental". They come from shared artefacts: D3-TB strengthens Access Token, and its parent Credential Hardening hardens Credential, so techniques acting on those artefacts or their sub-artefacts (session cookie, password, Kerberos ticket, encrypted credential) are related. D3FEND lists no ATT&CK mitigation for D3-TB. It also lists Keychain under an ID that ATT&CK has since revoked; its ATT&CK v20 successor is T1555.001. IDs checked against ATT&CK v20, D3FEND checked November 2026. The last column is NHI Mgmt Group's assessment, not part of D3FEND.
| ATT&CK ID | Technique | What binding changes (NHI Mgmt Group assessment) |
|---|---|---|
| T1528 | Steal Application Access Token | Strong where enforced: the stolen token fails without the client key |
| T1550.001 | Use Alternate Authentication Material: Application Access Token | Strong where enforced: replay from another client is refused |
| T1539 | Steal Web Session Cookie | Strong only where cookies are bound (for example DBSC); none for ordinary cookies |
| T1550.004 | Use Alternate Authentication Material: Web Session Cookie | As above |
| T1606.001 | Forge Web Credentials: Web Cookies | Partial: a forged cookie lacks a valid binding if the server requires one |
| T1098.001 | Account Manipulation: Additional Cloud Credentials | Minimal: newly added credentials get their own bindings |
| T1134.001, T1134.002, T1134.003 | Token Impersonation/Theft, Create Process with Token, Make and Impersonate Token | None in practice: these are operating system tokens on the host, not network tokens |
| T1558.001 | Golden Ticket | None: a forged Kerberos ticket is outside web token binding |
| T1003.003, T1003.005, T1003.008 | NTDS, Cached Domain Credentials, /etc/passwd and /etc/shadow | None: related only through the Credential artefact |
| T1555.001 | Keychain | None directly |
| T1110.001, T1110.002, T1110.003 | Password Guessing, Password Cracking, Password Spraying | None: related only through the Credential artefact |
For the techniques binding addresses most directly, see the MITRE ATT&CK T1528 Steal Application Access Token Guide, the MITRE ATT&CK T1539 Steal Web Session Cookie and the MITRE ATT&CK T1550 Use Alternate Authentication Material Guide.
Where it is implemented
| Component | What to configure | Typical gap |
|---|---|---|
| Authorisation server | Advertise and issue bound tokens: tls_client_certificate_bound_access_tokens for RFC 8705; token_type DPoP for RFC 9449; bind refresh tokens for public clients | Binding supported but optional, so clients keep requesting bearer tokens |
| Resource server | Require the binding: compare the cnf value with the TLS client certificate or the DPoP proof key; reject a DPoP-bound token presented as Bearer | Resource servers that ignore the cnf claim |
| TLS termination | Pass the client certificate from load balancer to application over a protected channel | RFC 8705 leaves this out of scope; spoofable certificate headers |
| Client | Generate keys in non-exportable storage (TPM, secure enclave, HSM for servers) | Keys in files or browser storage that malware can copy |
| Identity provider sessions | Device-bound token policies, in report-only mode first | Unsupported platforms left in a permanent exclusion |
DPoP proofs carry htm (HTTP method), htu (target URI), iat, a unique jti for replay detection, ath (hash of the access token) and an optional server nonce. Resource servers must check all of these and the key match. RFC 9449 also requires the access token response to carry token_type DPoP; any other value means the token is not DPoP-protected.
Where identity and NHIs fit
Workloads are the easiest place to start. Server-side clients can hold keys in a hardware module or a platform identity and use mTLS client authentication, so certificate-bound tokens for machine-to-machine APIs are often simpler than binding browser sessions. A leaked CI/CD or agent access token that is bound to a workload key cannot be replayed from outside. See the Machine-to-Machine OAuth (Client Credentials) Guide and the JWT Client Authentication (private_key_jwt) Guide.
Implementation steps
- Rank token flows by replay impact. Start with administrative APIs, machine clients with broad scope, and long-lived refresh tokens.
- Choose a mechanism per client type. mTLS-bound tokens for servers and workloads that can hold certificates; DPoP for browser and mobile clients; identity provider device binding for workforce sessions.
- Check the whole path. Confirm every TLS terminator, gateway and SDK in the path supports the mechanism, including how a client certificate reaches the application.
- Issue bound tokens in parallel. Let pilot clients request bound tokens while resource servers accept both, and log whether each request carried a valid binding.
- Enforce per resource. Switch resource servers to reject unbound tokens for clients registered as bound, one API at a time. Rollback is switching that resource back to accepting both.
- Bind refresh tokens. RFC 9700 requires public clients' refresh tokens to be sender-constrained or rotated; binding removes the most valuable token to steal.
- Protect the keys. Use non-exportable key storage and document key rotation and device loss handling.
How to verify it works
- Replay test: in an authorised test, copy a bound token to a second client without the key and call the API. It must fail (RFC 8705 specifies HTTP 401 with invalid_token on certificate mismatch).
- Downgrade test: present a DPoP-bound token with the Bearer scheme. RFC 9449 requires rejection.
- Proof replay test: resend an old DPoP proof, or one for a different method or URI. It should fail the jti, iat, htm or htu checks.
- Header spoofing test: where TLS is terminated upstream, send a forged client certificate header directly to the application tier. It must be ignored or blocked.
- Coverage review: sample issued tokens and check for a cnf claim.
| Metric | What it shows | Target direction |
|---|---|---|
| Share of high-value API calls made with bound tokens | Real coverage | Rising |
| Share of refresh tokens that are bound or rotated | Exposure of the longest-lived tokens | Rising to 100% |
| Binding validation failures per day, by client | Replay attempts or broken clients | Each spike triaged |
| Clients registered as bound but still receiving bearer tokens | Configuration drift | Zero |
| Devices or platforms excluded from device-bound token policy | Size of the unbound surface | Falling, with owners and expiry |
Limits, bypasses and failure patterns
- Malware on the client: RFC 8471 notes that malware in the user agent can still use bound tokens, and the server may not be able to tell. Binding stops off-device replay, not on-device abuse.
- Unbound parts of the session: binding an access token while leaving the session cookie or refresh token as a bearer credential moves the attack rather than stopping it. CitrixBleed 2023 shows the cost of unbound session cookies: cookies read from appliance memory were replayed as authenticated sessions, past both password and MFA.
- Optional enforcement: if resource servers still accept bearer tokens, attackers simply request or use unbound ones.
- TLS intermediaries: certificate binding breaks, or is spoofable, when a proxy terminates TLS and forwards the certificate insecurely.
- Exportable keys: a key stored in a file is just another secret to steal.
- Draft dependence: DBSC is an Editor's Draft that "may change at any moment"; plan pilots, not hard dependencies, on its details.
Framework mapping
| Framework | Reference | Relationship to D3-TB |
|---|---|---|
| NIST SP 800-53 Rev 5 | SC-23 Session Authenticity | Protects the authenticity of sessions and their identifiers |
| NIST SP 800-53 Rev 5 | IA-5, SC-12 | Authenticator management and protection of the binding keys |
| NIST CSF 2.0 | PR.AA-03 | Users, services and hardware are authenticated |
| IETF | RFC 9700 | Recommends sender-constrained access tokens and sender-constrained or rotated refresh tokens |
The framework rows are NHI Mgmt Group's mapping, not part of D3FEND.
Related countermeasures
- Token-based Authentication: D3-TBA Token-based Authentication issues the tokens that D3-TB hardens.
- Certificates: D3-CBAN Certificate-based Authentication provides the client certificates used by RFC 8705.
- After theft: D3-ANCI Authentication Cache Invalidation, D3-CR Credential Revocation and D3-DST Decoy Session Token.
Practitioner checklist
- List token flows whose replay would cause the most damage and bind those first.
- Pick mTLS-bound tokens for workloads and DPoP for browser and mobile clients.
- Require binding at the resource server; do not accept bearer fallbacks for bound clients.
- Bind or rotate every refresh token issued to a public client.
- Keep binding keys in non-exportable storage.
- Secure the path from TLS terminator to application for client certificates.
- Run replay, downgrade and proof-replay tests after every change.
- Track bound-call coverage and binding failures per client.
Standards and references
- MITRE D3FEND: Token Binding (D3-TB)
- IETF: RFC 8471 The Token Binding Protocol Version 1.0
- IETF: RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens
- IETF: RFC 9449 OAuth 2.0 Demonstrating Proof of Possession (DPoP)
- IETF: RFC 9700 Best Current Practice for OAuth 2.0 Security
- W3C: Device Bound Session Credentials (Editor's Draft)
- Microsoft: Token protection in Microsoft Entra Conditional Access
- Chromium blink-dev: Intent to Remove: Token Binding
Related NHI Mgmt Group resources: MITRE D3FEND Guide · DPoP Guide · Session Hijacking and Cookie Theft Guide · NIST IR 8587 Guide · Infostealer Logs and Session Token Abuse Guide