El nuevo pase de movilidad permitirá entregar más libertades a las personas que hayan sido vacunadas según las dosis correspondientes.
Mucha polémica se ha generado en torno a la puesta en marcha por parte del Gobierno sobre el Pase de Movilidad en el contexto del manejo de la pandemia. Más allá de las recomendaciones de expertos, en esta publicación el objetivo es dar a conocer las falencias tecnológicas detrás de su implementación, así como algunas fallas en su diseño que descubrimos mediante algunas sencillas pruebas, y el riesgo que implica la filtración de datos personales potencialmente sensibles.
Según lo conocido hasta el momento, cada persona puede ingresar con su Clave Única (o bien registrando una cuenta de usuario con e-mail y contraseña) al sitio https://mevacuno.gob.cl/, desde donde podrá descargar su certificado de vacunación en la forma de un código QR. La idea es que, ante una eventual fiscalización, la persona muestre su QR (que puede descargar como PDF o imagen en su teléfono) y este sea escaneado, lo que retornará si es que está habilitado o no para poder transitar libremente. Hasta aquí todo bien, la barrera tecnológica es mínima: basta un teléfono con cámara para leer el QR desde otro dispositivo o incluso en papel, sin tener que recurrir a tecnologías más complejas como BTLE o NFC. El problema reside en la implementación.
Para comenzar a entender qué está mal en la implementación actual del Pase de Movilidad, es necesario entender qué es un código QR. En términos prácticos, es la representación gráfica de un texto arbitrario. Generalmente asociamos un código QR a una URL, pero puede contener cualquier texto sin que necesariamente sea una dirección de Internet. Existen herramientas disponibles online que permiten generar o leer un código QR, lo que además es capaz de realizar en forma nativa cualquier smartphone relativamente moderno.
Uno podría imaginar que la solución más obvia sería que el código QR contuviera los datos personales del usuario, más su estado de habilitación de movilidad:
Pero esta solución, además de ser insegura (ya que cualquiera podría generarlo), tiene el problema de que es estática, es decir si el estado de habilitación de una persona llegase a variar en el tiempo, el QR no reflejaría ese cambio.
Entonces la segunda solución más obvia sería que el código QR permitiera una consulta instantánea a algún servicio en línea que retorne el estado actual del usuario. Para esto existe una infinidad de alternativas, pero analicemos la escogida por la que realmente se implementó.
En este caso, el código QR efectivamente resuelve a una dirección de Internet, una URL, de la forma:
https://scanmevacuno.gob.cl/?a=123456789&b=1616000000&c=0
La persona llevando a cabo la fiscalización al escanear el código QR realizará una consulta a esta URL, la cual mostrará el estado de habilitación del usuario propietario del código. ¿Cómo sabe quién es? Porque la URL es dinámica, es distinta para cada usuario: específicamente los parámetros «a«, «b» y «c«.
Uno podría pensar que es la solución óptima, pero, por un lado, si quien realiza la fiscalización en ese momento no cuenta con una conexión a internet disponible, no la podrá llevar a cabo; y por otro nada impide que, al igual que con el QR Estático, alguien pudiese generar una URL lo suficientemente similar a la original, pero bajo su control, donde despliegue un formato idéntico al oficial. No existe un mayor mecanismo de verificación, por lo que el riesgo de manipulación es real.
Una solución sería dotar a quienes fiscalicen con una aplicación especializada, ya sea nativa o vía Web que realice la lectura del código QR, el cual no resolvería a una URL sino a un texto específicamente diseñado como datos que dicha App pueda interpretar, incluyendo algún mecanismo de validación de integridad para realizar la consulta en línea al servicio correspondiente. Tal como sucede con la implementación actual sigue siendo necesario contar con una conexión a internet disponible al momento de realizar la fiscalización, pero esto es prácticamente inevitable dada la naturaleza dinámica del Pase.
Acá se pone un poco más técnico. Lo descrito anteriormente son los problemas inherentes a la implementación actual del Pase de Movilidad. Sin embargo, podemos ir más allá. ¿Cómo sabe específicamente el sistema quién es cada usuario por el que se está consultando? La información que identifica específicamente a cada usuario, una vez generado su código QR, está dada por los parámetros «a«, «b» y «c«. Si bien la URL sugiere ser de una naturaleza dinámica, como funciona actualmente carga una URL estática que es capaz de leer, client-side mediante Javascript dichos parámetros y a su vez realizar una segunda consulta (usando como método POST) a otro servicio, alojado en la nube de Google, y que retorna el estado del usuario.
¿Qué significa cada uno de estos parámetros, y qué sucede si los cambio? Tras un par de pruebas y errores nos podemos dar cuenta fácilmente que el parámetro «a» es incremental, y simulando la consulta con una herramienta como Curl o Postman podremos acceder a la información de otros usuarios, incluyendo el nombre completo, RUT y estado actual de habilitación.
Si de la misma manera modificamos incrementalmente el parámetro «b» no obtenemos resultados de registros existentes. Sin embargo, tras comparar algunos valores para «b» válidos de distintos códigos QR de pases reales, algo llama la atención: se trata de un epoch, un número que representa la cantidad de segundos (sí, segundos) transcurridos desde las 00:00 del 1ro de Enero de 1970, con las fechas anteriores a ésta representadas por números negativos.
Al convertir el valor de «b» a una fecha utilizando alguna de las herramientas disponibles online, nos damos cuenta de que corresponde a una fecha cercana posterior a la aplicación de la primera dosis del programa de vacunación, por lo que, sumado a la naturaleza incremental de «a» no es difícil asumir que se trata de la fecha y hora en que el registro del usuario fue ingresado al sistema a través de un proceso batch.
Todo lo anterior sumado a la falta de un mecanismo de autenticación para realizar la consulta de códigos QR deja de manifiesto la existencia de un vector de ataque a través del cual puede ser posible extraer, en forma masiva, información sensible sobre la población vacunada y su estado de habilitación actual.
¿Y qué pasa con «c«? De momento parece aceptar cualquier valor estrictamente distinto de “1”.
¿Qué te parecen las complicaciones de seguridad que podría tener el pase de movilidad?