Un fallo en OpenSSL de hace un año podría no estar completamente reparado

Hace ahora justo un año, aparecían las versiones 0.9.7l y 0.9.8d de OpenSSL para paliar cuatro problemas de seguridad.

Tavis Ormandy y Will Drewry, de Google se acreditaban como descubridores de un serio problema en la función SSL_get_shared_ciphers que permitía la ejecución de código arbitrario. Se ha descubierto que el problema podría no estar completamente solucionado.

OpenSSL es un desarrollo “Open Source” que implementa los protocolos SSL y TLS, y que es utilizada por multitud de programas, tanto para implementar dichos protocolos (por ejemplo, HTTPS) como para emplear sus componentes criptográficos individuales (funciones de cifrado y “hash”, generadores de claves, generadores pseudoaleatorios, etc).

Entre los cuatro errores de seguridad solucionados hace un año, existía un desbordamiento de memoria intermedia en la función SSL_get_shared_ciphers, utilizada por exim y mysql, por ejemplo. Un atacante podría enviar datos especialmente manipulados que harían que la memoria se desbordara, cabiendo la posibilidad de inyección ilimitada y ejecución de código. Moritz Jodeit afirma que el parche aplicado entonces no soluciona por completo el problema.

Al parecer, el investigador ha descubierto que aunque efectivamente se ha eliminado la posibilidad de provocar un desbordamiento de bufer ilimitado, el parche todavía permite un desbordamiento “off by one”, que (aunque de forma más compleja) todavía podría permitir la ejecución remota de código si la aplicación utiliza la función vulnerable SSL_get_shared_ciphers.

Moritz Jodeit se puso en contacto con la organización responsable de openSSL en junio, y el desde el día 19 de septiembre existe una solución en el CVS, para la rama OpenSSL_0_9_8-stable, aunque todavía no se ha publicado una nueva versión oficial que solucione el fallo. Algunas distribuciones ya han comenzado a distribuir paquetes precompilados que solucionan la vulnerabilidad.

Las aplicaciones vulnerables son las que utilicen la función SSL_get_shared_ciphers de la librería OpenSSL hasta la versión 0.9.7m y 0.9.8e, incluyendo ambas.