[krbdev.mit.edu #7995] kadmin change_password -keepold does not work with master key migration
Greg Hudson via RT
rt-comment at krbdev.mit.edu
Mon Aug 18 12:48:57 EDT 2014
During master key migration, if a principal is re-keyed, the currently
active mkvno is used to encrypt the new keys and the principal's
KRB5_TL_MKVNO is updated to reflect that (unless #7994 applies).
However, if the -keepold flag is used, the principal's key data can
contain a mix of keys encrypted in the old and new master keys.
Steps to reproduce:
1. make testrealm
2. kdb5_util add_mkey -s (enter a new master password twice)
3. kdb5_util use_mkey 2
4. kadmin.local -q 'cpw -keepold -pw pw user'
Now user has a mix of keys encrypted in the old and new master key. It
is hard to immediately see that anything is wrong, because the KDC can
still decrypt the old keys (it iterates over the master key list rather
than respecting the principal's mkvno metadata). Here are two paths
which can demonstrate problems:
5. kdb5_util purge_mkeys -f
6. kadmin.local -q 'xst -norandkey user' (reports "Decrypt integrity
check failed while changing user's key")
This fails because the old master key is gone, so the kvno 1 keys cannot
be decrypted. As a side point, the error message is misleading because
xst -norandkey isn't trying to change the user's key. Alternatively:
5. kdb5_util update_princ_encryption -f (does not update user because it
already lists mkvno 2 in its metadata)
6. kdb5_util add_mkey -s (enter a different new master password twice)
7. kdb5_util update_princ_encryption -f (reports "Decrypt integrity
check failed" on the user principal)
This fails because update_princ_encryption tries to specifically decrypt
key data in the principal's listed master key version, unlike the KDC.
More information about the krb5-bugs
mailing list