Arnis Parsovs es uno de los investigadores independientes más influyentes en el campo de la seguridad de la identificación electrónica en Estonia. Ha descubierto y ayudado a corregir numerosas vulnerabilidades en el sistema de tarjetas de identidad de Estonia. Es razonable suponer que siguen existiendo problemas similares en otras implementaciones nacionales de identificación electrónica.
Uno de sus últimos descubrimientos publicados demuestra cómo un atacante puede iniciar sesión en cualquier sitio web protegido con la autenticación mutua de certificados de cliente TLS (mTLS). La vulnerabilidad se debía a una función que permitía firmar valores resumidos arbitrarios mediante un software de tarjetas de identificación. Este mecanismo se utilizó ampliamente como método alternativo e independiente del navegador para acceder a las funciones de las tarjetas de identificación.
Durante el protocolo de enlace mTLS, la tarjeta inteligente firma los bytes del protocolo de enlace TLS. El ataque funciona de la siguiente manera: si una víctima intenta iniciar sesión en un sitio malintencionado y ese sitio le presenta un resumen del protocolo de enlace TLS del sitio objetivo, el sitio malintencionado puede obtener una firma válida. Luego, esa firma se puede usar para autenticarse en el sitio objetivo como víctima. Un vídeo de demostración de la vulnerabilidad está disponible aquí:
https://www.youtube.com/embed/Qr638sbaZ_M
Qué hay que tener en cuenta acerca de la autenticación TLS mutua
Si bien la autenticación de certificados de cliente es relativamente fácil de implementar, requiere un conocimiento sólido de las implicaciones de seguridad subyacentes. Los desarrolladores deben tomar varias precauciones para evitar la introducción de vulnerabilidades críticas:
- Compruebe siempre el estado de validez y revocación del certificado. Utilice las CRL o las comprobaciones OCSP de forma coherente.
- Las CRL deben actualizarse con frecuencia, preferiblemente varias veces al día.
- Actualice periódicamente los certificados de CA. Los sistemas nacionales de identificación electrónica pueden rotar mensualmente los certificados raíz e intermedio.
- Tenga en cuenta que la autenticación con tarjeta de identificación firma el resumen del protocolo de enlace TLS. La tarjeta inteligente genera la firma y el servidor web (por ejemplo, Apache o NGINX) la valida mediante OpenSSL. Si es válido, el servidor pone los datos del certificado a disposición de la aplicación.
Un descuido común es no comprobar la validez del certificado. Si no se aplican las CRL o el OCSP, las tarjetas robadas o revocadas pueden seguir utilizándose para autenticarse. La integridad del sistema depende de una verificación de revocación estricta y oportuna.
El almacenamiento en caché de sesiones TLS y sus implicaciones
Como HTTP no tiene estado, los servidores web optimizan el rendimiento almacenando en caché las sesiones TLS. En Apache, la duración predeterminada de la caché de sesión SSL suele ser de 5 minutos. Esto significa que, una vez que el usuario se haya autenticado con su tarjeta de identificación y su PIN, cualquier solicitud que reciba en los próximos 5 minutos podrá reutilizar la sesión sin necesidad de un nuevo protocolo de enlace TLS. Esta sesión en caché incluye los datos del certificado del cliente.
Si la caché de sesión no está deshabilitada explícitamente, existe el riesgo de que alguien pueda acceder a la sesión autenticada sin que la tarjeta esté en el lector y sin necesidad de volver a introducir el PIN, especialmente si el usuario cierra sesión pero la sesión aún no ha caducado.
Comportamiento del almacenamiento en caché del navegador
Durante la autenticación de la tarjeta de identificación, el navegador solicita primero al usuario que elija un certificado y, a continuación, solicita el código PIN. A diferencia del PIN2 (que se utiliza para las firmas digitales), la política de certificados para la autenticación permite que el navegador almacene en caché el PIN1.
Esto significa que si inicia sesión en un sitio una vez, el siguiente intento de inicio de sesión en el mismo sitio puede reutilizar el certificado y el PIN almacenados en caché sin volver a preguntar al usuario. Si se utiliza el mismo certificado en diferentes sitios, es posible que el navegador pida que se seleccione el certificado, pero que siga utilizando el PIN almacenado en caché para la autenticación.
Esto presenta un grave riesgo: si la tarjeta inteligente se deja en el lector y se puede acceder al ordenador, otra persona podría iniciar sesión en la cuenta del usuario sin conocer el PIN. No basta con cerrar sesión; la única medida segura en los entornos compartidos es retirar físicamente la tarjeta.