OpenSSH security advisory: legacy certificate signing in 5.6/5.7
Damien Miller
djm at cvs.openbsd.org
Fri Feb 4 12:24:00 EST 2011
OpenSSH Security Advisory: legacy-certs.adv
This document may be found at: http://www.openssh.com/txt/legacy-cert.adv
1. Vulnerability
Legacy certificates generated by OpenSSH might contain data
from the stack thus leaking confidential information.
2. Affected configurations
OpenSSH 5.6 and OpenSSH 5.7 only when generating legacy
certificates. These must be specifically requested using the
"-t" option on the ssh-keygen CA command-line.
3. Mitigation
Avoid generating legacy certificates using OpenSSH 5.6 or 5.7
If legacy certificates have been issued with a vulnerable
OpenSSH version, consider rotating any CA key used.
4. Details
When generating legacy *-cert-v00 at openssh.com certificates,
the nonce field was not being correctly filled with random
data but was left uninitialised, containing the contents of
the stack.
The contents of the stack at this point in ssh-keygen's
execution do not appear to leak the CA private key or other
sensitive data, but this possibility cannot be excluded on
all platforms and library versions.
If certificates are generated using user-specified contents
(as opposed to the CA specifying all fields) then they will
be less resistant to hash collision attacks. Fortunately,
such attacks are not currently considered practical for the
SHA family of hashes used to sign these certificates.
5. Credit
This issue was privately reported by Mateusz Kocielski on
January 26, 2011.
6. Fix
OpenSSH 5.8 contains a fix for this vulnerability. Users who
prefer to continue to use OpenSSH 5.6 or 5.7 may apply this
patch:
Index: key.c
===================================================================
RCS file: /cvs/src/usr.bin/ssh/key.c,v
retrieving revision 1.95
diff -u -r1.95 key.c
--- key.c 10 Nov 2010 01:33:07 -0000 1.95
+++ key.c 3 Feb 2011 06:52:33 -0000
@@ -1823,8 +1823,8 @@
buffer_put_cstring(&k->cert->certblob, key_ssh_name(k));
/* -v01 certs put nonce first */
+ arc4random_buf(&nonce, sizeof(nonce));
if (!key_cert_is_legacy(k)) {
- arc4random_buf(&nonce, sizeof(nonce));
buffer_put_string(&k->cert->certblob, nonce, sizeof(nonce));
}
More information about the openssh-unix-dev
mailing list