lunes, abril 17, 2017

Presto Parking: ¿Un sitio web PCI-Compliant sin HTTPs? #PCI #PCICompliant #HTTPs

Hace unos días decidí ir al centro a hacer unas gestiones, y como tenía que aparcar en zona azul me descargué una app llamada "Presto Parking" que permite el pago telemático de la zona azul a través del móvil para no tener que andar buscando cuál es el poste de pago que corresponde a la calle en la que por fin pueda dejar el coche, para no esperar colas si hay otras personas haciendo lo mismo que yo, y para no tener que lidiar con las monedas, el cambio o esas cosas que tanto tiempo te hacen perder. Una app, y un clic, como debe ser el mundo digital.

Figura 1: Presto Parking ¿un sitio web "PCI-Compliant" sin HTTPs?

Estas ventajas son las que propone "Presto Parking". Ya sabéis que "Presto" en español tiene como acepción semántica la rapidez, la velocidad, la diligencia, la presteza. Sonaba bien, y está disponible en varios municipios de la Comunidad de Madrid, así que a probarla, pensé.

Figura 2: Presto Parking en Google Play

Lo primero que hice fue descargarme la app e intentar registrarme desde el smartphone. Sin embargo, cuando llegó el momento de introducir la tarjeta de crédito me pregunté - cosas que se pregunta uno cuando es su dinero lo que está en riesgo - si la conexión entre la app y el servidor que soporta el backend de la misma, estaría cifrada correctamente. Como en la app no indicaba nada y no tenía muchas ganas de ponerme a decompilar el código, decidí buscar la web del fabricante para ver si me podría registrar desde el navegador.

Registro vía web HTTP

Efectivamente, podía registrarme desde el sitio del fabricante, tal y como podéis ver,  pero para mi sorpresa, la web es insegura y envía todo el tráfico por HTTP. No dispone de un cifrado mínimo y por tanto los datos son visibles para cualquiera que este escuchando la red, para todos los que encaminen el tráfico, para todos los elementos de la red, etcétera.

Figura 3: Proceso de registro en formularios bajo HTTP

A pesar de ver que este proceso inicial de registro era inseguro, decidí seguir adelante pues consideré que mi dirección de correo electrónico y la matricula de mi vehículo me parecieron datos que en un momento dado no afectarían en demasía a mi vida - llámame loco -, con la sana intención de ver qué pasaba cuando la cosa se pusiera seria. Es decir, de ver qué pasaba cuando el sitio llegara a lo que de verdad me podría afectar: La tarjeta de crédito.

Ahora la tarjeta de crédito

Fue en la siguiente pantalla cuando me pidió la forma de pago y donde marqué tarjeta de crédito que es la mas cómoda para mí - y también la mas delicada por lo que supone una forma de pago fuente de muchos fraudes -, para ver si esto va "Presto" o "Cifrado".

Figura 4: Web de Presto Parking para enviar tu tarjeta de crédito sin HTTPS y con el logo de PCI-Compliant

Es en la siguiente pantalla donde el sitio web pide los datos de la tarjeta de crédito. No los datos de la tarjeta de crédito en general, sino los datos de MI tarjeta de crédito. Y aquí es donde decidí que había que parar pues, como se puede ver, la conexión sigue estando sin cifrar con HTTPs. Esto es muy preocupante pues cualquiera que escuche puede ver los datos que estoy enviado por la red.

Figura 5: La tarjeta de crédito, con todos sus datos, enviada en texto claro

Como se puede ver en la imagen probé con unos datos erróneos para ver si conectaba de forma segura con el servidor de alguna manera, pero no, los datos van en texto claro.

¿PCI-Compliant?

Pasado este punto, vi el logotipo de “PCI Compliant Enviroment” y ya me pareció demasiado extraño como para ser verdad. ¿Sin cifrado HTTPs puede una web ser PCI-Compliant? Mira que lo dudo.

Figura 6: Logo de PCI-Compliant Environment

