"Cuando la cubierta negra se desvaneció por un momento, Margarita se dio la vuelta y vio que no solo no había torres coloridas con un avión desplegándose sobre ellas, sino que hace mucho tiempo que la ciudad misma había caído al suelo y había dejado solo niebla".
M.A. Bulgakov
"Maestro y Margarita"Hola Habr! Probablemente, casi todas las organizaciones rusas tienen estos productos en una alegre coloración multicolor. Estamos hablando de productos y software JaCarta para ellos. Tal felicidad también me cayó a mí, y decidí expandir ligeramente la cubierta negra ocultando su esencia, o API. Algunos bancos, especialmente la emisión de tokens JaCarta GOST-2 a sus clientes, requieren la instalación de la aplicación JC-WebClient de Aladdin R.D. para funcionar.
Aunque no hay una nueva distribución en el sitio web oficial del desarrollador (en la sección de demostración puede descargar una versión anterior, pero utiliza la API desactualizada), la distribución se puede encontrar usando Google en la línea "JC-WebClient-4.0.0.1186" en los sitios de RB.
Después de instalar la aplicación en la computadora del usuario, se abre el puerto 24738 en el que funciona este cliente.
https://localhost:24738/JCWebClient.js
El sitio web del desarrollador describe abiertamente y en detalle la API de esta aplicación (así como las funciones de trabajar con el sistema de archivos de toda la línea de tokens de este fabricante a través de jcFS.dll, que forma parte del paquete de instalación "JaCarta Single Client") y la conclusión es que utilizando una serie de funciones puede firme la firma digital del token con cualquier cosa, recoja un código PIN o bloquee el token con intentos fallidos de ingresarlo. Y todo esto de forma remota a través de Internet.
No es ningún secreto que los usuarios a menudo dejan el código PIN predeterminado para el token, o con el que lo recibieron (generalmente tienen miedo de que al cambiar el código PIN todo deje de funcionar).
La mayoría de las veces, se utilizan códigos PIN del tipo 123456, y el token se inserta en el puerto de la computadora o en el hub usb durante el día laborable, o incluso durante todo el día.
Gracias a JC-WebClient, si desliza una página web o correo electrónico con JavaScript simple a dicho usuario, podrá, aunque no obtenga las claves de token (en algunos casos, esto solo es posible accediendo directamente al sistema de archivos de token,
un ejemplo ya se ha dado ), pero intente elija un código PIN, firme cualquier dato y envíelo a alguna parte.
En caso de 10 intentos fallidos de iterar, el token se bloquea y con qué frecuencia sucede esto, si no se establece el código PIN del administrador para desbloquear, solo ayudará la inicialización. Y esto no se paga en impuestos a tiempo (y como resultado de intereses e incluso de bloquear la cuenta de impuestos de la organización del impuesto), las pérdidas de los proveedores, en general, el bien no es suficiente.

El problema con la enumeración del código pin podría resolverse ya sea haciendo posible ingresarlo solo a través de la ventana de la interfaz de JC-WebClient, o como media medida, por ejemplo, en caso de 3 intentos fallidos de ingresarlo, bloquee la autorización adicional mostrando un mensaje al usuario y espere hasta que él confirmará tus acciones.
Escribí un pequeño script de prueba que muestra esta vulnerabilidad. El script funciona en todos los navegadores modernos y relativamente modernos, incluso IE :)
Naturalmente, no envía nada a ningún lado, sino que simplemente muestra los resultados de una secuencia de funciones.
¡El script implementa una enumeración completa de 10 intentos para ingresar el código pin "para matar" el token, para que pueda ejecutar el script solo con un token de prueba!
También debe recordarse que el uso de este script que no sea en su propio token de prueba es una violación de la ley.
Resultado de la prueba:

El script genera un par de claves y un certificado utilizando JC-WebClient para la prueba.
Puede usar EToken PRO Java 72 K, JaCarta GOST, JaCarta GOST-2. El token debe preinicializarse con el PIN de usuario 111111.
Antes de comenzar las pruebas, debe instalar JC-WebClient versión 4 o posterior.
Y en realidad el script de auditoría de seguridad en sí mismo:
→
Fuente de información de API JC-WebClient