¿Podría ser vulnerable el enlace bcrypt-ruby?

5

Al desarrollar una aplicación Ruby on Rails utilizando una biblioteca de autenticación comúnmente llamada dispositivo , noté por el prefijo $2a$ de los hashes de contraseña producidos en la base de datos de la aplicación que está usando una variante de bcrypt.

Leí sobre crypt y bcrypt en Wikipedia y noté que hay nuevas variantes de Se supone que bcrypt produce un prefijo de $2y$ porque una implementación que no es de OpenBSD por alguien llamado Solar Designer tuvo un "defecto de seguridad importante" en 2011 y, por lo tanto, no está claro si el $2a$ hashes fue producido por una implementación segura. / p>

Descubrí que el dispositivo está utilizando un enlace de C y Java llamado bcrypt-ruby que de hecho agrupa a Implementación en C copiada de John the Ripper , que se afirma que está escrito por un Diseñador Solar. Ahora me pregunto si esta implementación aún puede ser vulnerable a esta "falla de seguridad importante".

¿Alguien puede aclarar este tema?

Actualizar:

El historial de versiones del archivo en la cripta El repositorio del proyecto John the Ripper , del cual parece haberse originado el archivo, puede ayudar a responder mi pregunta.

    
pregunta aef 24.02.2012 - 16:09
fuente

2 respuestas

6

El código al que te refieres ha sido corregido. Si revisa la fuente en Github frente a solución de diferencias expuesta por Solar Designer , puede ver que la extensión de signo ha sido anotada y corregida (líneas 553 a 556).

Tenga en cuenta que a pesar de que no se recomienda el prefijo $ 2a $, tampoco lo es $ 2x $, que simplemente indica que se está utilizando la implementación con errores, aunque ahora ya lo sabe. De acuerdo con la entrada de Wikipedia, usted quiere asegurarse de que sus hashes tengan el prefijo $ 2y $. Sin embargo, esta no era la solución original según El correo electrónico del Diseñador Solar notando el problema . Esa solución simplemente aseguró que para SOLICITAR el comportamiento defectuoso (para compatibilidad con versiones anteriores), usaría explícitamente el prefijo de versión $ 2x $. Los $ 2a $ originales se retuvieron para producir un comportamiento NUEVO, CORRECTO (vea la línea 609). Por lo tanto, el código en ruby-bcrypt es correcto, pero no lo sabe explícitamente según las recomendaciones del artículo de Wikipedia.

    
respondido por el logicalscope 24.02.2012 - 16:58
fuente
5

Como se anunció en openwall , este error estaba relacionado con caracteres no ASCII con el octavo bit establecido:

  

Lo que es peor, en algunos casos (pero no en todos) uno, dos o tres   Los caracteres inmediatamente anteriores a los caracteres de 8 bits fueron ignorados por   la contraseña de cálculo hash. Así, muchas contraseñas que contienen   Los caracteres con el octavo bit establecido son significativamente más fáciles de descifrar que   se esperaba anteriormente.

Si lees el README de bcrypt-ruby, hay una nota que trata este problema.

  

Nota: las versiones de JRuby de bcrypt-ruby < = 2.1.3 tenían una vulnerabilidad de seguridad que se corrigió en > = 2.1.4. Si usó una versión vulnerable para codificar contraseñas con caracteres internacionales, deberá volver a codificar dichas contraseñas. Esta vulnerabilidad solo afectó a la gema JRuby.

Esto se aclara aquí :

  

Las versiones de jBCrypt antes de 0.3 sufrieron un error relacionado con el carácter   Codificación que redujo sustancialmente la entropía de las contraseñas con hash.   que contiene caracteres no US-ASCII. Un paso de codificación incorrecto   reemplazado de forma transparente tales caracteres por '?' antes del hashing. En el   en el peor de los casos, una contraseña que consta únicamente de caracteres no US-ASCII,   esto causaría que su hash sea equivalente a todas las demás contraseñas   de la misma longitud.

Por lo tanto, como se ha corregido en la versión jRuby de la biblioteca, supongo que también se solucionó en la versión MRI.

    
respondido por el ofeldt 24.02.2012 - 17:09
fuente

Lea otras preguntas en las etiquetas