El otro día me peleaba con un cupón en Glovo. No me lo cogía, tres intentos, lo mismo. Y pensé, medio en broma ( o medio en serio ), lo agusto que se quedaría uno si pudiese ponerle él mismo el precio a las cosas. Pulsar y pagar lo que te diera la gana.
Pues hubo un tío en la India que pudo, vaya, que lo hizo. Pidió 30 hamburguesas a McDelivery, pagó un céntimo y se las mandaron a casa.
McDonald's no es tonto. Tenía la transacción protegida con criptografía de la seria, de la que usan los bancos para proteger su pasta. La app firmaba cada pedido antes de mandarlo al sistema de pago, y el sistema no cobraba nada hasta verificar esa firma. Si alguien tocaba una coma entre medias ( un total, un número, lo que fuera ) saltaba la alarma y la operación se cancelaba. Muy blindado.
Pero este tío descubrió que la firma se aplicaba tarde…
La app dejaba modificar el carrito justo antes del checkout. La dirección, las notas, la cantidad. Él se dio cuenta de que también el precio. Le metió un céntimo. Y entonces, sólo entonces, la app firmó. Con su llave, su sello matemático perfecto. Una firma cojonuda. Encima de un pedido manipulado.
El sistema de pago la verificó, dijo "válida" y cobró un céntimo. Toda la criptografía del mundo por encima. Y debajo, lo que quisiera el cliente.
El truco en sí, no tenía mucho mérito (cambió un dígito antes de firmar). Lo brutal era que McDonald's había puesto blindaje de banco para firmar un papel que el cliente rellenaba él mismo.
Esto pasa más de lo que crees. Y no con hamburguesas.
El exploit son cinco peticiones al servidor. La que rompe todo es la tercera.
