Vulnerabilidades de los minoristas: tres casos en los que se pudo obtener OTP en la solicitud

Al ingresar cuentas personales de varios servicios, por razones de seguridad, a menudo se usa 2FA; además del inicio de sesión y la contraseña, debe ingresar un código único.

Pero, resultó que no todo es tan seguro incluso con la autenticación de dos factores: en el último año encontré tres (!) Servicios, cuando un código de inicio de sesión único, que se envía al cliente por SMS, se podía ver en la solicitud.

Más brevemente sobre lo que amenazó con ejemplos específicos.

1. Una red popular de estaciones de servicio, más de 500,000 clientes registrados.

Una solicitud al ingresar a la versión web de su cuenta personal:
POST https://someazs.ua/ua/profile/auth/ Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: gzip, deflate, br Accept-Language: ru,en-US;q=0.9,en;q=0.8,uk;q=0.7 Connection: keep-alive Content-Length: 408 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=6n3l2o90hfb020u9ag020u8ha1; usersomeazs_popupcoupons=1;... Host: someazs.ua Origin: https://someazs.ua Referer: https://someazs.ua/ua/login/ User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 X-Compress: null X-Requested-With: XMLHttpRequest data[phone_mask]: 951234567 data[phone]: 0951234567 




Respuesta: {"Status":0,"Code":"7038","status":true,"step2":true}

El código de SMS - 7038 - es visible simplemente en la respuesta del servidor.

Es decir, en el sitio, al ingresar la cuenta personal, la respuesta contenía un código de inicio de sesión único, que se envía al cliente por SMS: puede iniciar sesión en la cuenta de otra persona especificando solo el número de teléfono del cliente y ver la OTP en la solicitud.

En su cuenta personal están disponibles: número de tarjeta de fidelidad, nombre, saldo (bonificación en UAH, litro, café), historial de transacciones, en la configuración: fecha de nacimiento, correo electrónico del cliente, etc.



Con la ayuda de otras acciones de naturaleza no técnica (por ejemplo, llamada del cliente), con la suerte adecuada, uno podría usar dinero / litros / café del cliente. ¿Por qué estoy escribiendo "con buena suerte"? Cuando hablé sobre el problema, me informaron que las liquidaciones de los bonos de otras personas no son tan fáciles de realizar, incluso si tiene acceso a la cuenta, ya que hay cheques adicionales. Sin embargo ...

El error fue corregido rápidamente, agradecido.



2. Una red de tiendas sociales (similar a Fix-Price ), una aplicación móvil (más de 100 mil descargas)



Al rastrear solicitudes a través de Fiddler, noté lo siguiente. Al ingresar a la aplicación móvil, luego de ingresar el número de teléfono y la tarjeta de fidelidad, se envía un código único al cliente.

El problema es que ejecuta una solicitud GET del formulario:
 https://bulk.somesmssender.com/?sending_method=sms&from=someretailes&user=onviber4821&txt=%D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234&phone=380987654321&sign=42f66957a03090eb90556b0ef7fed2e1 


El código de una sola vez es visible directamente en esta solicitud: el texto del SMS que se envía es
 %D0%9A%D0%BE%D0%B4+%D0%BF%D0%BE%D0%B4%D1%82%D0%B2%D0%B5%D1%80%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%3A+1234& 


Una conversión simple informa: Código + confirmación: +1234



Es decir en la aplicación en sí, puede ver qué código se enviará. Aquí también puede ingresar en las cuentas de otras personas, ya sin un segundo factor.

Por alguna razón, los clientes de esta red son los menos protegidos contra el fraude, por lo que intenté muchas veces transmitir información a la empresa. Escribí tres veces en agosto a la dirección que se indicaba en la página de la aplicación en Play Market: no recibí una sola respuesta, ni siquiera una automática.

Más tarde escribí a una compañía cuyo servicio de distribución de SMS utilizan. Me respondieron que es necesario contactar al propietario de la aplicación móvil, ya que, por su parte, no pueden influir en el desarrollo y la transferencia de información de esta empresa.

Esto es cierto, pero supuse que el servicio de mensajería podría afectarlos como socio / cliente. Además, la razón por la que escribí al servicio de correo es que la solicitud GET que especifiqué es precisamente su desarrollo, y es probable que sus otros clientes experimenten la misma situación. Sugerí que sería deseable que el servicio corrigiera la lógica de distribución, no transmitir los números de teléfono de los clientes y el código de una sola vez en la solicitud, no me respondieron.

Un poco sobre cómo más intenté transmitir el problema
Luego, en el sitio web de la tienda, escribí al correo electrónico de contacto, esperé, y nuevamente nada. Pero como soy terco, encontré en el mismo sitio todos los contactos posibles (tanto buzones generales como direcciones personales) y les escribí, como saben, nadie respondió tampoco.
Por lo tanto, más tarde recurrí al chat y directamente en el chat hice la pregunta de si recibieron mis cartas. Al principio respondieron que no veían, luego encontraron y prometieron que lo darían.

Curiosamente, además de la falta de reacción al correo electrónico en la dirección principal de la aplicación, después de chatear recibí cartas. En uno de ellos vi cómo me trajeron al sistema: "Hombre inteligente"



Actitud regular hacia el cliente.

La última vez que lo comprobé, no había solución de Avrora .
Tampoco hubo correcciones por parte del servicio de distribución, pero aquí la situación es más grave, por lo que no indico directamente el nombre del servicio.



3. Una aplicación móvil para almacenar tarjetas de descuento y realizar pagos móviles (más de 130 mil clientes)

En la entrada solo debe ingresar el correo electrónico y el código. En este caso, la consulta se ejecuta:

 POST http://api.somewallet.com/mobileclient.svc/getRegistrationCode HTTP/1.1 Content-Type: application/json; charset=UTF-8 Content-Length: 100 Host: api.somewallet.com Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.12.3 {"request":{"Culture":"ru_RU","DeviceIdentifier":"4514825570005447","Identifier":"some@email"}} 

Aquí está la respuesta:

 {"GetRegistrationCodeResult":{"ErrorMessage":{"Code":0,"LogReferenceId":0,"Message":"SUCCESS"},"Data":{"Code":"044912"}}} 


Aquí, la respuesta también muestra el código que debe ingresarse (044912).

Después de iniciar sesión, obtuve acceso a las siguientes funciones:

  • viendo tarjetas de fidelidad y bonificaciones en ellos,
  • cupones para ciertas tiendas,
  • información de contacto sobre el cliente (números de teléfono y correo electrónico, fecha de nacimiento y nombre)
  • configurar, cambiar y eliminar un código de acceso de 4 dígitos,
  • ver tarjetas de pago
  • recibir un token de pago (similar al token de mi artículo anterior Cómo viajar en taxi a expensas de otra persona ).

Por lo tanto, todas las funciones de la aplicación podrían ser accesibles para cualquier persona que simplemente indique la dirección de correo electrónico del usuario de esta aplicación; no es necesario que encuentre un código único del usuario, ya que es visible inmediatamente después de la entrada. El problema es idéntico a los otros dos.

Respondieron a mi mensaje, arreglaron la vulnerabilidad y les agradecieron financieramente.



Podemos decir que a veces en los servicios puede omitir la autenticación de dos factores simplemente mirando las solicitudes de autorización. Y esto afecta tanto a los sitios web como a las aplicaciones móviles. Entonces, la próxima vez que desarrolle o pruebe servicios con una cuenta personal, preste atención a esto.

Source: https://habr.com/ru/post/465791/


All Articles