Existe una vulnerabilidad severa en la implementación OpenSSL de la extensión
TLS/DTLS (transport layer security protocols) heartbeat (`RFC6520`).
Esta vulnerabilidad es muy severa y se le ha asignado el identificador
[CVE-2014-0160](https://www.cve.org/CVERecord?id=CVE-2014-0160).

La explotación de esta vulnerabilidad puede llevar a la revelación de el
contenido de la memoria del servidor al cliente y del cliente hacia el servidor.
Cualquier atacante puede obtener de manera remota información sensible de la
memoria, incluyendo, y sin limitarse a llaves secretas usadas para el cifrado
SSL y tokens de autenticación.

Para mas información de los ataques ir a [heartbleed.com](http://heartbleed.com).

## ¿Cómo afecta esto a Ruby?

Ruby se considera afectado cuando ha sido compilado estáticamente a alguna
versión vulnerable de OpenSSl a través de la extensión OpenSSL de C estándar.

Las versions de OpenSSL 1.0.1 a 1.0.1f (inclusiva) son vulnerables a este ataque.
Para verificar que versión de la librería OpenSSL está siendo ligada dinámicamente a Ruby,
ejecuta lo siguiente:

<figure class="highlight"><pre><code class="language-sh" data-lang="sh">ruby <span class="nt">-v</span> <span class="nt">-ropenssl</span> <span class="nt">-rfiddle</span> <span class="nt">-e</span> <span class="s1">'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'</span></code></pre></figure>

Para verificar la versión de OpenSSL instalada con Ruby, ejecuta lo siguiente:

<figure class="highlight"><pre><code class="language-sh" data-lang="sh">ruby <span class="nt">-ropenssl</span> <span class="nt">-e</span> <span class="s1">'puts OpenSSL::OPENSSL_VERSION'</span></code></pre></figure>

Puedes verificar si tu software cliente o algún servicio es vulnerable utilizando
[este script por emboss](https://github.com/emboss/heartbeat).

## Soluciones

Para actualizar a la versión más actual de OpenSSL `1.0.1g` o más nueva,
debes usar el manejo de paquetes de tu sistema operativo para asegurarte
de que proveen una versión actualizada de OpenSSL. Puede que necesites
consultar con tu distribuidor de sistema operativo para verificar que la
versión de OpenSSL que utilizan está parchada, sin importar el número de
versión disponible.

Si actualizar no es una opción, recompila una versión parchada de OpenSSL
con la opción `-DOPENSSL_NO_HEARTBEATS`.

Con la versión actualizada de OpenSSL se recomienda recompilar Ruby para
asegurarse de que no hay relación con la versión vulnerable de OpenSSL.

Esto significa actualizar cualquier herramienta que se utiliza para compilar
Ruby como RVM o ruby-build. Si tu compilaste Ruby, utiliza la opción `--with-openssl-dir`
al momento de compilar para ligar al directorio con la versión actualizada de OpenSLL.

<figure class="highlight"><pre><code class="language-sh" data-lang="sh"><span class="nv">$ </span>./configure <span class="nt">--with-openssl-dir</span><span class="o">=</span>/path/to/openssl
<span class="nv">$ </span>make
<span class="nv">$ </span>make <span class="nb">install</span></code></pre></figure>

Después de actualizar OpenSSL y Ruby, es importante reiniciar todos los programas
que estén utilizando la versión vulnerable.

Muchas distribuciones de sistemas operativos ya proveen (o pronto lo harán) versiones
parchadas y paquetes recompilados de las librerías vulnerables a este ataque. Es
importante mantenerte al tanto de las noticias de tu sistema operativo para
asegurarte de que tus servidores están seguros.
