La semana pasada se descubrió un interesante y grave fallo de seguridad en el paquete OpenSSL. Existía una función con la palabra reservada goto que podía aprovecharse para hacer cosas extrañas y entre otras, crear certificados SSL no válidos.
La verdad es que la primera vez que lo leí, me quedé bastante sorprendido, pues hacía años que no veía el
goto, muy famoso en lenguajes
deprecated, como pueden ser Pascal o Cobol. Pero cierto es que se usa también en lenguajes como C. Una vez apareció el bug, presente desde 2005, y la forma de explotarlo, era lógico que alguien lo hiciera. Imaginaros la sorpresa, y susto, que llevé cuando
una buena amiga me pasa este fallo que le estaba dando una
debian al intentar actualizar el listado de paquetes.
shell> apt-get update
...
W: Error de GPG: http://ftp.es.debian.org squeeze-updates Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 8B48AD6246925553
Lo primero que pensé, alguien accedió a los servidores de
es.debian.org y está haciendo cosas raras. Ya bien hayan sido hackeados o bien alguien haya conseguido redireccionar todo el tráfico a otras máquinas. Por suerte,
emplear paquetes firmados sirve de algo. Después de una búsqueda inicial y observar que el certificado de
es.debian no había sido violado, tocaba arreglar el problema.
Instalar paquetes desde servidores que no confías no es buena idea.
Comenzamos viendo el listado repositorios que tenía el servidor configurados.
shell> cat /etc/apt/sources.list
deb http://ftp.es.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb http://ftp.es.debian.org/debian/ squeeze-updates main
Los servidores era buenos y estaban bien. No había nada extraño y desde el equipo contestaba la IP que era de esperar a dicho DNS. Entonces, ¿qué es lo que podía estar pasando?
Se me ocurrió entonces ver dentro de los paquetes instalados, la versión del paquete de llaves de debian que tenía instalado. Por suerte, no hacía mucho que había actualizado un equipo a squeeze y me acordaba que ese paquete se había actualizado con nuevas claves. Así que antes de seguir pensando que hay algo extraño, vamos a lo sencillo,
shell> dpkg -l |grep debian-archive-keyring
ii debian-archive-keyring 2010.08.28 GnuPG archive keys of the Debian
He aquí el problema. La versión del paquete que está instalada no es la última. Cuando alguien actualizó ese sistema a squeeze se olvidó de actualizar uno de los paquetes más importantes. Concretamente el paquete con las nuevas llaves de los servidores. Al usar las llaves antiguas, apt daba error de clave desconocida, pues efectivamente no tenía la correcta. Para solucionarlo, actualizamos el paquete debian-archive-keyring.
shell> apt-get install debian-archive-keyring
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se actualizarán los siguientes paquetes:
debian-archive-keyring
1 actualizados, 0 se instalarán, 0 para eliminar y 96 no actualizados.
...
gpg: Cantidad total procesada: 7
gpg: importadas: 2 (RSA: 2)
gpg: sin cambios: 5
gpg: no se encuentran claves absolutamente fiables
Tras actualizar el paquete a su última versión, apt ya no da error y el funcionamiento es el esperado, ya que las claves GPG son reconocidas.
shell> apt-get update
...
Descargados 7137 kB en 4seg. (1622 kB/s)
Leyendo lista de paquetes... Hecho
Lo que fue un susto inicialmente, quedó en una breve anécdota y únicamente hizo falta actualizar uno de los paquete más sencillos y a la vez más importantes del sistema. Lo que sí, casualidades de la vida, justo pasó en el momento más inoportuno con un fallo que podía haber puesto en jaque a numerosos sistemas.