Limitar las búsquedas de base de datos por metadatos de token

1

Tengo una aplicación. Tras un inicio de sesión exitoso, los usuarios obtienen un token de autenticación jwt que contiene varios datos y caduca en 30 minutos. Se necesita un token válido para que la aplicación pueda llamar a varias funciones de back-end y acceder a los recursos de la base de datos. Sin embargo, una vez que se verifica el token, las funciones de backend no imponen más restricciones de seguridad. Me temo que esto podría resultar en el siguiente ataque:

1) Los piratas informáticos crean una cuenta de usuario válida (con información de bs) e inician sesión. Ahora tienen un token válido.

2) Usando ese token, luego manipulan varias solicitudes al backend: Por ejemplo, proporcionan el ID de usuario de otras partes en el cuerpo de la solicitud y, por lo tanto, pueden acceder a los recursos del servidor como si fueran ese usuario.

Ejemplo concreto

Hay una función de backend llamada deleteUser . Borra el usuario asociado con el ID de usuario que se pasa en el cuerpo de la solicitud https. Antes de ser llamada, la función valida el token, pero no comprueba si el token corresponde al userId en el cuerpo de la solicitud. Al pasar un token asociado con un user_A y una identificación que corresponde a user_B, podré usar el token de user_A para eliminar user_B.

La solución simple

Compruebe que los metadatos del token coincidan con los parámetros que se pasan en el cuerpo de la solicitud. Sin embargo, esto no siempre es simple. A veces, la información que se pasa en el cuerpo de la solicitud es varios pasos eliminados de los datos contenidos en el token del usuario. P.ej. una función deleteProperty toma un property_id en el cuerpo de la solicitud, pero para verificar que el property_id en cuestión se relacione con los metadatos del token de autenticación, se necesitarían algunas operaciones de base de datos costosas; esto ralentiza la aplicación y aumenta la carga computacional en los servidores.

¿Hay un nombre para este tipo de ataque? ¿Cuál es la forma recomendada para detenerlo? ¿Hay mejores soluciones que las que he descrito anteriormente?

    
pregunta Logister 26.11.2017 - 21:29
fuente

1 respuesta

2

Esto sería lo que la última lista de OWASP llama "Control de Acceso Roto". Está requiriendo autenticación, pero no está comprobando que el usuario tenga permiso para acceder al recurso.

Realmente no tiene otra opción que verificar que el usuario tenga los permisos adecuados. Esto significa que después de validar el token, tendrá que leer el valor del ID de usuario y pasarlo a las funciones que operan en los datos.

Dependiendo de su idioma o marco, también puede tener un método conveniente para acceder a la identificación de usuario autenticada a través de algún otro mecanismo.

Si ralentiza la aplicación o aumenta la carga, que así sea. La alternativa es filtrar datos mediante una simple manipulación del cuerpo de la solicitud o los parámetros de la URL.

También debe asegurarse de proteger las funciones de nivel de administrador con las reclamaciones adecuadas en el JWT.

    
respondido por el ste-fu 26.11.2017 - 22:07
fuente

Lea otras preguntas en las etiquetas