Si creías que la rutina de pedir pizza a domicilio no podía mejorar, imagínate no tener que pagar por ella.
Eso es lo que logró el consultor de ciberserguridad británico Paul Price, al descubrir una falla en la aplicación móvil de Domino's Pizza para Android que le permitió realizar una orden sin pagarla al final del proceso. El problema radicaba en que no se hacían las validaciones correspondientes en el lado del servidor, ya que los pagos se procesaban en el lado del cliente de la app.
Domino's ya corrigió la vulnerabilidad, así que ya no es posible explotarla (¡ni recibir pizza gratis a domicilio!). Según explica Price en su blog, todo comenzó cuando notó que en forma "aparentemente aleatoria" se le entregaban cupones de descuento a los clientes habituales, para que los usen en sus compras posteriores.
He pedido suficiente pizza como para saber que al final del proceso de la orden a veces, aparentemente al azar, recibes un código de voucher de £10 para tu próxima orden. Naturalmente, me intrigó cómo se generaba.
Después de analizar el código fuente de las aplicaciones me doy cuenta de que el código se genera en el servidor a través de una llamada a la API. Uso un proxy (Burp) para monitorear el tráfico web entre mi teléfono y el servidor de la API de Domino's y ejecuto el proceso de pedido. Algo llama mi atención de inmediato...
La aplicación de Domino's estaba procesando los pagos por sí misma desde el lado del cliente a través de una puerta de enlace (gateway) de pago.
Cuando decidió revisar cómo se asignaban los cupones, encontró la falla: usando un número de tarjeta de crédito inventado, logró interceptar la respuesta y cambiar la línea de código correspondiente al pago a "aceptado" en vez de "rechazado"; de esta manera, encargó su pizza sin haberla pagado. El sistema, al no hacer la validación correspondiente, consideraba el pago como válido.
Price asegura que la culpa no le permitió abusar de esta falla y, cuando recibió al repartidor en su domicilio, insistió en pagarle en efectivo, a pesar de que este creía que el pedido estaba pago.