versiones - ¿Cómo puedo asegurarme de que Ruby utiliza un OpenSSL no vulnerable a Heartbleed?
versiones de openssl (2)
Después de hacer algunas preguntas en otro lado , mi comprensión actual es la siguiente:
- OpenSSL nunca se compila junto con Ruby; A Ruby simplemente se le dice, en tiempo de compilación, dónde buscar OpenSSL.
-
ruby -r rbconfig -e ''puts RbConfig::CONFIG["configure_args"]''
debería indicarle dónde buscará Ruby varios ejecutables, incluido OpenSSL - Lo único que importa es que la copia de OpenSSL en esa ubicación esté actualizada; cd allí y use la
./openssl version
para averiguarlo. -
ruby -v -ropenssl -rfiddle -e ''puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)''
debería dar la misma respuesta que ejecutar laopenssl version
directamente porque en realidad pregunta la copia de OpenSSL que está usando Ruby para informar su número de versión -
OpenSSL::OPENSSL_VERSION
puede estar desactualizado; informa la versión que encontró cuando se compiló.
Siguiendo el error de Heartbleed, esta publicación en ruby-lang.org describe cómo verificar la vulnerabilidad y la actualización.
Incluye este consejo:
Para verificar qué versión de la biblioteca OpenSSL enlaza con Ruby, use lo siguiente:
ruby -v -ropenssl -rfiddle -e ''puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)''
Para verificar la versión de OpenSSL actualmente instalada con Ruby, use lo siguiente:
ruby -ropenssl -e ''puts OpenSSL::OPENSSL_VERSION''
¿Cuál es la diferencia entre estas dos comprobaciones y qué acción se recomienda si se devuelve una versión incorrecta de cualquiera de los comandos?
Es posible tener múltiples versiones de OpenSSL instaladas en su sistema. Estas dos pruebas te dicen qué versión se vincularía con tu Ruby si hicieras una compilación, y también qué versión está realmente vinculada en el Ruby que estás usando actualmente.
Como ejemplo, digamos que todavía está usando Ruby 1.9.3, y lo instaló / compiló el año pasado. Se habría vinculado con la versión de OpenSSL que había instalado en ese momento. Mientras tanto, actualizó su versión de OpenSSL (utilizando Homebrew , por ejemplo), en respuesta al problema de Heartbleed.
Si ejecutó la primera prueba, obtendría OpenSSL 1.0.1g, la versión actual vinculada que acaba de actualizar.
Si ejecutó la segunda prueba, revelaría que su copia de Ruby probablemente aún esté vinculada a la copia más antigua y vulnerable de OpenSSL.
A modo de ejemplo, usaré la salida de mi propio sistema (Mac OSX 10.9):
Resultados en el sistema Ruby (2.0.0):
[~] $ ruby -v -ropenssl -rfiddle -e ''puts Fiddle::Function.new(Fiddle.dlopen(nil ["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)''`
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/openssl/ssl.rb:10 1: warning: assigned but unused variable - id
OpenSSL 0.9.8y 5 Feb 2013
[~] $ ruby -ropenssl -e ''puts OpenSSL::OPENSSL_VERSION''
OpenSSL 0.9.8y 5 Feb 2013
Resultados en Ruby 2.1.1p76 (administrado por rbenv, pero podría ser RVM u otro):
[~] $ ruby -v -ropenssl -rfiddle -e ''puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)''
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
OpenSSL 1.0.1g 7 Apr 2014
[~] $ ruby -ropenssl -e ''puts OpenSSL::OPENSSL_VERSION''
OpenSSL 1.0.1g 7 Apr 2014
Como puede ver, el ruby del sistema está vinculado al OpenSSL
incluido con OS X, y aún no ha sido parcheado por Apple. Ruby 2.1.1 Reconstruí después de usar Homebrew
para actualizar mi instalación de OpenSSL
.
[~] $ brew list openssl
/usr/local/Cellar/openssl/1.0.1g/bin/openssl
/usr/local/Cellar/openssl/1.0.1g/bin/c_rehash
/usr/local/Cellar/openssl/1.0.1g/include/openssl/ (75 files)
/usr/local/Cellar/openssl/1.0.1g/lib/libcrypto.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.1g/lib/libssl.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.1g/lib/engines/ (12 files)
/usr/local/Cellar/openssl/1.0.1g/lib/pkgconfig/ (3 files)
/usr/local/Cellar/openssl/1.0.1g/lib/ (4 other files)
/usr/local/Cellar/openssl/1.0.1g/share/man/ (1126 files)
Primero asegúrese de tener el OpenSSL más reciente, si está utilizando Homebrew , simplemente use:
brew upgrade openssl
.
Además, asegúrese de eliminar las versiones anteriores de OpenSSL con brew cleanup openssl
No recomiendo parchear el sistema Ruby, es mejor utilizar un administrador de versiones Ruby, como rbenv o RVM . Después de actualizar su SSL, elimine y reconstruya las versiones de Ruby que usa siguiendo las instrucciones normales de compilación / instalación para su administrador de versiones.