OJO, Esta publicación está relacionada con un concurso que se realizó hace tiempo atrás. Si están interesados en las vulnerabilidades que Eduardo denunció en su charla el día de hoy 25 de abril (2018) pueden seguir leyendo el tweet (ya que era un hilo) o ir al siguiente link: https://adderou.cl/presentacion-owasp-tus-compras-gratis/
Muy concurrido fue el concurso realizado por el Banco de Chile en donde se regalaban 51 pasajes dobles para ti y tus amigos. La dinámica era simple y las bases lo mencionaba, la idea era que una persona (el piloto) crease un avión (simbólicamente hablando) lo que habilitaba un link para compartir en sus redes sociales, para luego, llenar el avión con 50 personas que hayas invitado. Las restricciones eran de que las 50 personas fueran clientes del banco y que posean una tarjeta de débito o crédito activa, además de que no podían concursar empleados del banco ni de la agencia encargada del desarrollo de la parte técnica del concurso, la agencia Wunderman.
Parrafo contenido en las bases del concurso
Como se muestra en la imagen anterior, las bases eran claras: El primer piloto en llenar su avión con 50 clientes correctamente registrados se llevaría el premio. Aun así, luego del lanzamiento del concurso, muchos se sorprendieron con que el avión no solo soportaba 50 personas sino que podía llenarse con más y, aún es más, debías seleccionar a las 50 que querías que participen.
Peor fue la sorpresa de varios al intentar confirmar su avión debido a que presentaba problemas para enviar el formulario. El error para cualquier mortal podría deberse a lo nefasto que es, técnicamente hablando, recibir una carga importante de consultas en los servidores destinados al concurso (es como cuando intentas saber el resultado de la PSU y todos se conectan para saberlos por lo que la pagina se cae). Aun así, era más simple que eso. Si bien la pagina dejaba de funcionar en ocasiones, la razón de raíz era que el botón destinado a confirmar el avión (y seleccionar a las 50 personas) no realizaba la acción de confirmar implementada en el código, si no, llamaba a una función inexistente por lo que lanzaba un error. Es como cuando tienes un interruptor para prender la luz en tu casa pero este no está conectado a los cables del circuito. No vas a prender nada.
Si quieren sorprenderse aún más, cuando a los minutos después conectaron los cables y actualizaron la pagina, nos dimos cuenta que podías confirmar un avión con solo 1 persona a bordo y despues si querias llenar el avión con las 50 personas. Entonces, dado lo malo de la implementación del sitio, podrías confirmar un avión sin cumplir con las bases para después intentar cumplirlas y así tener una fecha que le ganaría a cualquiera que intentase cumplir con ellas.
Y esto dejando afuera las personas que tenían problemas al ingresar mediante el móvil (por ejemplo, los ruts -k no podían participar).
Por todo lo anterior, y dado que el hecho de confirmar el avión ni siquiera estaba en las bases, lo consideramos viciado. Pero imaginemos que el banco y la agencia encargada se dieron cuenta de ello. Ejemplifiquemos con dos casos, el avión de la ganadora y otro en el que participamos.
Si consultamos a los datos de ambos aviones (consulta que se puede lograr a partir de leer el código público de la implementación) se obtienen dos conjuntos de personas. No publicaremos los datos 100% reales para resguardar los datos de las personas pero a continuación mostramos una imagen de como es la estructura de ellas:
Datos obtenidos desde el sitio web del concurso. Esto podía ser extraído por cualquier persona que entraba al sitio.
A la izquierda, con borde naranjo, se puede observar el conjunto de personas del avión “ganador” que poseía 52 personas, y a la derecha, con borde azul, el conjunto de personas del otro avión que poseía 100 personas. Estos conjuntos están por orden de registro, o sea, si te decía que fuiste la persona 9 en entrar, apareces noveno en este conjunto.
Las cosas a notar son varias pero detallemos los nombres de todas las variables. El “id” es el identificador incremental que uno posee en la base de datos, si uno se registra primero que otro tendrá un valor más bajo que esa persona (esto independiente del avión en que te registraste). “rut”, “nombre”, “apepaterno” y “apematerno” son los datos personales de cada uno de los participantes. El valor de “estado” es 0 o 1 e indica si la persona está confirmada, esto quiere decir que fue marcada por el piloto y al confirmar el avión con las 50 personas, esta fue marcada. Finalmente el valor de “seleccionado” es parecido al anterior con valores 0 o 1, y son las personas que fueron seleccionadas al momento de confirmar al avión pero no necesariamente confirmadas.
Después de estos antecedentes, y mirando las imagenes nuevamente, se puede observar que la persona número 50 en ambos casos posee “estado” 0 y “seleccionado” 1. O sea, no se confirmaron todas las personas al momento de enviarse la comprobación del avión. Esto se debe a otro error en el sitio que muchos vivieron porque a algunos les marcó solo a las 19 primeras personas del avión. Aun así, el avión ganador solo tiene 14 personas confirmadas. Las razones a nivel de código las desconocemos.
A partir de lo mencionado en el párrafo anterior uno cae en la implicancia de que la confirmación del avión no fue contabilizada para seleccionar al ganador del concurso porque, si no, todas las personas participes del concurso hubiesen perdido debido a la falla en el sitio.
Pero volvamos a las bases. Si el Banco de Chile o la agencia Wunderman se guiaron por quién llenó primero el avión, la persona número 50 del avión ganador debería tener un identificador más bajo que la persona número 50 de todos los aviones restantes. Si comparamos los datos del avión “ganador”, este tiene un id 27.798, en cambio, el avión en que participamos tiene una persona con id 5.178, es decir, el avión donde participamos se llenó antes que el avión “ganador”. Esto nos parece extraño, raro, singular, misterioso, sorprendente. Para finalizar, en las bases se menciona que ante dudas y personas registradas incorrectamente se “desempataba” con quien tenía más personas registradas. El avión en el que participamos poseía 100, en cambio, el ganador 52.
Desde ya, no decimos que el avión con el que comparamos al ganador sea el que realmente ganó, sino, que el concurso siembra un millón de dudas. Incluso, dada la última cláusula el banco podrían cambiar las bases sin que nosotros podamos decir nada al respecto. Es decir, usualmente se hacen estos concursos para fidelizar a la gente y quedar encantados con el premio que regalan pero, finalmente, dadas las decisiones que toman uno queda desencantado y dudando del supuesto prestigio de las empresas relacionadas.
Banco de Chile, Travel Club y Agencia Wunderman, lo único que pedimos sería claridad. En el día de hoy, donde Chile está lleno de gente que engaña y se aprovecha, ¿No sería mejor que fuéramos transparentes?
Y tú, lector, ¿qué opinas de este tipo de fallas y cambios en los concursos?