tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Visi贸n General de SAML
Security Assertion Markup Language (SAML) permite que los proveedores de identidad (IdP) se utilicen para enviar credenciales de autorizaci贸n a los proveedores de servicios (SP), facilitando el inicio de sesi贸n 煤nico (SSO). Este enfoque simplifica la gesti贸n de m煤ltiples inicios de sesi贸n al permitir que un solo conjunto de credenciales se utilice en m煤ltiples sitios web. Aprovecha XML para la comunicaci贸n estandarizada entre IdPs y SPs, vinculando la autenticaci贸n de la identidad del usuario con la autorizaci贸n del servicio.
Comparaci贸n entre SAML y OAuth
- SAML est谩 dise帽ado para proporcionar a las empresas un mayor control sobre la seguridad del inicio de sesi贸n SSO.
- OAuth est谩 dise帽ado para ser m谩s amigable con dispositivos m贸viles, utiliza JSON y es un esfuerzo colaborativo de empresas como Google y Twitter.
Flujo de Autenticaci贸n SAML
Para m谩s detalles, consulta la publicaci贸n completa en https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/. Este es un resumen:
El proceso de autenticaci贸n SAML implica varios pasos, como se ilustra en el esquema:
- Intento de Acceso a Recurso: El usuario intenta acceder a un recurso protegido.
- Generaci贸n de Solicitud SAML: El SP no reconoce al usuario y genera una Solicitud SAML.
- Redirecci贸n a IdP: El usuario es redirigido al IdP, con la Solicitud SAML pasando a trav茅s del navegador del usuario.
- IdP Recibe la Solicitud: El IdP recibe la Solicitud SAML.
- Autenticaci贸n en IdP: El IdP autentica al usuario.
- Validaci贸n del Usuario: El IdP valida la legitimidad del usuario para acceder al recurso solicitado.
- Creaci贸n de Respuesta SAML: El IdP genera una Respuesta SAML que contiene las afirmaciones necesarias.
- Redirecci贸n a la URL ACS del SP: El usuario es redirigido a la URL del Servicio Consumidor de Afirmaciones (ACS) del SP.
- Validaci贸n de la Respuesta SAML: El ACS valida la Respuesta SAML.
- Acceso al Recurso Concedido: Se concede acceso al recurso inicialmente solicitado.
Ejemplo de Solicitud SAML
Considera el escenario en el que un usuario solicita acceso a un recurso seguro en https://shibdemo-sp1.test.edu/secure/. El SP identifica la falta de autenticaci贸n y genera una Solicitud SAML:
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...
La solicitud SAML en bruto se ve as铆:
<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>
Elementos clave de esta solicitud incluyen:
- AssertionConsumerServiceURL: Especifica d贸nde el IdP debe enviar la SAML Response despu茅s de la autenticaci贸n.
- Destination: La direcci贸n del IdP a la que se env铆a la solicitud.
- ProtocolBinding: Define el m茅todo de transmisi贸n de los mensajes del protocolo SAML.
- saml:Issuer: Identifica la entidad que inici贸 la solicitud.
Tras la generaci贸n de la SAML Request, el SP responde con un 302 redirect, dirigiendo el navegador al IdP con la SAML Request codificada en el encabezado Location de la respuesta HTTP. El par谩metro RelayState mantiene la informaci贸n de estado a lo largo de la transacci贸n, asegurando que el SP reconozca la solicitud de recurso inicial al recibir la SAML Response. El par谩metro SAMLRequest es una versi贸n comprimida y codificada del fragmento XML en bruto, utilizando compresi贸n Deflate y codificaci贸n base64.
Ejemplo de SAML Response
Puedes encontrar una respuesta SAML completa aqu铆. Los componentes clave de la respuesta incluyen:
- ds:Signature: Esta secci贸n, una Firma XML, asegura la integridad y autenticidad del emisor de la afirmaci贸n. La SAML response en el ejemplo contiene dos elementos
ds:Signature
, uno para el mensaje y el otro para la afirmaci贸n. - saml:Assertion: Esta parte contiene informaci贸n sobre la identidad del usuario y posiblemente otros atributos.
- saml:Subject: Especifica el sujeto principal de todas las declaraciones en la afirmaci贸n.
- saml:StatusCode: Representa el estado de la operaci贸n en respuesta a la solicitud correspondiente.
- saml:Conditions: Detalla condiciones como el tiempo de validez de la Assertion y el Service Provider especificado.
- saml:AuthnStatement: Confirma que el IdP autentic贸 al sujeto de la Assertion.
- saml:AttributeStatement: Contiene atributos que describen al sujeto de la Assertion.
Tras la SAML Response, el proceso incluye un 302 redirect desde el IdP. Esto lleva a una solicitud POST a la URL del Assertion Consumer Service (ACS) del Service Provider. La solicitud POST incluye los par谩metros RelayState
y SAMLResponse
. El ACS es responsable de procesar y validar la SAML Response.
Despu茅s de que se recibe la solicitud POST y se valida la SAML Response, se concede acceso al recurso protegido solicitado inicialmente por el usuario. Esto se ilustra con una solicitud GET
al endpoint /secure/
y una respuesta 200 OK
, indicando acceso exitoso al recurso.
Firmas XML
Las Firmas XML son vers谩tiles, capaces de firmar un 谩rbol XML completo o elementos espec铆ficos dentro de 茅l. Pueden aplicarse a cualquier Objeto XML, no solo a elementos de Respuesta. A continuaci贸n se presentan los tipos clave de Firmas XML:
Estructura B谩sica de la Firma XML
Una Firma XML consiste en elementos esenciales como se muestra:
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
Cada elemento Reference
significa un recurso espec铆fico que est谩 siendo firmado, identificable por el atributo URI.
Tipos de Firmas XML
- Firma Envolvente: Este tipo de firma es un descendiente del recurso que firma, lo que significa que la firma est谩 contenida dentro de la misma estructura XML que el contenido firmado.
Ejemplo:
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
En una firma envolvente, el elemento ds:Transform
especifica que est谩 envuelta a trav茅s del algoritmo enveloped-signature
.
- Firma Envolvente: A diferencia de las firmas envolventes, las firmas envolventes envuelven el recurso que se est谩 firmando.
Ejemplo:
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
- Firma Desprendida: Este tipo es independiente del contenido que firma. La firma y el contenido existen de manera independiente, pero se mantiene un v铆nculo entre ambos.
Ejemplo:
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
En conclusi贸n, las Firmas XML proporcionan formas flexibles de asegurar documentos XML, con cada tipo sirviendo a diferentes necesidades estructurales y de seguridad.
Referencias
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.