Опубликовал nahi 27-06-2013
Перевел: gazay
Уязвимость в SSL клиенте Ruby, которая может позволить man-in-the-middle (человек-посередине) атаки, чтобы обмануть SSL сервера через использование валидного сертификата, выданного доверенным центром сертификации.
Этой уязвимости был назначен CVE идентификатор CVE-2013-4073.
Суммарно
SSL клиент Ruby проводит проверку имени хоста, но он не может верно отсеивать хосты в сертификатах, которые содержат ноль байт.
Детали
OpenSSL::SSL.verify_certificate_identity
воспроизводит RFC2818
проверку сервера для SSL клиента Ruby, но он не верно отсеивает хосты в
subjectAltName X509 расширении, которое содержит ноль байт.
Существующий код в lib/openssl/ssl.rb
использует OpenSSL::X509::Extension#value
для получения идентификации от subjectAltName. Extension#value
зависит
от функции OpenSSL X509V3_EXT_print()
и для dNSName из subjectAltName она утилизирует
sprintf()
, что известно, как “null byte unsafe”. Как результат,
Extension#value
возвращает ‘www.ruby-lang.org’, если subjectAltName
равно ‘www.ruby-lang.org\0.example.com’ и OpenSSL::SSL.verify_certificate_identity
неверно идентифицирует сертификат, как один из сертификатов для ‘www.ruby-lang.org’.
Когда CA, который проверен клиентом SSL, разрешает запросить сертификат сервера, который имеет ноль байт в subjectAlnName, удаленные злоумышленники могут получить сертификат для ‘www.ruby-lang.org\0.example.com’ из CA, чтобы обмануть ‘www.ruby-lang.org’ и сделать атаку человек-посредине между SSL клиентом Ruby и SSL серверами.
Затронутые версии
- Все версии ruby 1.8 до ruby 1.8.7 patchlevel 374
- Все версии ruby 1.9 до ruby 1.9.3 patchlevel 448
- Все версии ruby 2.0 до ruby 2.0.0 patchlevel 247
- транк до ревизии 41671
Решение
Всем пользователям рекомендуется обновиться до Ruby 2.0.0-p247, 1.9.3-p448 или 1.8.7-p374.
Благодарность
Уязвимость обнаружил William (B.J.) Snow Orvis и координировал через security@ruby-lang.org David Thiel из iSec Partners.
История
- Оригинал опубликован 2013-06-27 11:00:00 (UTC)