¿Qué significa que una web o un entorno telemático es PCI-Compliant Enviroment? Pues en la web se puede ver pinchando aquí, que hay una buena explicación. Básicamente esta web certifica que, si no he entendido mal y el traductor no me ha traicionado:
“El estándar de seguridad de datos de la industria de tarjetas de pago (PCI DSS) es un conjunto de normas de seguridad diseñadas para garantizar que TODAS las empresas que aceptan, procesan, almacenan o transmiten información de tarjetas de crédito mantienen un entorno seguro.”
Y aquí es donde algo falla. O esta web no ha pasado la auditoría PCI y está utilizando el sello como el que coge una imagen de Google Images y lo pega en la web, o el que ha hecho la auditoría PCI no la ha hecho correctamente. ¿Qué habrá sido? Yo me he ido a mirar la guía de cumplimiento del sitio PCI Compliance y el cifrado HTTPs es una parte fundamental del procesado seguro de la captura de la tarjeta de crédito. De hecho, cuando salen bugs como Poodle o Beast, dedican artículos a explicar cómo arreglar estos fallos y volver a tener un entorno seguro que cumpla la nuevas normas de la PCI.

¿El backend seguro?

Lo más curioso es que "el entorno seguro" debe aplicarse a toda la infraestructura, también al backend y almacenamiento, para lo que se deben hacer auditorías de seguridad periódicas. Y no hace falta más que pedir un documento que no existe en la web de Presto Parking para ver que no tienen ni el software actualizado ni los errores controlados.

Figura 7: Errores TomCat de versión desactualizada no controlados

De hecho, si miramos la última versión de la rama Apache TomCat 7.0 vemos que, a día de hoy, es la 7.0.77 y esta versión es la 7.0.61, así que hace tiempo que no se actualiza. Además, el panel de administración de Presto Parking está público y sin cifrado HTTPs, así que un robo de credenciales de cualquiera de los administradores y adios toda la base de datos de tarjetas de crédito. ¿Las tendrán bien cifradas? Si son PCI Compliance deberían, y si no, deberían tener cuidado porque son un objetivo del Carding Básico, sí o sí.

Figura 8: Panel de administración sin HTTPs.. ¿tendrá 2FA?

Lo cierto es que hay por ahí entre 50.000 y 100.000 personas que, según Google Play Store, han instalado esta aplicación y la están usando y que han podido enviar su tarjeta de crédito. Y, visto esto, la pregunta es si estará todo bien como para estar tranquilo. ¿Vosotros qué creéis?

Autor: José C. A.

