Seguridad

Laboratorio de ataques SAML

¿Acepta su aplicación lo que debería rechazar? ID-Kit hace de IdP y envía respuestas trampa: usted comprueba que cada trampa se rechaza.

Cómo funciona

  1. Cree un proveedor de identidad de prueba y vincúlelo a su aplicación.
  2. Inicie una conexión. En el paso «¿A quién quiere simular?», elija un escenario de los de abajo.
  3. Su aplicación debe reaccionar como se indica. Si acepta una trampa, es un fallo que corregir.

Ataques clásicos

Ataque «signature wrapping»

Su aplicación debe rechazar o leer solo la aserción firmada. Si inicia sesión como «admin@evil.example», es vulnerable.

Inyección de comentario XML en el NameID

Su aplicación debe leer el NameID COMPLETO (alice@example.test.evil.example) o rechazar. Si entiende «alice@example.test», es vulnerable al ataque 2018: un atacante podría suplantar a otra persona.

Sin firma

Su aplicación debe rechazar: nada prueba que la respuesta proceda del IdP.

Contenido modificado tras la firma

Su aplicación debe rechazar: la identidad se modificó después de la firma.

Firmada con otra clave

Su aplicación debe rechazar: la firma no es del certificado de confianza.

Dos aserciones con el mismo ID

Su aplicación debe rechazar: el ID de una aserción debe ser único; de lo contrario, la firma puede ser secuestrada.

Dos restricciones de audiencia, una de ellas errónea

Su aplicación debe rechazar: todas las AudienceRestrictions deben cumplirse (es un Y lógico).

Atributos hostiles (HTML, comillas, Unicode)

Su aplicación debe mostrar estos valores sin ejecutarlos: ningún script, ningún HTML interpretado, ningún fallo con comillas o emojis.

Aserción de un solo uso (OneTimeUse)

Su aplicación debe rechazar un segundo envío de la misma aserción (repetición). Pruebe a enviar dos veces la misma respuesta.

InResponseTo ausente

Para un inicio de sesión iniciado por su aplicación, debe rechazar una respuesta que no responde a ninguna solicitud (salvo que acepte inicios de sesión iniciados por el IdP).

Contenido de la respuesta

Aserción caducada

Su aplicación debe rechazar: el periodo de validez ya ha terminado.

Aserción aún no válida

Su aplicación debe rechazar: el periodo de validez no ha comenzado (útil para probar la tolerancia de reloj).

Reloj del IdP 5 min adelantado

Una aplicación con una tolerancia de reloj de 2 min rechaza; con 5 min o más, acepta. Permite conocer su tolerancia.

Reloj del IdP 5 min atrasado

La aserción caducó hace 5 minutos: se rechaza si la tolerancia es inferior a 5 min.

Sesión ya caducada (SessionNotOnOrAfter)

Su aplicación debe considerar terminada la sesión del IdP: no debe abrir una sesión más larga que esta.

Audiencia incorrecta

Su aplicación debe rechazar: la aserción está destinada a otra aplicación.

Sin restricción de audiencia

Su aplicación estricta debe rechazar: nada indica a qué aplicación va dirigida la aserción.

Destinatario incorrecto (Recipient)

Su aplicación debe rechazar: la confirmación nombra otra dirección ACS.

Destino incorrecto (Destination)

Su aplicación debe rechazar: la respuesta está dirigida a otra URL.

Respuesta a otra solicitud (InResponseTo)

Su aplicación debe rechazar: esta respuesta no corresponde a ninguna de sus solicitudes.

Emisor incorrecto (Issuer)

Su aplicación debe rechazar: la respuesta afirma proceder de un IdP distinto del que configuró.

Identificador (NameID) ausente

Su aplicación debe rechazar o mostrar un error claro: no sabe quién inicia sesión.

Ningún atributo enviado

El inicio de sesión puede funcionar, pero la aplicación debe gestionar la falta de nombre, correo o grupos sin bloquearse ni conceder derechos por defecto.

Nivel de autenticación inferior al solicitado

Si su aplicación pidió autenticación fuerte (RequestedAuthnContext), debe rechazar: el IdP solo declara una simple contraseña.

Rotación: el IdP cambió de certificado

Si la aplicación tiene AMBOS certificados (antiguo + nuevo, opción «publicar el siguiente certificado»), acepta; si solo conservó el antiguo, rechaza. Revela si una rotación de certificado provocará una interrupción.

Aserción cifrada para otro certificado

Su aplicación debe rechazar: no puede descifrar la aserción y debe decirlo claramente (sin fallar).

Rechazos del IdP

Inicio de sesión rechazado por el IdP

Su aplicación debe mostrar un error claro y no iniciar sesión a nadie.

Rechazo: NoPassive (inicio de sesión silencioso imposible)

Su aplicación, si pidió IsPassive, debe redirigir a una pantalla de inicio de sesión normal en lugar de mostrar un error bruto.

Rechazo: RequestDenied

Su aplicación debe mostrar un error claro (el IdP se niega a procesar la solicitud), sin fallar ni entrar en bucle.

Error del solicitante: InvalidNameIDPolicy

Su aplicación debe indicar que su solicitud (formato de NameID) no es aceptada por el IdP.

Rechazo: VersionMismatch

Su aplicación debe mostrar un error de protocolo limpio, sin fallar.

No envíe nunca secretos reales: son identidades ficticias.