SAML
SAML 2.0 es un estándar de federación basado en XML que se usa para el inicio de sesión único corporativo: un proveedor de identidad emite una aserción firmada digitalmente sobre un usuario, y un proveedor de servicio se fía de ella. Es lo que hace funcionar a la mayor parte del parque corporativo instalado, mientras que el desarrollo nuevo suele elegir OpenID Connect.
El flujo es corto. El proveedor de servicio redirige al usuario al proveedor de identidad, este lo autentica y devuelve una aserción firmada que nombra al usuario y sus atributos, y el proveedor de servicio valida la firma y crea una sesión. Todo descansa sobre esa validación, porque la aserción viaja a través del navegador del usuario y está por tanto bajo su control.
Ahí es donde vive el hallazgo clásico de auditoría. Las implementaciones que procesan el documento antes de verificar la firma, las que verifican una firma sobre un elemento mientras leen los valores de otro, o las que aceptan una aserción firmada por cualquier certificado del almacén de confianza en vez de por el esperado, se pueden inducir todas a aceptar una aserción que el proveedor de identidad nunca emitió. El signature wrapping es el nombre general de esta familia, y es un defecto de implementación del proveedor de servicio y no un fallo del estándar. Las comprobaciones ausentes sobre audiencia, destinatario, ventana de validez y uso único son la misma clase de problema.
El otro punto que merece quedar anotado es la propia clave de firma: quien la tenga puede acuñar una aserción para cualquier usuario en cualquier aplicación federada sin tocar esas aplicaciones, así que su sitio está entre el material más sensible del parque. Cuando se reconstruye el inicio de sesión único, el destino habitual es OpenID Connect. Revisar las confianzas existentes forma parte del trabajo de bastionado de Microsoft 365 donde se revisan las confianzas de federación.