Correte

Hackeando el Sistema de Transporte Metropolitano II ½

Photo from Andrew Gook

Originalmente publicado el 20 de Marzo de 2019

Esto es una obra de ficción, cualquier parecido con la realidad es pura coincidencia...


Disclaimer

Este es un reportaje técnico con el propósito de entender piezas móviles que afectan al público en general. Todo lo encontrado fue intentado reportar a los involucrados en tiempo y forma.

Como en ocasiones anteriores, la idea de esta publicación es poder discutir la seguridad de manera transparente con la intención de proteger a los usuarios de la misma.


El eterno resplandor de una mente sin recuerdos

Hay veces que pienso que soy monotemático.
Que transmito una cizaña contra el STM.
Parece que mi legado va a ser asociar mi nombre con un sistema de transporte que quería que todos viajaran.

Esta vez las fallas son tan profundas que rozan faltas explícitas en las leyes de protección de datos personales.

Esta historia, como tantas otras antes que ella, empieza en una noche que pensé sería diferente, que iba a demostrar que se puede aprender de los errores del pasado.
Sinceramente esperé un contralor interno masivo luego de los diferentes reportes a las fallas del sistema pero no podría haber estado más equivocado.

Esa noche el sistema fue Movete. Es una excelente idea tomada prestada de las grandes metrópolis del mundo que ofrecen bicicletas a los usuarios de su sistema de transporte.

En un Montevideo que cada día ofrece mas ciclovías y espacios para que los ciclistas puedan desplazarse es casi obvio que dicho sistema exista.

Son necesarios varios pasos antes de poder usar una bicicleta que incluyen ir a la única oficina de Movete y pagar $140 pesos por año por adelantado.

Mas allá de este trámite existe una aplicación móvil que permite luego de saciados los pasos anteriores hacer uso del servicio de manera mas cómoda.

Santa Claúsula

Así empieza un poco la disección.
Una aplicación móvil que permitía acceder a las bicicletas de manera más fácil.

El infierno está empedrado de buenas intenciones, dicen.

Luego de tener la aplicación y la tarjeta STM habilitada hay algunos lugares de donde se pueden retirar bicicletas.

Actualmente los parkings son:

Y cómo estoy tan seguro se preguntarán?… porque asi empieza el problema:

/getParkingData.php es un archivo dentro del sistema de Movete que tiene como única resposabilidad listar todos los parkings disponibles. Como uno lo esperaría no hay nada extraño, es un comportamiento esperable en cualquier aplicación.

Pero que más podemos encontrar?

Enterrado en la aplicacion hay miles de secretos esperando para ser descubiertos y empezaremos por uno que es estremecedor:

Entre piedras y alimañas de codigo encontré esto:

Que interesante la elección de MD5. Una tecnología completamente inútil en la protección de contraseñas estaba siendo usada… pero con qué propósito?

Esta siendo usada con el peor proposito posible:

/mobile_change_pass.php
      ?email=enserio@bici.com
      &pass=ohdiosmio

No es necesario ser un erudito para entender que es lo que está pasando.
Se trata de un archivo que toma como parámetro el email de un usuario y el nuevo password para dicha cuenta.
Que conste que el password es pasado en la forma de MD5(password) pero dado que controlamos ambos parametros podemos cambiar el password a cualquier usuario del sistema.

Solamente sabiendo el email de un usuario del sistema podemos apropiarnos de su cuenta.

Y dónde esta el piloto?

Una peculiaridad que podemos saber de la aplicación es que su origen no es nacional. Todo lo contrario, fue producida en las tierras de Almodóvar por una empresa que se llama UsualBike que ha implementado la misma solución en Valladolid y Albacete.

Obviamente esto me da la oportunidad de analizar otra aplicación de la misma empresa que hasta donde puedo saber usa la misma tecnología en sus parkings.

Pero ver que es literalmente el mismo código fue otra revelación importante:

Lo que podemos saber es que Albabici y Movete son (hasta lo que estoy dispuesto a investigar) la misma aplicación pero con diferente interfaz y apuntando a servidores diferentes.
Pero por lo demás son lo mismo.

Una nota a pie de página importante es que Albabici no está funcionando actualmente. Parece que está relacionado con el final del contrato entre ellos y la empresa.

Pero Vallabici sí funciona.

Aunque está construida de una manera completamente diferente. Supongo que es la nueva versión que planean para todas sus instalaciones.

