Fallo en el pasaporte de la vacuna de Quebec: análisis


El experto en ciberseguridad de ESET, Marc-Étienne Léveillé, analiza en profundidad las aplicaciones de prueba de vacunas de Quebec, VaxiCode y VaxiCode Verif.

El lanzamiento de las aplicaciones móviles que permiten el almacenamiento y verificación del pasaporte de vacunación por parte del gobierno de Quebec (VaxiCode y VaxiCode Verif) ha provocado que fluya mucha tinta la semana pasada. Es por una buena razón Todos los comerciantes de 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í durante mi primera vacunación el pasado mes de mayo. La semana pasada, también analicé las dos aplicaciones establecidas por el gobierno de Quebec y desarrolladas por Akinox.

Esta publicación de blog site explica cómo funciona el sistema de pasaportes de vacunas establecido 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 reconocer códigos QR emitidos por organizaciones no gubernamentales como válido. En este momento, es imposible confirmar que se trata de la misma vulnerabilidad encontrada por «Louis» según lo informado por Radio-Canada el viernes pasado, ya que aún no se han publicado detalles técnicos.

Informamos a Akinox sobre la vulnerabilidad que encontramos el domingo, y hemos confirmado que la actualización VaxiCode Verif 1..2 para iOS lanzada en los últimos días corrige la falla. La versión de Android de las aplicaciones aún no se ha analizado, pero VaxiCode y VaxiCode Verif utilizan la Expo framework que permite producir aplicaciones iOS y Android utilizando el mismo código fuente. Por lo tanto, las aplicaciones en ambas plataformas probablemente sean equivalentes.

Profundicemos en el contenido del pasaporte de la vacuna de Quebec

Primero, veamos qué contiene el código QR. En términos generales, un código QR solo incluye texto. A menudo es una URL.

Pero volvamos a la solicitud de pasaporte de la vacuna de Quebec. Notamos que la URL contenida en este código QR comienza con shc:/. «Shc» es en realidad un acrónimo de Tarjetas de salud Wise, 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 poder verificar su veracidad. Este es el mismo estándar que ha sido elegido por varios estados estadounidenses, incluidos California, Nueva York y Luisiana. El desarrollo de esta especificación está siendo encabezado por Iniciativa de acreditación de vacunación, una coalición de organizaciones públicas y privadas que trabajan para permitir el despliegue seguro del pasaporte en todo el mundo. Akinox, la empresa que desarrolló VaxiCode y VaxiCode Verif para el gobierno de Quebec, es miembro de esta organización.

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

La información se decodifica en un JSON World-wide-web Token (JWT), o más específicamente en JSON Net 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 pasaporte de vacuna, puede inspeccionarlo fácilmente desde un dispositivo móvil usando un herramienta en línea desarrollado por François Proulx.

¿Debería cifrarse esta información?

Muchos han sugerido encriptar la información en el código QR. Esto puede parecer una buena forma 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 contener la clave de descifrado. Una vez que se extrae la clave, cualquiera puede descifrar los códigos QR. Esto darí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 proporciona un método de cifrado. Sin embargo, requiere una firma digital.

¿Cómo 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 está compuesto por una clave privada, que solo el emisor (en este caso, el Gobierno de Quebec) tiene en su poder para firmar datos, y una llamada clave pública, que verifica que la firma se ha realizado con la clave privada.

La criptografía asimétrica se utiliza, entre otras cosas, para cifrar las comunicaciones en Online. No hay ataques conocidos para firmar sin tener la clave privada o adivinar la clave privada de la clave pública.

Esto también significa que la prioridad es proteger esta clave privada a toda costa. Comprometer esta clave permitiría la generación de códigos QR criptográficamente válidos. Este no es el caso con la falla que encontramos: no necesitábamos la clave privada para falsificar una prueba de vacuna que VaxiCode Verif consideraba válida. Más bien, el problema estaba en la implementación del algoritmo de verificación en VaxiCode Verif.

¿Cuál fue exactamente la falla en VaxiCode Verif?

La especificación Sensible Overall health Cards fue diseñada para permitir la posibilidad de múltiples emisores de evidencia de vacunas. Esto refleja la realidad de que cada país o región es responsable de emitir 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 la entidad emisora ​​ponga a disposición su (s) clave (s) pública (s) en Net. La prueba de vacuna contiene una URL al sitio net del emisor en el «iss» (abreviatura de editor) campo. Una aplicación de verificación debe encontrar la (s) clave (s) pública (s) del emisor mediante la concatenación .well-recognised/jwks.json a esta URL.

los la especificación hace 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 utiliza esta clave cuando el emisor es el gobierno de Quebec (específicamente si iss es https://covid19.quebec.ca/PreuveVaccinaleApi/issuer). Sin embargo, el código para descargar claves de emisor de terceros todavía está en la aplicación, aunque no es obligatorio.

La vulnerabilidad radica en que una vez que se descarga una clave pública, se utiliza para validar cualquier otro pasaporte, sin verificar si coincide con el contenido del campo emisor (iss).

Aquí hay un escenario de ataque para mostrar una prueba de vacuna falsificada como válida:

  • Un atacante genera un par de claves y hace que la clave pública esté disponible en https://example.org/.well-identified/jwks.json
  • Genera dos tarjetas de salud Intelligent en forma de códigos QR:
    • El primero se crea con contenido arbitrario, siempre que el iss es https://case in point.org.
    • El segundo se crea con la información personalized de la persona que quiere hacerse pasar por vacunado así como el iss campo que apunta al dominio legítimo del gobierno y lo firma con la clave generada en el paso 1.
  • Durante una verificación del pasaporte de la vacuna, el atacante primero presenta el primer código QR. Esta validación será rechazada por VaxiCode Verif, pero obligará a la aplicación a descargar la clave pública del atacante y agregarla a su llavero de confianza.
  • El atacante presentará el segundo código QR, que VaxiCode Verif validará como legítimo.

La versión 1..2 disponible desde el domingo en la Application Retailer de Apple 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 autoridades y desarrolladores responsables de desplegar la prueba de la vacuna se encuentran bajo una restricción difícil de mitigar: el tiempo. Todo el desarrollo y despliegue de la prueba de vacunación en Quebec se realizó en unos pocos meses. Si bien ha habido algunas deficiencias, el sistema está funcionando.

El gobierno de Quebec puede haber perdido una buena oportunidad de publicar el código fuente de las aplicaciones que produjo en aras de la transparencia. Después de todo, no hay nada que ocultar ni ningún secreto sobre estas aplicaciones. El rápido descubrimiento de fallas ha demostrado que el análisis por un mayor número de expertos mejora la seguridad de este tipo de aplicaciones. La publicación del código fuente y su análisis por expertos podría haber evitado escándalos que podrían afectar la confianza del público, ya que toda la población habría podido comprobar la seguridad por sí misma.

Algunas personas también sienten que los datos personales contenidos en el pasaporte de la vacuna de Quebec son excesivos. En este sentido, habría sido posible producir una versión más ligera del pasaporte con menos información. Dicho esto, 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, and so on.).

Este es lo que eligió Suiza con su “certificado de luz COVID”. También cabe señalar que el código fuente de las aplicaciones suizas también ha estado disponible durante varios meses.

No probamos los servidores que permiten la emisión de pasaportes de vacunas, 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 constituiría un ataque a un sistema remoto que podría resultar en un riesgo de interrupción del servicio.

Conclusión

Nuestro análisis primero examinó el historial de desarrollo de la especificación CHS, que se desarrolló internacionalmente específicamente para emitir confirmaciones de vacunación COVID-19. A continuación, explicamos la importancia de utilizar la criptografía asimétrica para la firma de datos y, en este caso, para asegurar la validez de las pruebas de vacunación aportadas. Sin embargo, descubrimos una falla en la implementación del algoritmo de verificación, que permitió falsificar las pruebas de vacunas que VaxiCode Verif mostraba como legítimas. Notificamos a Akinox de esta falla, y se solucionó tan pronto como se actualizó la aplicación, lo cual fue dentro de unos días. Finalmente, señalamos los beneficios potenciales de una mayor transparencia con respecto al código fuente de estas aplicaciones.

Como resultado de este análisis, creo que, aunque VaxiCode Verif tuvo algunos problemas en su lanzamiento, las tecnologías en las que se basa el sistema son sólidas. La plan 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 Intelligent Wellness Cards. En mi opinión, una falla en el sistema que niega un pasaporte de vacuna válido tendría un impacto mucho más grave que al revés, y ese no es el caso aquí.

Que el problema se haya solucionado en tan solo unos días demuestra que todas las partes quieren un sistema seguro. Siempre hay áreas de mejora, pero el uso de la firma digital propuesta por SHC es, hasta la fecha, seguro.



Enlace a la noticia original