Escándalo en la casa OpenSSL

Hoy me enteré de una historia de intriga, drama y terror; producto de un viejo bug que fue expuesto hace unos días. Se trata del famoso “Hearthbleed” en el proyecto OpenSSL.

Probablemente ya hayas leído sobre el tema, pero si no, acá tienes una breve explicación a como lo he captado.

La raíz del problema

OpenSSL es sin duda uno de los proyectos más populares en el mundo. Se estima que el 66% de los servidores Web en Internet corren Apache, quien usa el proyecto para proteger los canales de comunicación. Pero no solo se emplea para esto, también los servidores de correo electrónico, mensajería instantánea y un buen número de aplicaciones más, hacen uso de esta herramienta.

La librería está escrita en C, lo cual no es necesariamente malo. El problema radica en un descuido por parte del desarrollador al trabajar con una rutina que copia datos sin antes validarlos. Es decir, el problema no está en el diseño del protocolo, sino en la implementación.

El “Heartbeat” es una extensión relativamente nueva que brinda a TLS la capacidad de manejar un sistema de comunicación sin “desconexión”. Es decir, no cierra la conexión por completo con el servidor, lo que permite reutilizar algunos recursos importantes.

Durante un proceso de validación en esta extensión, el cliente manda un paquete con cierta información al servidor (el “payload”). Como es costumbre en estos protocolos, este paquete indica en la cabecera el tamaño de la sección de datos, la rutina los extrae y más adelante vuelve a colocar. El problema radica en que no se validaba que la sección de datos tuviese “datos”.

En otras palabras, un atacante podía mandar un paquete con el tamaño máximo (64K) en la cabecera, pero sin datos. El servidor tomaba la instrucción y copiaba esos 64K de la memoria y (entre otras cosas) se los devolvía al cliente. Bárbaro.

La solución y el caos en las empresas

Como dice la expresión, “más puestos que un calcetín” la solución llegó pronto y es cuestión de actualizar el software de nuestros servidores para estar protegidos de nueva cuenta. Pero esto no resuelve de todo este problema.

Resulta que esta falla no deja rastro en el sistema, por tanto no es posible determinar si nuestro servidor está comprometido.

Algunos aseguran que el servidor copia hasta 64K de basura en la memoria, y que resulta muy difícil que entre esos datos se encuentre información importante.

Otros aseguran que por la forma en la que se administran los bloques grandes de memoria, es posible que hubiese un filtrado de información importante.

Algunos más incluso renovarán sus certificados, contraseñas y demás credenciales. Bien dicen por ahí, no está de más ser precavidos.

Referencias

The Heartbleed Bug (inglés)
Diagnosis of the OpenSSL Heartbleed Bug (inglés)

Regálame un comentario