15 comentarios:

  1. Pregunta: ¿Es tan bueno un certificado de let's encrypt Como el de comodo?

    ResponderEliminar
  2. Respuesta corta: Sí

    Respuesta larga: Ambas son CA (Entidades certificadoras) de confianza (es decir que los dispositivos confían en los certificados firmados por ellas) por lo que no puedes decir que una es mejor que la otra, otro tema es que hablases de los tipos de certificados, ya que Comodo ofrece tipos certificados más avanzados (EV por ejemplo), sin embargo estos certificados valen una cuantía importante de dinero, pero si ostentas por un PositiveSSL, obtendrás un certificado igual a los de Let's Encrypt con la diferencia de que en Let's Encrypt te permitirán poner más subdominios aparte del WWW y raiz

    ResponderEliminar
  3. Hola! nunca me había parado a pensar en esto para apps de este tipo (bueno, o de cualquiera) simplemente confiaba en que en esta época ya deberían funcionar todas con la mínima seguridad...

    Yo personalmente, si te sirve de ayuda, para el tema de las zonas verde/azul uso la app e-park https://www.e-park.es/es y funciona de lujo, no sólo para Madrid. Además si te multan y tienes ticket activo la puedes reclamar desde ahí directamente...

    Muy buen post... un saludo!

    ResponderEliminar
  4. La prrgunta clara es saber si realmente han pasado la auditoría o bien han colocado el logo sin más. Quizás la entidad que ha adjudicado el servicio tenga que verificar la auditoría, si se ha pasado satisfactoriamente o bien con alegaciones, te dejan un periodo de tiempo para subsanar los errores, y sobre todo si la forma de ofuscar los datos de la tarjeta son eficaces.

    ResponderEliminar
  5. Para saber si realmente son PCI Compliant o no, debería ser tan sencillo como pedirle a la empresa su AoC y último escaneo trimestral de red por ASV.

    ResponderEliminar
  6. La gran pregunta es si entre tanto deliberar al final te multaron los de la hora. .... jajajajja es broma, buena información, u gracias como siempre

    ResponderEliminar
  7. Cuando entro en mi Cuenta de Presto Parking si es https://

    https://secure.prestoparking.com/mobipayparking/reg.jsf

    ¿Están los datos del articulo actualizados?

    ResponderEliminar
  8. Yo les planteé la duda tras leer la entrada y su respuesta fue la siguiente:

    Estimado cliente,

    le mandamos el escaneo PCI que muestra que el sistema cumple con los requisitos PCI.
    Los datos de la tarjeta se transfieren desde la app hasta el servidor con https y en el servidor se codifican los datos de la tarjeta. Si el autor habría decompilado el código de la app lo habría visto.

    Si entra en el registro web podrá ver que se utiliza también https.

    El documento adjunto está en este enlace: https://drive.google.com/file/d/0B1BT-q4A2FCxNHN0LUgtYU1VOG05T05JNTBlYkZRZWR0d0RZ/view?usp=sharing

    Saludos.

    ResponderEliminar
  9. @Fran Sánchez, el autor no decompiló nada. Solo se fue a la web y se ve cómo pedis la tarjeta sin cifrado aún. Miralo tú mismo en las capturas. Aún en la web el cifrado es opcional... http://secure.prestoparking.com/mobipayparking/reg.jsf va en HTTP no en HTTPs

    Saludos!

    ResponderEliminar
  10. Buenas, Chema.

    Creo que ha habido una confusión... yo no soy de Presto Parking ni pido nada.

    Yo soy un seguidor de la web (es una de mis referencias) y, tras leer el artículo, decidí escribir a los de Presto Parking como usuario preocupado por el análisis del autor.

    Lo que he hecho es poner aquí su respuesta a modo de información, por si puede servir... pero no seré yo quien defienda nada de nadie... de hecho, me fío más de lo que ha dicho el autor que de lo que dice Presto Parking... pero, dado que el autor dudaba de la certificación PCI y Presto Parking al responderme me mandó escaneado su certificación, me pareció bien compartirla aquí.

    Lo dicho, no he comentado para defender a nadie, sólo para ampliar información porque no me esperaba que al "preguntar a la fuente" fuera a obtener respuesta alguna y me sorprendió recibirla.

    A nivel de usuario voy a replantearme el uso de la aplicación y, desde luego, borrar mi información de tarjetas.

    Espero haberlo aclarado.

    Un fuerte abrazo maligno ;)

    ResponderEliminar
  11. Es una broma?

    https://secure.prestoparking.com/mobipayparking/authToken?username=34666666666&password=12345

    Devuelve un json si la pass es correcta. Y error 401 si es incorrecta. Además usando password numéricas!!! y sin numero de intentos. He probado con dos usuarios y me ha asignado una pass numerica de 3 cifras y luego otra de 5 cifras. Creí que ya no existían web así de "fáciles". Espero que tenga limite de intentos aunque sea al llegar a 100 intentos o algo así.

    ResponderEliminar
  12. No se si cumple PCI o si no pero si no tiene numero de intentos se podría hacer un programa que lo reviente en menos de 20 min.

    ResponderEliminar
  13. Si alguien de por aquí trabaja para esa pagina por favor poned al menos 4 o 5 intentos de límite y password con cifras y letras. Con solo eso vais a conseguir un 90% de mejora .. porque es un "colahero"

    ResponderEliminar
  14. Por favor me bajé la aplicación x equivocación,la quité de mi app y me siguen cobrando el € mensual....kiero que no me lo cobren más,como lo hago??

    ResponderEliminar