Grave vulnerabilidad en la librería openssl de Debian
Hoy actualizo y me quedo helado:
Pero es que voy a barrapunto y empiezo a sudar.
¿Significa esto que voy a tener que regenerar todas mis claves generadas con openssl?
Empiezo a hacer cuentas y son unas docenillas de servidores web, un par de redes privadas virtuales con 20 usuarios cada una ... ydigoyo ¿no podía haber elegido la noble profesión de gruísta? Porque vaya; a un gruísta no le pasan estas cosas y gana medio kilo al mes.
Y hablando de dinero. Si yo tengo una clave generada con el openssl de Debian y he pagado 200 eurillos a Verisign para que me la firme ¿significa que tengo que volver a pagar otros 200 eurillos?
¿Y si tengo 20 servidores ... 20 * 200 = 4000 eurillos?
¡¡Pues que gran cagada chicos!!
Debian sigue y seguirá siendo para mí la mejor distribución de GNU/Linux que existe y siempre la defenderé, pero las cosas como son:
jmferrerm@asociacioncli:/tmp$ sudo perl dowkd.pl file /etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_dsa_key.pub:1: weak key
jmferrerm@asociacioncli:/tmp$ sudo perl dowkd.pl file /etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub:1: weak key
jmferrerm@asociacioncli:/tmp$
¡¡Que gran cagada!!
ACTUALIZACIÓN
Esta mañana actualizo mi Ubuntu y me encuentro un paquete llamado openssl-blacklist y openvpn-blacklist:
Se puede utilizar para comprobar si nuestras claves están en la lista negra y se usa como dowkd.pl que he mencionado anteriormente:
jmferrerm@yinyan:~$ sudo /usr/sbin/openvpn-vulnkey
Usage: openvpn-vulnkey FILE [FILE]
This program checks if FILEs are known vulnerable static keys
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-q, --quiet be quiet
jmferrerm@yinyan:~$ sudo /usr/sbin/openvpn-vulnkey
Como Debian y Ubuntu son madre e hija, probablemente se pueda usar el mismo paquete para ambas así que ya tenemos herramienta de comprobación para Debian.
De todas formas no pienso comprobar nada. Yo regenero todas las claves que tengo y así me curo en salud.
ACTUALIZACIÓN 2
La conexión a la vpn falla porque los clientes Ubuntu comprueban que su clave no está en la lista negra. Si lo está no se conecta:
root@guerra:/etc/openvpn# openvpn client.cli.conf
Wed May 14 12:14:20 2008 OpenVPN 2.1_rc7 i486-pc-linux-gnu [SSL]
[LZO2] [EPOLL] built on May 13 2008
Wed May 14 12:14:20 2008 WARNING: No server certificate verification
method has been enabled. See http://openvpn.net/howto.html#mitm for
more info.
Wed May 14 12:14:20 2008 /usr/sbin/openssl-vulnkey -q
cli/keys/jmferrermandago.key
Wed May 14 12:14:21 2008 ERROR: 'cli/keys/jmferrermandago.key' is a
known vulnerable key. See 'man openssl-vulnkey' for details.
Wed May 14 12:14:21 2008 Exiting
root@guerra:/etc/openvpn#
Este, desde mi punto de vista, no es un comportamiento correcto. Debería ser un WARNING, no un ERROR. De un día para otro tu VPN deja de funcionar y no se te deja tiempo de respuesta para adoptar soluciones. En vez de eso la VPN deja de funcionar y la gente que tienes repartida fuera de la oficina deja de poder trabajar.
Muy bonito, si señor.
La solución temporal consiste en vaciar el contenido de los siguientes ficheros:
/usr/share/openssl-blacklist/blacklist.RSA-2048
/usr/share/openssl-blacklist/blacklist.RSA-1024
/usr/share/openvpn-blacklist/blacklist.RSA-2048
Por ejemplo, se puede ejecutar el siguiente comando:
for foo in /usr/share/openssl-blacklist/blacklist.RSA-2048 /usr/share/openssl-blacklist/blacklist.RSA-1024 /usr/share/openvpn-blacklist/blacklist.RSA-2048; do
sudo mv $foo $foo.original
sudo touch $foo
done
Con esto la vpn volverá a funcionar.
En cuanto a la conexión por ssh, cuando se actualize el servidor, fallarán los nuevos intentos de conexión porque las claves se han regenerado y tu cliente se dará cuenta de ello:
root@guerra:/usr/share/openssl-blacklist# ssh jmferrerm@elmanytas.is-a-geek.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
92:1d:4c:69:fa:df:11:a8:42:33:33:2a:2c:7a:6f:c3.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:2
RSA host key for elmanytas.is-a-geek.net has changed and you have requested strict checking.
Host key verification failed.
root@guerra:/usr/share/openssl-blacklist#
Pues en este caso lo único que tienes que hacer es ir al fichero .ssh/known_hosts y borrar la línea 2.
ACTUALIZACIÓN 3
Por último y más IMPORTANTE por el riesgo que supone hay que regenerar las claves que se utilizan para la autenticación por rsa, es decir, lo que usamos para no tener que poner la clave cada vez que hacemos un ssh
o un scp
.
Solo hay 164610 claves que probar (82305 por término medio) para poder conectarse por ssh a una máquina que tenga en su .ssh/authorized_hosts una clave débil.
Para comprobarlo, actualiza openssh-server
, openssh-client
y ssh
. Si ejecutas ssh-vulnkey .ssh/authorized_keys
podrás saber si tus claves están "COMPROMISED". Si es así, ya estás tardando en borrar ese fichero y utilizar claves nuevas.