Vulnerabilidad por evasión de validación del nombre de cliente de SSL (CVE-2013-4073)

Vulnerabilidad en el cliente de SSL de Ruby que puediera permitir a atacantes, utilizando la técnica de man-in-the-middle, falsificar certificados de SSL por medio de un certificado válido, expedido por una autoridad de certificados confiable.

A esta vulnerabilidad se le ha asignado el identificador CVE-2013-4073.

Resumen

El cliente SSL de Ruby implementa revisiones de identidad para las conexiones pero no maneja adecuadamente los nombres de los clientes en certificados que incluyen bytes nulos.

OpenSSL::SSL.verify_certificate_identity implementa la revisión de identidad RFC2818 en el cliente de Ruby de SSL pero no maneja apropiadamente el manejo de los nombres de cliente en la extensión subjectAltName X509 si contiene bytes nulos.

El código en lib/openssl/ssl.rb utiliza OpenSSL::X509::Extension#value para extraer la identidad del cliente de subjectAltName. Extension#value depende de la función de OpenSSL X509V3_EXT_print() y para dNSName de subjectAltName utiliza sprintf() que se conoce es insegura con bytes nulos. Como resultado de esto Extension#value regresa ‘www.ruby-lang.org’ si subjectAltName es ‘www.ruby-lang.org\0.example.com’ y OpenSSL::SSL.verify_certificate_identity identifica erronamente que el certificado es para ‘www.ruby-lang.org’.

Cuando una CA confiable para un cliente de SSL permite al servidor extender un certificado que tiene un byte nulo en subjectAltName, atacantes remotos pueden obtener el certificado para ‘www.ruby-lang.org\0.example.com’ de la CA para hacerse pasar por ‘www.ruby-lang.org’ y hacer ataques del tipo man-in-the-middle entre un cliente de Ruby de SSL y servidores de SSL.

Versiones afectadas

  • Todas las versiones de ruby 1.8 anteriores a 1.8.7-p374
  • Todas las versiones de ruby 1.9 anteriores a 1.9.3-p448
  • Todas las versiones de ruby 2.0 anteriores a 2.0.0-p247
  • todo lo anterior a la revision 41671

Solución

Se recomienda a todos los usuarios actualizar la versión de Ruby a 2.0.0-p247, 1.9.3-p448 o 1.8.7-p374.

Créditos

Esta vulnerabilidad fue encotrada por William (B.J.) Snow Orvis y coordinada con security@ruby-lang.org por David Thiel de los socios de iSEC.

Historia

  • Publicado originalmente 2013-06-27 11:00:00 (UTC)