Error en el registro de vacunación de Quebec: análisis

El experto en ciberseguridad de ESET Marc-Étienne Léveillé analiza a fondo las aplicaciones de Quebec seguras para vacunas VaxiCode y VaxiCode Verif.

La introducción de las aplicaciones móviles que permiten al gobierno de Quebec mantener y verificar los registros de vacunación (VaxiCode y VaxiCode Verif) generó mucha tinta la semana pasada. Por buena razón; Todos los comerciantes con servicios no esenciales utilizarán la aplicación VaxiCode Verif a partir del 1 de septiembre de 2021.

Como muchos otros expertos, analicé el contenido del código QR tan pronto como lo recibí con mi primera vacunación en mayo del año pasado. La semana pasada también analicé las dos aplicaciones establecidas por el gobierno de Quebec y desarrolladas por Akinox.

Esta publicación de blog explica cómo funciona el sistema de registro de vacunación implementado por el gobierno de Quebec desde un punto de vista técnico, así como detalles sobre la vulnerabilidad que encontramos en VaxiCode Verif que permitió que la aplicación se viera obligada a utilizar aplicaciones no gubernamentales. QR -Códigos reconocidos como válidos. En este momento no se puede confirmar que esta sea la misma vulnerabilidad que fue encontrada por «Louis» como fue reportada por Radio-Canada el viernes pasado, ya que los detalles técnicos aún no han sido publicados.

Informamos a Akinox el domingo sobre la vulnerabilidad que se encontró y confirmamos que la actualización VaxiCode Verif 1.0.2 para iOS que se lanzó en los últimos días corrige el error. La versión de Android de las aplicaciones aún no se ha analizado, pero VaxiCode y VaxiCode Verif utilizan el marco Expo, que hace posible producir aplicaciones iOS y Android con el mismo código fuente. Por lo tanto, es probable que las aplicaciones en ambas plataformas sean equivalentes.

Índice de contenido

Profundicemos en el contenido del Pasaporte de Vacunas de Quebec

Primero, echemos un vistazo a lo que contiene el código QR. En términos generales, un código QR solo contiene texto. Suele ser una URL.

Pero volvamos a la solicitud del certificado de vacunación de Quebec. Notamos que la URL contenida en este código QR comienza con shc:/. “Shc” es en realidad un acrónimo de SMART Health Cards, una especificación que define un formato para intercambiar información sobre el estado de vacunación de una persona. Esta especificación nació en 2021 con el objetivo de poder emitir este famoso pasaporte de vacuna y verificar su veracidad. Este es el mismo estándar elegido por varios estados estadounidenses, incluidos California, Nueva York y Luisiana. El desarrollo de esta especificación está liderado por la Vacciination Credential Initiative, una coalición de organizaciones públicas y privadas que abogan por la distribución segura de pasaportes en todo el mundo. Akinox, la compañía que desarrolló VaxiCode y VaxiCode Verif para el gobierno de Quebec, es miembro de esa organización.

La especificación describe cómo se decodifican los números de la URL en contenido legible.

La información se decodifica en un JSON Web Token (JWT) o, más precisamente, en una JSON Web Signature (JWS), ya que es un token firmado. La especificación SHC no reinventó la rueda: JWT es una tecnología existente para intercambiar información encriptada o firmada digitalmente.

Si desea saber más sobre el contenido de su registro de vacunación, puede consultarlo fácilmente desde un dispositivo móvil utilizando una herramienta en línea desarrollada por François Proulx.

¿Debería estar cifrada esta información?

Muchos han sugerido encriptar la información en el código QR. Esto puede parecer una excelente manera de protegerlo; Sin embargo, sería demasiado fácil descifrar esta información. VeriCode Verif debe comprender la información, por lo que la aplicación debe incluir la clave de descifrado. Una vez que se extrae la clave, cualquiera puede descifrar los códigos QR. Esto crearía una falsa impresión de seguridad y generaría más críticas por parte del público.

Por estas razones, el protocolo SHC no ofrece un método de encriptación. Sin embargo, requiere una firma digital.

Así funciona la firma digital

La firma digital se basa en criptografía asimétrica, lo que significa que se utiliza un par de claves. Este par consta de una clave privada que solo el emisor (aquí el gobierno de Quebec) tiene para firmar los datos, y una clave pública que confirma que la firma se realizó con la clave privada.

La criptografía asimétrica se utiliza, entre otras cosas, para cifrar la comunicación en Internet. No se conocen ataques que intenten firmar sin la clave privada o adivinar la clave privada a partir de la clave pública.

También significa que proteger esta clave privada a toda costa es una prioridad. Un compromiso de esta clave permitiría la generación de códigos QR criptográficamente válidos. Este no es el caso del error que encontramos: no necesitábamos la clave privada para falsificar un registro de vacuna que VaxiCode Verif consideraba válido. Más bien, el problema radica en la implementación del algoritmo de verificación en VaxiCode Verif.

¿Cuál fue exactamente el error en VaxiCode Verif?

La especificación SMART Health Cards se desarrolló para permitir múltiples emisores de evidencia de vacunas. Esto refleja la realidad de que cada país o región es responsable de producir su propia evidencia. Por lo tanto, cada gobierno tiene su propio par de llaves para firmar y verificar pasaportes.

