[krbdev.mit.edu #7905] Password changes can result in replay error
Greg Hudson via RT
rt-comment at krbdev.mit.edu
Thu May 1 09:36:40 EDT 2014
Password changes typically happen over UDP using a request-response
protocol (RFC 3244 or its predecessor). As with the regular Kerberos
protocol, the client will retransmit the UDP request if it does not see
a reply within a second or so. If the first request made it to the
server but the reply got lost, the second request will be rejected as a
replay attack, and the client will report a failure, when in reality the
password change succeeded or failed for some other reason.
Possible solutions and mitigations include:
* Disable the replay cache for password changes in kadmind. This would
have somewhat negative security implications; it would allow password
change requests to be replayed within the window. (That's already
possible in a multi-master setup, of course.)
* The client could prefer TCP over UDP. This would be easy to implement
but might have unwanted side effects.
* If kadmind detects a replay, it could string-to-key the password and
check it against the current key. If it detects a match, it can report
success; if not, it can vaguely report a failure (or it could retry the
password change without actually writing to the KDB to try to get the
correct error result). This approach may have denial-of-service issues
since string-to-key is slow.
* If the client gets a replay error from the server, it could try an AS
request using the desired password. If that works, the client reports
success; if not, it tries the password change again to get the correct
failure message.
More information about the krb5-bugs
mailing list