В реализации OpenSSL обнаружена серьезная уязвимость в расширении heartbeat (`RFC6520`)
TLS/DTLS (протоколов защиты транспортного уровня). Этой уязвимости присвоен номер
[CVE-2014-0160](https://www.cve.org/CVERecord?id=CVE-2014-0160).

Использование эксплоита может привести к раскрытию содержимого при передаче
как от сервера на клиент, так и в обратном направлении. Атакующий может удаленно получить
необходимые данные из памяти, включая (но не ограничиваясь) секретные ключи для
шифрования SSL и токены авторизации.

Дальнейшую информацию об атаках можно прочитать на [heartbleed.com](http://heartbleed.com).

## При чем тут Ruby?

Ruby подвержен атаке через C extension, если собран с уязвимой версией
OpenSSL.

Уязвимы версии OpenSSL 1.0.1 - 1.0.1f (включительно).
Проверить версию, с которой слинкован Ruby можно так:

<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>

Проверить текущую установленную версию OpenSSL можно так:

<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>

Так же можно использовать [этот скрипт](https://github.com/emboss/heartbeat)
для проверки на узявимость приложений и сервисов.

## Что делать?

Во-первых, проверить, доступна ли версия `1.0.1g` или новее,
или убедиться, что текущая версия пропатчена.

Если обновиться - не вариант, можно пересобрать OpenSSL с опцией `-DOPENSSL_NO_HEARTBEATS`.

Также рекомендуется пересобрать Ruby с обновленной версией OpenSSL.
Это также значит, что стоит обновить средства сборки: RVM или ruby-build,
а если вы собирали Ruby вручную - использовать опцию сборки `--with-openssl-dir`.

<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>/путь/к/openssl
<span class="nv">$ </span>make
<span class="nv">$ </span>make <span class="nb">install</span></code></pre></figure>

После обновления не забудьте перезапустить все, что использовало уязвимую версию.

Многие дистрибутивы уже предоставили (или скоро предоставят) пропатченную версию
пакетов для уязвимых библиотек - так что следите за их новостями, чтобы не быть взломаными.
