[PATCH] Disable SSL renegotiation (CVE-2009-3555).

Maxim Dounin mdounin at mdounin.ru
Fri Nov 6 23:35:56 MSK 2009


Hello!

On Fri, Nov 06, 2009 at 07:54:01PM +0300, Igor Sysoev wrote:

> On Fri, Nov 06, 2009 at 05:41:11PM +0300, Maxim Dounin wrote:
> 
> > Hello!
> > 
> > On Fri, Nov 06, 2009 at 04:49:18PM +0300, Igor Sysoev wrote:
> > 
> > > On Fri, Nov 06, 2009 at 04:28:52PM +0300, Maxim Dounin wrote:
> > > 
> > > > Hello!
> > > > 
> > > > Патч, запрещающий ssl renegotiation для старых версий openssl 
> > > > (ссылок по теме есть в самом патче если кто ещё не читал, ну и в 
> > > > гугле наливают).
> > > > 
> > > > Я проверил это на openssl 0.9.7e (из freebsd 6.2), и текущем 
> > > > 0.9.8l (где renegotiation недоступна по умолчанию).  Делает вид 
> > > > что работает.
> > > > 
> > > > Если кто-то потестирует - будет замечательно.
> > > 
> > > Спасибо. У меня renegotiating в openssl клиенте не происходит и клиент
> > > ничего не хочет принимать. Насколько я понимаю, это проблема клианта
> > > openssl:
> > 
> > [...]
> > 
> > Оно игнорирует ClientHello пакет, в результате клиент ждёт 
> > таймаута.  По хорошему там надо бы послать обратно alert про 
> > NO_RENEGOTIATION, но я не нашёл способа это нормально сделать.
> > 
> > В моих тестах openssl 0.9.8l (с запрещённым из коробки 
> > renegotiation) ведёт себя точно так же (без моего патча).
> 
> По идее, это должна делать сама OpenSSL по флагу
> SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS, но судя по исходникам,
> она в этом случае просто ничего не делает.

Именно так, должен.  Но не.

Вообще по здравому размышлению и дополнительному 
инструментированию - патч негодный, равно как и собственно openssl 
0.9.8l.  Оно не позволяет случится renegotiation только потому что 
openssl утыкается в EAGAIN на чтении.  А утыкается - судя по всему из-за 
того что разваливает свой стейт в неконсистентное состояние.

Думаю, правильным решением будет просто дропать соединение в 
ngx_ssl_info_callback() по прописанному в патче условию.

Maxim Dounin





More information about the nginx-ru mailing list