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

Igor Sysoev is at rambler-co.ru
Mon Nov 9 14:50:52 MSK 2009


On Mon, Nov 09, 2009 at 02:08:00PM +0300, Maxim Dounin wrote:

> Hello!
> 
> On Mon, Nov 09, 2009 at 01:26:17PM +0300, Igor Sysoev wrote:
> 
> > On Mon, Nov 09, 2009 at 01:10:27PM +0300, Maxim Dounin wrote:
> > 
> > > Hello!
> > > 
> > > On Mon, Nov 09, 2009 at 11:02:17AM +0300, Igor Sysoev wrote:
> > > 
> > > > On Mon, Nov 09, 2009 at 04:40:45AM +0300, Maxim Dounin wrote:
> > > > 
> > > > > Hello!
> > > > > 
> > > > > [...]
> > > > > 
> > > > > > > Думаю, правильным решением будет просто дропать соединение в 
> > > > > > > ngx_ssl_info_callback() по прописанному в патче условию.
> > > > > > 
> > > > > > Новый патч, который делает это.
> > > > > 
> > > > > Новый патч.  На этот раз renegotiation запрещён только для 
> > > > > серверных соединений.
> > > > > 
> > > > > Для клиентских соединений не трогаем, ибо это без нужды ломает 
> > > > > proxy_pass на https бекенды сконфигурированные для запроса 
> > > > > сертификатов через renegotiation (e.g. Apache + per-location 
> > > > > SSLVerifyClient).  Без нужды - потому как сертификат бекенда nginx 
> > > > > всё равно не проверяет.
> > > > > 
> > > > > Следует иметь ввиду что использование openssl 0.9.8l на любой из 
> > > > > сторон подобные конфигурации так или иначе сломает.
> > > > 
> > > > Я думаю, можно запрещать renegotiation для всего, поскольку сам
> > > > nginx тоже не используется клиентский сертификат при работе с бэкендом.
> > > 
> > > Проблема в том что в результате nginx просто не может работать с 
> > > бекендами, на которых сказано:
> > > 
> > > ...
> > > SSLVerifyClient      none
> > > 
> > > <Location /test/>
> > > SSLVerifyClient      optional
> > > </Location>
> > > ...
> > > 
> > > Про попытке запроса к /test/ апач запрашивает renegotiation - и 
> > > привет.  Причём соединение виснет и по info callback'у это не 
> > > ловится.  IMHO нет смысла ломать без нужды.
> > 
> > Ну так "SSLVerifyClient optional" всё равно работать не будет 
> > и без запрета renegotiation у всех участников.
> 
> Не будет в том смысле что сертификата не случится.  А доступ к 
> соответствующим ресурсам - будет.  Запрет на renegotiation доступ 
> ломает.
> 
> > > p.s. Для серверных соединений ещё теоретически остаётся проблема 
> > > Server Gated Certs (SGC) при работе со старыми браузерами с 
> > > экспортными ограничениям, но вот на это IMHO стоит забить.
> > 
> > Насколько я понимаю, SGC работает без renegotiation.
> 
> Если верить README.GlobalID из поставки mod_ssl - он renegotiation 
> использует при первом запросе, проделывая его сразу после 
> исходного handshake'а (если видит сертификат с нужным 
> extKeyUsage).  В последующих запросах renegotiation не 
> используется.
> 
> Я не смог под рукой найти ни одного браузера с экспортными 
> ограничениями - так что сам не проверял... :)

Полный renegotiation происходит только при Netscape International
Setp-Up. Во время SGC nginx увидит завершённый handshake только
уже после дополнительного renegotiation.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list