Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

305
Vistas
¿Cómo resolver un secuestro de sesión en mi aplicación firebase que usa aws amplificar y congnito para las sesiones de autenticación?

Actualmente tengo mi aplicación implementada en Firebase y uso AWS Amplify con AWS Cognito para autenticar usuarios y sesiones.

El equipo de seguridad informó que se trata de una vulnerabilidad de secuestro de sesión.

 # Used Cookie [ { "domain": "my_domain.firebaseapp.com", "expirationDate": 1654892898, "hostOnly": true, "httpOnly": false, "name": "IdToken", "path": "/", "sameSite": null, "secure": false, "session": false, "storeId": null, "value": "XXXXXXX" } ] # LocalStorage { "CognitoIdentityServiceProvider.MY_ID_CLIENT_APP.LastAuthUser": "MY_SAML_PROVIDER", "CognitoIdentityServiceProvider.MY_ID_CLIENT_APP.MY_SAML_PROVIDER.accessToken": "XXXXX", "amplify-redirected-from-hosted-ui": "true", "CognitoIdentityServiceProvider.MY_ID_CLIENT_APP.MY_SAML_PROVIDER.idToken": "XXXXX", "amplify-signin-with-hostedUI": "true", "CognitoIdentityServiceProvider.MY_ID_CLIENT_APP.MY_SAML_PROVIDER.clockDrift": "0", "CognitoIdentityServiceProvider.MY_ID_CLIENT_APP.MY_SAML_PROVIDER.refreshToken": "XXXXX" }

Mi código usa:

 //Verify Session useEffect(() => { const paths = queryString.parse(window.location.search) if (!state.NotLogin) { if (paths.code && paths.state) { setloadHosted(true) } Auth.currentAuthenticatedUser().then(res=> { let finalUser = "" let usernameCognito = res.username.split("_") if (usernameCognito.length === 2) { finalUser = usernameCognito[1] } else { finalUser = usernameCognito } sweetAlert(`Welcome, ${finalUser}`, "success") Cookies.set('IdToken', res.signInUserSession.idToken.jwtToken, { expires: 1 }) actions({ type: "setState", payload: { ...state, username: finalUser } }) setloadHosted(false) setShowOption(true) }) } else{ setShowOption(true) } }, [])
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En principio, la detección del secuestro de sesión se puede realizar mediante:

  1. Vincular una sesión a una dirección IP
  2. Uso de tokens de actualización rotativos

El (1) método requiere que almacene la dirección IP de la solicitud de inicio/registro en el token de sesión/JWT creado. En cada solicitud posterior, verificaría que la IP en el token sea la misma que la IP de la solicitud. De lo contrario, puede devolver un 401. Si bien este método agrega una capa adicional de protección, puede generar falsos negativos/positivos (por ejemplo, qué sucede si el usuario comienza a usar una VPN).

El método (2) es más robusto, pero mucho más complejo de implementar. En pocas palabras, debe cambiar el token de actualización en cada uso (no estoy seguro de si cognito tiene eso), y si se usa un token de actualización anterior después de que ya se emitió uno nuevo, entonces es un robo de sesión. Esto casi no tiene falsos positivos o negativos, suponiendo que la implementación se realice correctamente. Entrar en los detalles de implementación en esta respuesta sería difícil, por lo que estoy vinculando un blog: https://supertokens.com/blog/the-best-way-to-securely-manage-user-sessions

Finalmente, puede disminuir el área de superficie del vector de ataque:

  • Use cookies httpOnly para almacenar tokens de sesión que evitarán el robo de tokens a través de XSS
  • Habilite la rotación de claves de firma JWT (no estoy seguro de si Cognito tiene eso, pero si lo tienen, habilítelo).
  • Mantenga una vida útil corta para el token de acceso y una vida útil larga para el token de actualización. De esta manera, en caso de que el token de acceso se vea comprometido, el riesgo es limitado. Si el token de actualización se ve comprometido, entonces la detección de robo de sesión puede activarse (suponiendo que esté utilizando tokens de actualización rotativos)
  • Asegúrese de protegerse contra los ataques CSRF.
  • Si está almacenando tokens de sesión usted mismo, asegúrese de almacenar solo su versión hash en la base de datos. Esto limita su explotación en caso de que la base de datos se vea comprometida.

Si Cognito no tiene algunas de estas características, considere usar una solución diferente para la administración de sesiones. En este caso, puede consumir el token de ID enviado por Cognito para crear una nueva sesión basada en cookies para su aplicación y, idealmente, esta sesión debería tener todas las funciones de seguridad.

¡Espero que esto ayude!

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda