| Added |
Translation |
|
Title: OpenSSL, Description: Resumen del problema: Cuando una aplicación maneja un contexto AES-OCB a través de la interfaz de un solo uso pública EVP_Cipher(), el vector de inicialización (IV) proporcionado por la aplicación es descartado silenciosamente.
Resumen del impacto: Cada mensaje cifrado bajo la misma clave utiliza el mismo nonce efectivo independientemente del IV proporcionado por el llamador, lo que resulta en la reutilización de (clave, nonce) y la pérdida de confidencialidad. Si la misma ruta de código se utiliza para calcular la etiqueta de autenticación, la etiqueta depende solo del par (clave, IV) y no del texto plano o del texto cifrado, lo que permite la falsificación universal de texto cifrado arbitrario a partir de un único mensaje capturado.
OpenSSL proporciona dos formas de manejar un cifrado: la interfaz de streaming documentada (EVP_CipherUpdate / EVP_CipherFinal_ex) y una de un solo uso de nivel inferior, EVP_Cipher(), cuya documentación recomienda explícitamente no ser utilizada por las aplicaciones en favor de EVP_CipherUpdate() y EVP_CipherFinal_ex(). El gestor de streaming del proveedor OCB vacía el IV proporcionado por la aplicación en el contexto OCB antes de procesar los datos; el gestor de un solo uso no lo hacía. Cada llamada a EVP_Cipher() en un contexto AES-OCB, por lo tanto, se ejecutaba con el estado de desplazamiento derivado de la clave todo-cero dejado por la inicialización del cifrado, independientemente del IV del llamador.
Si EVP_EncryptFinal_ex() se utiliza posteriormente para obtener la etiqueta de autenticación, la configuración diferida del IV se ejecuta en ese momento y borra la suma de verificación en ejecución que debería haberse acumulado sobre el texto plano. La etiqueta resultante es una función de (clave, IV) solamente y verifica cualquier texto cifrado producido bajo el mismo par (clave, IV).
La implementación SSL/TLS de OpenSSL no se ve afectada: AES-OCB no es una suite de cifrado TLS, y libssl no llama a EVP_Cipher() en ningún caso. Las aplicaciones que manejan AES-OCB a través de la API AEAD de streaming documentada (EVP_CipherUpdate / EVP_CipherFinal_ex) no se ven afectadas. Solo las aplicaciones que combinan el cifrado AES-OCB con la API de un solo uso EVP_Cipher() son vulnerables.
Los módulos FIPS en 4.0, 3.6, 3.5, 3.4 y 3.0 no se ven afectados por este problema, ya que AES-OCB está fuera del límite del módulo FIPS de OpenSSL.
|