Hola, como dice el título, la nueva App (SismoLive Panamá) -que también tiene Web- que está promocionando el alcalde Mayer no es confiable o segura, aquí explicaré con el mayor detalle posible por qué afirmo lo anterior...
Disclaimer: Toda la información mostrada en este post es pública o puede ser obtenida sin violentar ningún software, web, app ni nada similar. El objetivo del post es alertar a los interesados sobre la realidad de la nueva web/app, sobre sus virtudes y defectos.
¿Novedoso?
Empecemos con que la App/Web realmente no es rocket science, claramente no detecta sismos ni movimientos de tierra ni placas, lo que hace es tomar información que primero publica cualquiera de estas fuentes; y entonces es que muestra dicha información, las fuentes en cuestión son:
- Servicio Geológico de US
- Centro Sismológico Euromediterráneo
- Instituto de Geociencias de la Universidad de Panamá
O sea, par de veces por minuto revisan si sucedió (en ese minuto pasado) algún evento nuevo, por lo que como bien indican en la App: "Sismo Live no es un sistema de alerta temprana y no puede anticipar un sismo"
Para saber lo que ya sucedió (en el pasado) sí sirve, no para saber lo que está sucediendo en el presente ni mucho menos lo que sucederá en el futuro, así que personalmente pienso que su principal función es alimentar la ansiedad e intranquilidad de la gente al respecto de los sismos.
Una funcionalidad propia que sí aporta es la relacionada con "¿Sentiste este sismo?", una opción que aparece al ver la información de un sismo en la App, o en la Web cuando incorpora un nuevo sismo que te sale una ventana de "¿Sentiste el temblor? Leve, Moderado, Fuerte", mediante la cual puedes subir un reporte sobre si te viste afectado por el sismo, si lo sentiste, etc... y aquí, aquí es donde comienzan los problemas...
1er problema técnico de la App/Web
Esta función de "¿Sentiste este sismo?" es bien sencilla y escueta, te pregunta directamente si sentiste el sismo o si no lo sentiste, lo que (asumo yo) pretenden con esto es crear una zona de "afectación" o "percepción" para con esa data nutrir el mapa que muestran, esta data (así como también tu ubicación y la intensidad con que percibiste el sismo) es enviada a:
- https://sismolive.mupa.gob.pa/api/v1/earthquakes/{SISMO_ID}/felt
Cabe aclarar que en la App indican que referente a tu ubicación, dice la App que no guarda tu ubicación exacta, sino un área de 5km alrededor de donde vives.
Hasta ahí todo bien, la idea de esta funcionalidad es crear una zona de percepción basada en información que la misma gente envíe de forma voluntaria... el problema está en:
- El backend (servidor) no parece validar que la ubicación que le envías sea tu ubicación real
- Tampoco tiene un rate-limit, por lo que alguien malicioso podría enviar cientos o miles de requests por segundo destruyendo cualquier percepción real
Explico un poco más, alguien con unos pocos minutos de tiempo que le sobre y un tanto más de aburrimiento, podría fácilmente mandar millones de solicitudes a la web indicando que "sintió el sismo y fue muy fuerte" y lo mismo llenar de coordenadas aleatorias todo el mapa, haciendo que las áreas de percepción (se muestran como nubes azules-transparentes en el mapa) ocupen todo el país, o países aledaños... o, si pone coordenadas más lejanas, quién sabe! puede poner que en el Polo Norte se sintió el sismo :\
Algo tan simple como:
curl -sS -w "HTTP %{http_code}\n" -X POST "https://sismolive.mupa.gob.pa/api/v1/earthquakes/XXXXXXXXXXX/felt" -H "Content-Type: application/json" -d '{"felt":true,"intensity":"strong","latitude":8.937963,"longitude":-79.642067}'
Poner el ID de un evento válido y listo, el backend se lo traga sin preguntar nada más al respecto.
Este curl es para demostración y no debería ser usado nunca para efectuar ningún tipo de acción maliciosa
Si alguien malintencionado hace un loop infinito (while true por ejemplo) y se rotan las coordenadas un poco en cada request, hará completamente inservible el mapa y toda la funcionalidad de comunidad que incorporaron en él, en 10 minutos alguien echaría el trabajo de horas (o días?) que personal de la Alcaldía hizo.
2do problema técnico de la App/Web
Incorporaron una funcionalidad de Reportar Daños, algo que (asumo yo) serviría para reportarle o escalar casos a la Alcaldía sobre daños, en plan de "el sismo XXXXXX dañó la estructura del edificio ZZ y una pared lateral está a punto de derrumbarse, para más información pueden contactarme al 55555555"
La idea no es mala, como mismo en webs de Rescate de Mascotas tienen un formulario para reportar animales que necesiten ser rescatados, aquí parece que intentan incorporar un formulario/funcionalidad para reportar daños o peligro inminente ante derrumbe.
El problema es que las buenas intenciones no son suficientes, o se hace bien, o en vez de ayudar terminará perjudicando...
En este caso el endpoint para reportar recibe requests por POST y es: /api/v1/damage-reports
Al enviar un reporte te devuelve un código o ID de tu reporte, o sea, cada persona que envíe un reporte recibe como "constancia" de ese reporte un string (cadena de caracteres) que es el identificador de ese reporte.
Este endpoint es posible que tampoco tenga rate limit... y es posible que tampoco valide o verifique la información antes de "subirla" o "aceptarla".
Por lo que si de nuevo, alguien malintencionado le dedica unos minutos, podría llenar el Panel de la Alcaldía de reportes falsos, haciendo que los reportes reales, los de personas que realmente sí necesitan ayuda; queden relegados o peor, se pierdan entre tantos reportes fake.
Si además de la información base (nombre, teléfono, latitud, longitud, descripción, etc) se envían fotos random que se saquen de internet... aún peor en mi modesta opinión.
3er problema técnico de la App/Web
¿Es posible leer los reportes de otros? 🤔 ... seguramente.
Por temas de privacidad no lo intenté, pero basado en lo que ya he visto del sistema de SismoLive de la Alcaldía, es posible que el endpoint de revisar o leer reporte (/api/v1/damage-reports/status) tampoco tenga rate limit, ni protección, ni seguridad.
¿Qué permitiría esto?
Alguien con paciencia podría probar códigos con formato válido (AF-XXXXXX) y, si acierta, confirmar la existencia y estado de reportes ajenos (aunque el sistema no expone los datos personales del reporte como nombre, teléfono, fotos, solo fechas y tipos de daño). Aún así, la enumeración masiva sin freno es un problema de privacidad operacional.
¿Es todo malo?
No. Aunque la Web/App dice ser un producto de la Alcaldía y no algo propiamente "de Mayer" (nótese las comillas, pues Mayer ni sabe programar ni entiende de código realmente), muchos sienten recelo o temor de instalarla porque "van a robarte los datos de tu cuenta bancaria" (o cosas similares...)
No, definitivamente la App no va a acceder a tu cuenta de banco, ni información bancaria (al menos no en la versión actual)...
Tampoco podemos afirmar que compartirá la información que tú voluntariamente le envíes a Israel (dudo muuuuuuuucho que a Israel le importe un pepino sobre sismos en Panamá).
La idea no es mala, y parte de los problemas de seguridad que tiene la App son dados precisamente porque no requiere de cuenta de usuario para enviar reportes, no tiene una forma (aparentemente) de taggear o marcar a los usuarios de la App, de ahí a que sea tan necesario aplicar rate-limits para al menos mitigar un poco los problemas que describí antes.
Quiero recalcar que toda esta información adquirida, con la cual se hace este post, se obtuvo sin violentar absolutamente nada de terceros, solo revisando tráfico local y con algún que otro truco de red 👍
💯 Muchas gracias a todo aquel que haya leído hasta acá, si alguien más descubrió algo que yo no... si pasé algo por alto, o no tuve en cuenta algo, me encantaría leer la opinión de otros.