La especificación SHC requiere que el organismo emisor ponga su clave pública a disposición en Internet. El certificado de vacunación contiene una URL al sitio web del expositor en la «iss» (abreviatura de Expositores) Zona. Una aplicación de verificación debe encontrar la (s) clave (s) pública (s) del emisor encadenando /.well-known/jwks.json a esta URL.

La especificación no definir (al menos por ahora) una forma de determinar si el emisor es confiable.

Akinox ha optado por incluir la clave pública del gobierno de Quebec en VaxiCode y VaxiCode Verif. La aplicación usa esta clave cuando el emisor es el gobierno de Quebec (específicamente cuando iss es https://covid19.quebec.ca/PreuveVaccinaleApi/issuer). Sin embargo, el código para descargar claves de terceros todavía está en la aplicación, aunque no es obligatorio.

El punto débil es que una vez descargada, se usa una clave pública para validar cualquier otro pase sin verificar que coincida con el contenido del campo emisor (iss).

Aquí hay un escenario de ataque para mostrar evidencia de vacuna falsa como válida:

  • Los atacantes generan un par de claves y hacen que la clave pública esté disponible en https://example.org/.well-known/jwks.json
  • Genera dos tarjetas de salud SMART en forma de códigos QR:El primero se crea con cualquier contenido, siempre que el iss es https://example.org.El segundo se crea con los datos personales de la persona que quiere fingir vacunarse, así como el iss Campo que apunta al dominio legítimo del gobierno y firmarlo con la clave generada en el paso 1.
  • Al verificar el registro de vacunación, los atacantes primero presentan el primer código QR. Esta validación es rechazada por VaxiCode Verif, pero obliga a la aplicación a descargar la clave pública del atacante y agregarla a su anillo de claves de confianza.
  • Luego, los atacantes presentan el segundo código QR, que VaxiCode Verif valida como legítimo.

La versión 1.0.2, que ha estado disponible en la App Store de Apple desde el domingo, soluciona el problema. Esta actualización elimina por completo la funcionalidad de descargar claves públicas de la URL del emisor.

¿Qué se podría haber hecho mejor?

Las agencias y desarrolladores responsables de proporcionar evidencia de vacunas están sujetos a una restricción que es difícil de mitigar: el tiempo. Todo el desarrollo y la provisión del registro de vacunación en Quebec tomó algunos meses. Aunque hubo algunas deficiencias, el sistema funciona.

Es posible que el gobierno de Quebec haya perdido una buena oportunidad de publicar el código fuente de las aplicaciones que crea en aras de la transparencia. Después de todo, con estas aplicaciones no hay nada que ocultar ni nada que mantener en secreto. Encontrar errores rápidamente ha demostrado que el análisis realizado por un mayor número de expertos aumenta la seguridad de este tipo de aplicaciones. La publicación del código fuente y su análisis por parte de expertos podría haber evitado escándalos que podrían socavar la confianza del público, ya que toda la población podría haber comprobado la seguridad por sí misma.

Además, algunas personas sienten que la información personal contenida en el pasaporte de la vacuna de Quebec es exagerada. En este sentido, habría sido posible hacer una versión más ligera del pasaporte con menos información. Sin embargo, esta versión más ligera podría ser potencialmente inutilizable fuera de Quebec, ya que las reglas para determinar si una persona está protegida pueden cambiar de una región a otra (qué vacunas se consideran válidas, cuántas dosis, etc.).

Suiza ha optado por esto con su “certificado ligero COVID”. También cabe señalar que el código fuente de las aplicaciones suizas también ha estado disponible durante varios meses.

No hemos probado los servidores que permiten la emisión de registros de vacunación porque no tenemos el mandato ni el permiso del gobierno de Quebec o Akinox para hacerlo. A diferencia del análisis de las aplicaciones proporcionado por Quebec, esto representaría un ataque a un sistema remoto que podría generar un riesgo de interrupción del servicio.

diploma

Nuestro análisis inicialmente se ocupó del historial de desarrollo de la especificación CHS, que se desarrolló especialmente a nivel internacional para el tema de las confirmaciones de vacunación COVID-19. A continuación, explicamos lo importante que es utilizar la criptografía asimétrica para firmar datos y, en este caso, asegurar la validez de los registros de vacunación presentados. Sin embargo, descubrimos un error en la implementación del algoritmo de verificación que permitió la falsificación de la evidencia de la vacuna que VaxiCode Verif había mostrado como legítima. Notificamos a Akinox de este error y se solucionó tan pronto como se actualizó la aplicación, lo que hizo en unos pocos días. Finalmente, señalamos los beneficios potenciales de ser más transparentes sobre el código fuente de estas aplicaciones.

Como resultado de este análisis, creo que las tecnologías en las que se basa el sistema son sólidas, aunque VaxiCode Verif tuvo algunos problemas cuando se lanzó. La idea de utilizar estándares y tecnologías existentes es, en mi opinión, una buena decisión. Garantiza tanto la seguridad de las firmas como la interoperabilidad entre regiones mediante el protocolo SMART Health Cards. En mi opinión, un error en el sistema que rechaza un certificado de vacunación válido tendría efectos mucho más graves que al revés, y ese no es el caso aquí.

El hecho de que el problema se resolviera en unos días demuestra que todas las partes quieren un sistema seguro. Siempre hay margen de mejora, pero el uso de la firma digital propuesta por SHC es seguro hasta el día de hoy.