Heartbleed — ошибка (переполнение буфера) в криптографическом программном обеспечении OpenSSL, позволяющая несанкционированно читать память на сервере или на клиенте, в том числе для извлечения закрытого ключа сервера. Информация об уязвимости была опубликована в апреле 2014 года, ошибка существовала с конца 2011 года.
Ошибка была в TLS Heartbeat, несложном расширении TLS. TLS — протокол представления данных поверх TCP или UDP, рассчитанный, однако, только на непрерывный поток данных. Если же обмен данными состоит из запросов и ответов, появляется возможность определять какую-то информацию по активности связи, да и после длинного простоя надо будет заново устанавливать TLS-соединение. Чтобы справиться с проблемой, компьютеры «перебрасываются» туда-сюда пакетом случайной длины, и этим поддерживают связь в активном состоянии и «зашумляют» канал.
Heartbeat-пакет состоит из данных, которые сервер должен вернуть в неизменном виде (это гарантирует, что сервер расшифровывал пакет), и случайных заполняющих байтов. OpenSSL не проверял корректность этого пакета: возможен, например, пакет длиной 16 байт, в котором написано, что длина данных 64 килобайта (поле размера двухбайтовое). Подверженные ошибке версии OpenSSL выходили за пределы буфера и передавали клиенту столько памяти, сколько он запросил, позволяя атакующему получать не предназначенные для этого данные. RFC предписывает не отвечать на такие «отравленные» пакеты.
Через heartbleed нельзя извлечь какой-то конкретный блок памяти. Однако злоумышленники могут повторять атаку ещё и ещё раз, пока в ответном пакете не попадутся конфиденциальные данные сервера или пользователей. Попасться может всё, что угодно: начиная от закрытого ключа сервера, который сможет позволить атакующему расшифровывать текущий или сохранённый трафик с помощью атаки man-in-the-middle, и заканчивая чьими-то cookie, запросами и ответами, которые позволят взломать случайного пользователя. На момент объявления, полмиллиона (около 17 %) защищённых веб-сайтов предполагаются уязвимыми
OpenSSL 1.0.2-beta OpenSSL 1.0.1 — OpenSSL 1.0.1f
(Если не установлен патч для CVE-2014-0160, не меняющий версии библиотеки. Такой патч доступен, например, для Debian, Red Hat Enterprise Linux (включая производные типа CentOS или Amazon Linux), Ubuntu (включая производные типа Linux Mint), Suse Linux Enterprise Server и OpenSUSE.
Системным администраторам рекомендуется либо использовать OpenSSL 1.0.1g, либо перекомпилировать библиотеку OpenSSL с ключом -DOPENSSL_NO_HEARTBEATS, отключая уязвимое расширение до тех пор, пока не представится возможным обновить ПО. Несмотря на то, что наложение патча решает проблему, запущенные приложения будут использовать подгруженный и ещё уязвимый код OpenSSL, пока каждое из приложений не будет перезапущено, позволяя подгрузить исправленный код. Так как все использованные уязвимой версией OpenSSL сертификаты и пароли могут считаться скомпрометированными, все закрытые ключи должны быть перевыпущены и все пароли сменены.
В день обнаружения уязвимости Tor Project выпустил уведомление, советующее всем желающим «надёжной анонимности или приватности в Интернете» «держаться подальше от Интернета несколько дней, пока всё не утрясётся». Владельцы сайтов и платформ советуют своим пользователям сменить пароли.