Why are stolen holder-of-key assertions worthless to an attacker, which attacks does this stop, and what is the practical cost?
Using the assertion requires a TLS handshake with the private key of the client certificate named in it, which the attacker does not have; this defeats assertion theft via cross-site scripting and man-in-the-middle, at the cost of managing client certificates in browsers.
The defence changes what an attacker must steal. With a bearer assertion, copying a few kilobytes of XML is enough. With a holder-of-key assertion, the SP demands proof of possession of the private key that matches the certificate inside the assertion. An XSS script can read the form but cannot extract a non-exportable private key from the browser's key store; a man-in-the-middle can see the assertion but cannot complete the client-authenticated handshake with the SP.
The cost explains why HoK is rare:
- Every browser needs a client certificate (even self-signed ones must be generated and installed).
- Client-certificate prompts in browsers are confusing for users.
- TLS-terminating load balancers must pass the client certificate on to the application.
Go deeper:
OASIS: SAML V2.0 Holder-of-Key Web Browser SSO Profile โ the abstract states the protection against credential theft.