Баг в реализации heartbeat в openssl

Apr 08, 2014 13:08

Серьёзный такой, говорят, позволяет вытянуть до 64 килобайт памяти (за одну попытку, а попыток в одной сессии можно проделать сколь угодно много) из подключённого по SSL клиента или сервера. А там могут лежать ключи в открытом виде ( Read more... )

ssl, уязвимость, encryption

Leave a comment

Comments 14

ex_leo_sosn April 8 2014, 13:04:37 UTC
не понимаю как это работает, например

вот взять опенвпн, на него это влияет или нет, если опенвпн использует уязвимую опенссл?

Reply

dil April 8 2014, 13:08:18 UTC
What is leaked primary key material and how to recover?

These are the crown jewels, the encryption keys themselves. Leaked secret keys allows the attacker to decrypt any past and future traffic to the protected services and to impersonate the service at will. Any protection given by the encryption and the signatures in the X.509 certificates can be bypassed.

Reply

ex_leo_sosn April 8 2014, 13:16:50 UTC
значит аффектед

побежал всё менять

Reply

ex_leo_sosn April 8 2014, 13:28:18 UTC
wait a second, это описание того, что можно изъять из скомпрометированной системы. Но неясен сам механизм компрометации. Я не знаю как используется опенссл для ссл на линуксе, в опенвпн она используется для генерации сертификатов. Значит ли это, что кто-то может влезть в ВПН канал?

Reply


ximaera April 8 2014, 14:02:31 UTC
> позволяет вытянуть до 64 килобайт памяти
> из подключённого по SSL клиента или сервера.

Это за один раз. А heartbeat'ов можно сгенерировать сколько угодно. На загруженном сервере выделяемый OPENSSL_malloc() указатель куда только не может попасть.

Reply

dil April 8 2014, 14:06:13 UTC
Кстати да. Спасибо, щас подправлю.

Reply


ximaera April 8 2014, 14:49:30 UTC
Ну и, собственно, анализ бага на основе анализа патча. Слово "говорят" из статьи можно убрать -- действительно позволяет, зараза :-)

Вкратце: приходит heartbeat вида [n|data], где n -- это uint16, обозначающий длину data. libssl кладёт data в кучу, составляет обратный пакет, кладёт туда из кучи n байт по указателю на data и отсылает (то есть, в нормальной ситуации, просто отсылает полученную data обратно). Проверку на n == len(data) никто не делал, поэтому, если n = 65535, а data = [], то отсылается просто 65535 байт из кучи, откуда Богmalloc(3) пошлёт.

Reply


Leave a comment

Up