Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

306
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda