Ocio irresponsable: cuando la privacidad en el diseño de software pasa a un segundo plano

José Miguel Moreno
3 min readFeb 19, 2021

--

A medidados de febrero de 2021, y con motivo de la pandemia de COVID-19, surge una aplicación en Castilla-La Mancha para poder trazar los contagios producidos en establecimientos de hostelería y restauración conocida como “Ocio Responsable”.

Página de inicio de ocioresponsable.castillalamancha.es

La mecánica de este sistema es sencilla:

  1. Los usuarios deben visitar una página web e introducir su nombre, teléfono móvil y DNI para obtener un código QR que contiene una serie de caracteres aleatorios que lo identifican.
  2. Cuando el usuario vaya a acceder a un local, éste muestra su código QR al personal del sitio que lo escanea con una aplicación móvil de la JCCM.
  3. Si hay un brote en un establecimiento la autoridad sanitaria competente avisa a las personas que estuvieron en dicho lugar durante el incidente.

A nivel un poco más técnico esto es lo que ocurre cuando una persona entra en un local:

  • Se escanea el código QR para obtener su contenido (por ejemplo, “wv0ch0ghik4472c7”).
  • Esta información se manda al servidor de Ocio Responsable, que comprueba quién es el usuario asociado a dicho código y registra el evento (e.j. “entrada al local «Bar Noe Xiste»”).
  • Se informa al lector de que el código QR es correcto.
Flujo de operación normal de Ocio Responsable

Es importante resaltar que en ningún momento el establecimiento puede obtener los datos personales del visitante, ya que solo tiene acceso al código QR.

Sin embargo, esta última afirmación no es del todo cierta.

Explicación del fallo de seguridad en Ocio Responsable

Debido a un mal diseño de un caso de uso, durante una semana desde el lanzamiento de la aplicación, un atacante pudo obtener los datos personales de cualquier usuario con solo conocer su código QR.

El problema estaba en la siguiente dirección URL: https://ocioresponsable.castillalamancha.es/passbook.php?codigo={{CODIGO_QR}}

Conociendo el parámetro “codigo” (que es el valor del QR), este script de PHP genera un fichero PKPass de Passbook que, al abrirlo en un dispositivo móvil, permite mostrar nuestro identificador fácilmente al establecimiento.
Este tipo de ficheros se emplean habitualmente para guardar tickets de medios de transporte, entradas a teatros o cines, etc.

Como estos “.pkpass” no son más que archivos comprimidos en formato ZIP, podemos extraer su contenido. Si nos fijamos más detenidamente, veremos que hay un fichero JSON con el nombre “pass.json” que contiene los metadatos relevantes:

Contenido del archivo .pkpass

Y aquí es donde estaba el agujero de seguridad, pues entre los metadatos se encontraba también la información personal del usuario:

Contenido del fichero pass.json

Afortunadamente, este fallo ya ha sido arreglado a fecha de 19 de febrero tras ser reportado al INCIBE-CERT, aunque no ha habido ningún comunidado oficial por parte de un ente público avisando del incidente.

Hipotéticamente, un atacante podría haber estado recopilando datos de miles de personas solo con escanear códigos QR. La única forma de estar seguro es realizar un análisis de las peticiones al servidor, algo que por el momento no parece que se haya hecho.

Flujo de operación de un ataque de Ocio Responsable

--

--