Dado que está desarrollada de manera diferente lo que encontré en las anteriores no funcionan las misma vulnerabilidades pero siempre se pueden encontrar nuevas.

Despedazando ésta aplicación tenemos información sobre los parkings. Sobre las estaciones en las cuales se habilitan las bicicletas para su uso.
Sumando todas las vulnerabilidades es posible armar un mapa de su posible funcionamiento.

De las anteriores sabemos que para desbloquear una bicicleta necesitamos: un identificador de usuario, un identificador de parking y una dirección de candado:

👤 + 🅿️ + 🔒 = 🚲💨

Los parking son nuestra incógnita mas grande pero gracias a la aplicación de Vallabici podemos saber mucho:

"station": {
  "code": "B827EBBC591E",
  "mac": "B8:27:EB:BC:59:1E",
  "location": [ 41.653454, -4.730913 ],
  "locks": [ ... ],
  "ipAddr": "47.60.xxx.xx"
  "online": true,
  "idle": false
}

Ahora sabemos que cada estación de parking tiene un código que casualmente coincide con la MAC address de la misma.

También tenemos una dirección IP a la cual se conecta y habiendo visto fisicamente los parkings también podemos ver que no son grandes instalaciones.

Si tuviera que intentar descifrar como funciona diría que todos los parkings están interconectados a través de una VPN y reciben algún tipo de paquete en un puerto.

Este tipo de servidores, que toman una cadena de caracteres como entrada de datos para ejecutar una acción tienden a ser mayoritariamente usados en dos escenarios:

Dejo al lector el voto sobre cual es el caso en esta situación.

Con toda esta información a mano lo correcto es reportar las vulnerabilidad así que lo que intenté fue usar el formulario de contacto:

Que claramente tampoco funcionaba…

La única herramienta de contacto desde el exterior y era otra pieza móvil que estaba cumpliendo su función.

El día de la bestia

Ya que esta es tierra de nadie es momento de saber hasta donde nos lleva ese agujero de conejo.

El impacto se extiende a lugares insospechados ya que el desinterés en prácticas básicas de seguridad es eterno.

Algo tan inocente como esto: /getLocksData.php?parkingID=2 cuya unica razón de existir es saber el estado de cada una de las bicicletas en un parking dado se vuelve tóxico.

Una injección SQL. Uno de los más peligrosos bugs que uno pueda encontrar en un sistema. Permite la lectura (y a veces la escritura) de la base de datos a la que tenga acceso la aplicación.

Todos y cada uno de los registros de la aplicación se vuelven vulnerables y tal vez no parezca mucho pero gracias al descubrimiento de que los passwords están guardados en MD5 tenemos la certeza que no son seguros y así exponer el password de todos los usuarios de Movete.

Dado que no tenemos políticas sobre como escribir passwords es probable que se mantengan fieles a la idea de reusar sus contraseñas en varias aplicaciones.

Esta falla en particular me preocupaba dado que había riesgo real de perder control del servidor habilitando a un atacante a tener bajo su yugo un servidor de la Intendencia de Montevideo.

Ya que no tenía posibilidades de contactarme con los encargados de la aplicación decidí recurrir a CERTuy.

El día de la marmota

Como toda historia no sería digna de contarse si no hubiera una vuelta de tuerca al final.

Recurrir al CERTuy fue el camino más eficiente para poder lograr resultados.

La decisión mas acertada fue la que tomaron pero tambien la mas difícil también porque involuca dar de baja una porción importante del servicio.

Soy crítico con el STM. Bueno, más que crítico con el sistema lo he sido con cada una de las decisiones técnicas, pero siempre con un espíritu de contralor. El mismo espíritu que creo que cualquier ciudadano debe tener sobre sistemas, instutuciones e individuos que deben proteger información personal no por una brújula moral superior sino por ley.

La respuesta desde el CERTuy fue inmediata, las acciones desde la Intendencia de Montevideo fueron extremadamente rápidas y la decisión fue la apropiada dado el nivel de corrupción que existía en el servidor.

El antecedente frente a una vulnerabilidad de ésta índole hace que recupere la esperanza de que el contralor es posible, ejercible y beneficioso no al individuo o empresa sino al bien colectivo.

La extensión del STM va desde los ómnibus, los taxis y las bicicletas. Una herramienta tan transparente necesita ser observada con detenimiento, atención y de la manera mas crítica posible.

Y yo siempre voy a estar mirando.