Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Panoramica di SAML
Security Assertion Markup Language (SAML) consente lâutilizzo di fornitori di identitĂ (IdP) per inviare credenziali di autorizzazione ai fornitori di servizi (SP), facilitando il single sign-on (SSO). Questo approccio semplifica la gestione di piĂš accessi consentendo lâuso di un unico set di credenziali su piĂš siti web. Sfrutta XML per una comunicazione standardizzata tra IdP e SP, collegando lâautenticazione dellâidentitĂ dellâutente con lâautorizzazione al servizio.
Confronto tra SAML e OAuth
- SAML è progettato per fornire alle imprese un maggiore controllo sulla sicurezza dellâaccesso SSO.
- OAuth è progettato per essere piÚ adatto ai dispositivi mobili, utilizza JSON ed è uno sforzo collaborativo di aziende come Google e Twitter.
Flusso di Autenticazione SAML
Per ulteriori dettagli controlla il post completo da https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/. Questo è un riassunto:
Il processo di autenticazione SAML coinvolge diversi passaggi, come illustrato nello schema:

- Tentativo di Accesso alla Risorsa: Lâutente tenta di accedere a una risorsa protetta.
- Generazione della Richiesta SAML: Lo SP non riconosce lâutente e genera una Richiesta SAML.
- Reindirizzamento allâIdP: Lâutente viene reindirizzato allâIdP, con la Richiesta SAML che passa attraverso il browser dellâutente.
- IdP Riceve la Richiesta: LâIdP riceve la Richiesta SAML.
- Autenticazione presso lâIdP: LâIdP autentica lâutente.
- Validazione dellâUtente: LâIdP valida la legittimitĂ dellâutente per accedere alla risorsa richiesta.
- Creazione della Risposta SAML: LâIdP genera una Risposta SAML contenente le asserzioni necessarie.
- Reindirizzamento allâURL ACS dello SP: Lâutente viene reindirizzato allâURL del Servizio Consumatore di Asserzioni (ACS) dello SP.
- Validazione della Risposta SAML: LâACS valida la Risposta SAML.
- Accesso alla Risorsa Consentito: Lâaccesso alla risorsa inizialmente richiesta è consentito.
Esempio di Richiesta SAML
Considera lo scenario in cui un utente richiede accesso a una risorsa sicura su https://shibdemo-sp1.test.edu/secure/. Lo SP identifica la mancanza di autenticazione e genera una Richiesta SAML:
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...
La richiesta SAML grezza appare cosĂŹ:
<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>
Elementi chiave di questa richiesta includono:
- AssertionConsumerServiceURL: Specifica dove lâIdP dovrebbe inviare la SAML Response dopo lâautenticazione.
- Destination: Lâindirizzo dellâIdP a cui viene inviata la richiesta.
- ProtocolBinding: Definisce il metodo di trasmissione dei messaggi del protocollo SAML.
- saml:Issuer: Identifica lâentitĂ che ha avviato la richiesta.
Dopo la generazione della richiesta SAML, lo SP risponde con un 302 redirect, indirizzando il browser allâIdP con la richiesta SAML codificata nellâintestazione Location della risposta HTTP. Il parametro RelayState mantiene le informazioni di stato durante la transazione, assicurando che lo SP riconosca la richiesta di risorsa iniziale al ricevimento della SAML Response. Il parametro SAMLRequest è una versione compressa e codificata del frammento XML grezzo, utilizzando la compressione Deflate e la codifica base64.
Esempio di SAML Response
Puoi trovare una full SAML response here. I componenti chiave della risposta includono:
- ds:Signature: Questa sezione, una firma XML, garantisce lâintegritĂ e lâautenticitĂ dellâemittente dellâasserzione. La SAML response nellâesempio contiene due elementi
ds:Signature, uno per il messaggio e lâaltro per lâasserzione. - saml:Assertion: Questa parte contiene informazioni sullâidentitĂ dellâutente e possibilmente altri attributi.
- saml:Subject: Specifica il soggetto principale di tutte le dichiarazioni nellâasserzione.
- saml:StatusCode: Rappresenta lo stato dellâoperazione in risposta alla richiesta corrispondente.
- saml:Conditions: Dettaglia le condizioni come il periodo di validitĂ dellâasserzione e il Service Provider specificato.
- saml:AuthnStatement: Conferma che lâIdP ha autenticato il soggetto dellâasserzione.
- saml:AttributeStatement: Contiene attributi che descrivono il soggetto dellâasserzione.
Dopo la SAML Response, il processo include un 302 redirect dallâIdP. Questo porta a una richiesta POST allâURL del Service Providerâs Assertion Consumer Service (ACS). La richiesta POST include i parametri RelayState e SAMLResponse. LâACS è responsabile dellâelaborazione e della validazione della SAML Response.
Dopo che la richiesta POST è stata ricevuta e la SAML Response è stata validata, lâaccesso viene concesso alla risorsa protetta inizialmente richiesta dallâutente. Questo è illustrato con una richiesta GET allâendpoint /secure/ e una risposta 200 OK, che indica lâaccesso riuscito alla risorsa.
Firme XML
Le firme XML sono versatili, capaci di firmare un intero albero XML o elementi specifici al suo interno. Possono essere applicate a qualsiasi oggetto XML, non solo agli elementi di risposta. Di seguito sono riportati i tipi chiave di firme XML:
Struttura di base della firma XML
Una firma XML consiste di elementi essenziali come mostrato:
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
Ogni elemento Reference indica una risorsa specifica che viene firmata, identificabile dallâattributo URI.
Tipi di firme XML
- Firma Avvolta: Questo tipo di firma è un discendente della risorsa che firma, il che significa che la firma è contenuta allâinterno della stessa struttura XML del contenuto firmato.
Esempio:
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
In una firma avvolta, lâelemento ds:Transform specifica che è avvolta attraverso lâalgoritmo enveloped-signature.
- Firma Avvolgente: A differenza delle firme avvolte, le firme avvolgenti avvolgono la risorsa che viene firmata.
Esempio:
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
- Firma Distaccata: Questo tipo è separato dal contenuto che firma. La firma e il contenuto esistono in modo indipendente, ma viene mantenuto un collegamento tra i due.
Esempio:
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
In conclusione, le firme XML offrono modi flessibili per proteggere i documenti XML, con ciascun tipo che soddisfa diverse esigenze strutturali e di sicurezza.
Riferimenti
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

