Вразливість у SSL клієнті Ruby, яка може дозволити зловмисникам man-in-the-middle
підробляти SSL сервери через дійсний сертифікат, виданий довіреним
центром сертифікації.

Цій вразливості присвоєно ідентифікатор CVE CVE-2013-4073.

## Резюме

SSL клієнт Ruby реалізує перевірку ідентичності імені хоста, але він не
правильно обробляє імена хостів у сертифікаті, які містять null байти.

## Деталі

`OpenSSL::SSL.verify_certificate_identity` реалізує перевірку ідентичності сервера RFC2818
для SSL клієнта Ruby, але він не правильно обробляє
імена хостів у розширенні subjectAltName X509, які містять null байти.

Існуючий код у `lib/openssl/ssl.rb` використовує `OpenSSL::X509::Extension#value`
для витягування ідентичності з subjectAltName. `Extension#value` залежить від
функції OpenSSL `X509V3_EXT_print()`, і для dNSName subjectAltName він
використовує `sprintf()`, яка відома як небезпечна для null байтів. В результаті
`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 клієнт, дозволяє видати серверний сертифікат
, який має null байт у subjectAltName, віддалені зловмисники можуть отримати
сертифікат для 'www.ruby-lang.org\0.example.com' від CA, щоб підробити
'www.ruby-lang.org' та зробити атаку man-in-the-middle між SSL клієнтом Ruby
та SSL серверами.

## Зачеплені версії

 * Всі версії ruby 1.8 до ruby 1.8.7 рівня патчу 374
 * Всі версії ruby 1.9 до ruby 1.9.3 рівня патчу 448
 * Всі версії ruby 2.0 до ruby 2.0.0 рівня патчу 247
 * до ревізії trunk 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)
