La imagen para atraer la atención se toma aquí.La pizzería Papa Jones está abierta en muchos países, el motor del sitio es diferente en casi todas partes. Sin embargo, el motor, que se desarrolló en algún lugar de Rusia, también se usa en sitios para Polonia, Kirguistán y Bielorrusia. Lo consideraremos
Puede ver el motor en sí mismo en un
sitio móvil para Rusia , por ejemplo. ¿Por qué móvil? Porque el
escritorio ni siquiera tiene un formulario de registro, aunque esto se explica por el hecho de que el registro es automático al realizar el pedido. Una vez decidí comprobar cómo están las cosas con las vulnerabilidades allí.
Dado que elegir aplicaciones es la forma más fácil, lo tomé. Para mi sorpresa, descubrí que la aplicación es solo un contenedor extraño para el sitio, aunque el servidor puede distinguir claramente también de quién proviene la solicitud durante las solicitudes. Resultó posible probar con igual éxito tanto la aplicación como la versión móvil. La única diferencia es que la plataforma: el campo mobSite se transmite para el sitio móvil, y las aplicaciones informan el sistema y la versión.
Logré éxito de inmediato, porque comencé con la recuperación de contraseña. Sugiero un vistazo a cómo sucede esto.
Primero necesita obtener el código en sí mismo en SMS. Le pediremos el enlace con JSON en el cuerpo:
POST https://www.papajohns.ru/api/auth/recovery/requestCode { "username": "+79", "transport": "sms", "lang": "ru", "version": "1.0.34", "platform": "Android" }
El servidor responde:
{ "status": true }
Extraño, hay pocos datos. Al menos un identificador o sesión, pero busque más.
Un código de cuatro dígitos viene a SMS (solo números). No lo enviaremos, ya que cambiar la contraseña bloqueará los puntos durante dos semanas, pero tenía planes para ellos. Intentemos enviar al azar:
POST https://www.papajohns.ru/api/auth/recovery/updatePassword { "code": "1234", "password": "123456qwe", "transport": "sms", "version": "1.0.34", "platform": "Android" }
Estaba muy impresionado. Resultó que cuando solicita SMS, el número de teléfono + código se escribe en la base de datos en SMS, y cuando solicita la recuperación por código, el servidor verifica el código en la base de datos y, si se encuentra el código, establece la contraseña recibida en la base de datos.
La situación está empeorando porque no hay restricción en la enumeración de código. Empíricamente, descubrí que al intentar en 10 minutos, el script garantiza una contraseña. ¿Y si solicita la recuperación de todos los 10,000 códigos de 0000 a 9999?
El 12 de mayo, informé todos los detalles directamente al desarrollador del sitio (bueno, al menos él se los presentó). El 19 de junio, me interesé en cómo van las cosas para cerrar la vulnerabilidad. El guión envió unas trescientas solicitudes y se puso de pie. Después de verificar el estado del desarrollador, descubrí que el servidor ahora está bloqueando por IP si recibe 5 solicitudes incorrectas. Hoy volví a comprobar si la lógica ha cambiado y estoy listo para informar: no ha cambiado. El servidor también es indiferente ahora: envié 3.000 solicitudes sin demasiada dificultad, por lo que creo que las 10.000 se irán sin problemas.
El peligro de revelar todas las direcciones almacenadas solo por la presencia de un número de teléfono móvil sigue siendo significativo. Las tarjetas bancarias se eliminan cuando se restablece la contraseña. Obtuve 1000 puntos y pizza. La pizza es deliciosa, pero no guardaré la dirección allí.