Amalia Orúe López - Mar, 17/05/2022 - 11:00
Error en la implementación del algoritmo de la firma digital ECDSA
Como siempre explicamos a los alumnos del Máster en Ciberseguridad, aunque los algoritmos criptográficos sean seguros, porque han sido analizados por la comunidad de criptógrafos y criptoanalistas y estén estandarizados, su seguridad también dependerá de cómo se realiza su implementación. Este aspecto siempre debe revisarse con lupa. El 19 de abril de 2022 se publicó la vulnerabilidad etiquetada CVE-2022-21449 [1], se trata de una vulnerabilidad gravísima que afecta las versiones de Java 15 a 18.
El algoritmo de firma digital ECDSA [2], es el algoritmo de firma preferido en entornos con recursos limitados donde el tamaño de la clave y el consumo de energía son importantes. Como ya hemos adelantado, por un defecto de implementación del algoritmo de firma digital de curva elíptica (ECDSA- Elliptic curve Digital Signature Algorithm), un usuario malintencionado (atacante) podría construir con relativa facilidad una firma ECDSA de modo que la validación de la firma sea exitosa, sin necesidad de conocer la clave privada del firmante. Esto podría, por ejemplo, explotarse para falsificar tokens de autorización o el handshake de TLS [3], etc., y lo que es peor: podría declarar válida una firma electrónica cualificada legalmente vinculante, aunque no lo sea. Ser capaz de pasar el algoritmo de verificación de firma ECDSA sin el conocimiento de la clave privada del firmante significa que el atacante puede asumir la identidad del usuario legítimo y actuar en su nombre.
Esta vulnerabilidad, fue reportada a Oracle en noviembre de 2021 por Neil Madden, investigador de seguridad de ForgeRock. Esta vulnerabilidad fue valorada por Oracle con una puntuación de 7.5/10 en el Common Vulnerability Scoring System (CVSS). De acuerdo a lo que sabemos, es una puntuación demasiado baja dado el impacto que tendría su explotación. Oracle resolvió la vulnerabilidad en su actualización de parche crítico de Java de abril de 2022 [4]. De este modo se exhorta encarecidamente a que los que trabajen con las implementaciones de Java 15, 16, 17 o 18 a que actualicen inmediatamente sus versiones de Java.
Es preciso aclarar que no ha sido un problema de seguridad del algoritmo ECDSA, aquí ha fallado su implementación (como en muchas ocasiones, recordad el ataque ROCA al RSA en 2017 [5]). Tal y como explica el propio Neil Madden [6], esta falla de implementación se introdujo al reescribir el código ECDSA de código C ++ nativo a Java v15. Una firma ECDSA comienza por elegir un par de enteros (r,s), distintos de cero que se encuentren en el intervalo [1, n-1] donde n es un primo grande (256 bits o más) que forma parte de los parámetros públicos del algoritmo.
Pues bien, lo que sale mal en las implementaciones defectuosas de Java 15 a 18 del algoritmo de verificación de firma ECDSA, es que la propiedad de que tanto r como s sean distintos de cero no se verifica. Así, el algoritmo de verificación acepta (r,s) = (0,0) como una firma ECDSA válida en cualquier mensaje m. El hecho de que este error no haya sido detectado sugiere que no se realizaron pruebas suficientes del código, ni se supervisó convenientemente este proceso.
Moraleja: siempre hay que cuidar muy bien y supervisar las implementaciones de los algoritmos criptográficos, porque en muchas ocasiones resultan ser el eslabón más débil que nos lleva a un fallo de seguridad monumental.
Referencias
[1] NIST, «NVD - CVE-2022-21449», NATIONAL VULNERABILITY DATABASE, 2022. [En línea].
[2] Centro Criptológico Nacional CCN-CERT, «Guía de Seguridad de las TIC CCN-STIC-807 - Criptología de Empleo en el Esquema Nacional de Seguridad», 2017.
[3] K. Nassar, «CVE-2022-21449 Proof of Concept», GitHub, 2022. [En línea]. [Accedido: 02-may-2022].
[4] Oracle, «Oracle Critical Patch Update Advisory», Oracle Technology Network, 2022. [En línea]. [Accedido: 03-may-2022].
[5] Hispasec, «ROCA: descubierta grave vulnerabilidad en la librería de claves RSA Infineon», Una al Día, 2017. [En línea]. [Accedido: 02-may-2022].
[6] N. Madden, «A few clarifications about CVE-2022-21449», 2022. [En línea]. [Accedido: 02-may-2022].
Editor: Universidad Isabel I
ISSN 2792-1794
Burgos, España
Añadir nuevo comentario