Серьезная уязвимость в OpenSSL в расширении TLS Heartbeat (CVE-2014-0160)

В реализации OpenSSL обнаружена серьезная уязвимость в расширении heartbeat (RFC6520) TLS/DTLS (протоколов защиты транспортного уровня). Этой уязвимости присвоен номер CVE-2014-0160.

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

Дальнейшую информацию об атаках можно прочитать на heartbleed.com.

При чем тут Ruby?

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

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

ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'

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

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

Так же можно использовать этот скрипт для проверки на узявимость приложений и сервисов.

Что делать?

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

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

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

$ ./configure --with-openssl-dir=/путь/к/openssl
$ make
$ make install

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

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