[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