{% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** šŸ’¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** šŸ¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} # VisĆ£o Geral do SAML **Security Assertion Markup Language (SAML)** permite que provedores de identidade (IdP) sejam utilizados para enviar credenciais de autorizaĆ§Ć£o para provedores de serviƧo (SP), facilitando o single sign-on (SSO). Essa abordagem simplifica a gestĆ£o de mĆŗltiplos logins ao permitir que um Ćŗnico conjunto de credenciais seja usado em vĆ”rios sites. Ela utiliza XML para comunicaĆ§Ć£o padronizada entre IdPs e SPs, vinculando a autenticaĆ§Ć£o da identidade do usuĆ”rio com a autorizaĆ§Ć£o do serviƧo. ## ComparaĆ§Ć£o entre SAML e OAuth - **SAML** Ć© voltado para fornecer Ć s empresas maior controle sobre a seguranƧa do login SSO. - **OAuth** Ć© projetado para ser mais amigĆ”vel para dispositivos mĆ³veis, usa JSON e Ć© um esforƧo colaborativo de empresas como Google e Twitter. # Fluxo de AutenticaĆ§Ć£o SAML **Para mais detalhes, consulte o post completo em [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)**. Este Ć© um resumo: O processo de autenticaĆ§Ć£o SAML envolve vĆ”rias etapas, conforme ilustrado no esquema: ![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg) 1. **Tentativa de Acesso ao Recurso**: O usuĆ”rio tenta acessar um recurso protegido. 2. **GeraĆ§Ć£o da SolicitaĆ§Ć£o SAML**: O SP nĆ£o reconhece o usuĆ”rio e gera uma SolicitaĆ§Ć£o SAML. 3. **Redirecionamento para o IdP**: O usuĆ”rio Ć© redirecionado para o IdP, com a SolicitaĆ§Ć£o SAML passando pelo navegador do usuĆ”rio. 4. **IdP Recebe a SolicitaĆ§Ć£o**: O IdP recebe a SolicitaĆ§Ć£o SAML. 5. **AutenticaĆ§Ć£o no IdP**: O IdP autentica o usuĆ”rio. 6. **ValidaĆ§Ć£o do UsuĆ”rio**: O IdP valida a legitimidade do usuĆ”rio para acessar o recurso solicitado. 7. **CriaĆ§Ć£o da Resposta SAML**: O IdP gera uma Resposta SAML contendo as afirmaƧƵes necessĆ”rias. 8. **Redirecionamento para a URL ACS do SP**: O usuĆ”rio Ć© redirecionado para a URL do ServiƧo Consumidor de AfirmaƧƵes (ACS) do SP. 9. **ValidaĆ§Ć£o da Resposta SAML**: O ACS valida a Resposta SAML. 10. **Acesso ao Recurso Concedido**: O acesso ao recurso inicialmente solicitado Ć© concedido. # Exemplo de SolicitaĆ§Ć£o SAML Considere o cenĆ”rio em que um usuĆ”rio solicita acesso a um recurso seguro em [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/). O SP identifica a falta de autenticaĆ§Ć£o e gera uma SolicitaĆ§Ć£o SAML: ``` GET /secure/ HTTP/1.1 Host: shibdemo-sp1.test.edu ... ``` A solicitaĆ§Ć£o SAML bruta se parece com isto: ```xml ``` Key elements of this request include: - **AssertionConsumerServiceURL**: Especifica onde o IdP deve enviar a SAML Response apĆ³s a autenticaĆ§Ć£o. - **Destination**: O endereƧo do IdP para o qual a solicitaĆ§Ć£o Ć© enviada. - **ProtocolBinding**: Define o mĆ©todo de transmissĆ£o das mensagens do protocolo SAML. - **saml:Issuer**: Identifica a entidade que iniciou a solicitaĆ§Ć£o. Following the SAML Request generation, the SP responds with a **302 redirect**, directing the browser to the IdP with the SAML Request encoded in the HTTP response's **Location** header. The **RelayState** parameter maintains the state information throughout the transaction, ensuring the SP recognizes the initial resource request upon receiving the SAML Response. The **SAMLRequest** parameter is a compressed and encoded version of the raw XML snippet, utilizing Deflate compression and base64 encoding. # SAML Response Example You can find a [full SAML response here](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/). The key components of the response include: - **ds:Signature**: Esta seĆ§Ć£o, uma Assinatura XML, garante a integridade e autenticidade do emissor da asserĆ§Ć£o. A SAML response no exemplo contĆ©m dois elementos `ds:Signature`, um para a mensagem e o outro para a asserĆ§Ć£o. - **saml:Assertion**: Esta parte contĆ©m informaƧƵes sobre a identidade do usuĆ”rio e possivelmente outros atributos. - **saml:Subject**: Especifica o sujeito principal de todas as declaraƧƵes na asserĆ§Ć£o. - **saml:StatusCode**: Representa o status da operaĆ§Ć£o em resposta Ć  solicitaĆ§Ć£o correspondente. - **saml:Conditions**: Detalha condiƧƵes como o tempo de validade da AsserĆ§Ć£o e o Provedor de ServiƧo especificado. - **saml:AuthnStatement**: Confirma que o IdP autenticou o sujeito da AsserĆ§Ć£o. - **saml:AttributeStatement**: ContĆ©m atributos que descrevem o sujeito da AsserĆ§Ć£o. Following the SAML Response, the process includes a 302 redirect from the IdP. This leads to a POST request to the Service Provider's Assertion Consumer Service (ACS) URL. The POST request includes `RelayState` and `SAMLResponse` parameters. The ACS is responsible for processing and validating the SAML Response. After the POST request is received and the SAML Response is validated, access is granted to the protected resource initially requested by the user. This is illustrated with a `GET` request to the `/secure/` endpoint and a `200 OK` response, indicating successful access to the resource. # XML Signatures XML Signatures are versatile, capable of signing an entire XML tree or specific elements within it. They can be applied to any XML Object, not just Response elements. Below are the key types of XML Signatures: ### Basic Structure of XML Signature An XML Signature consists of essential elements as shown: ```xml ... ``` Cada elemento `Reference` significa um recurso especĆ­fico sendo assinado, identificĆ”vel pelo atributo URI. ### Tipos de Assinaturas XML 1. **Assinatura Envelopada**: Este tipo de assinatura Ć© um descendente do recurso que assina, significando que a assinatura estĆ” contida na mesma estrutura XML que o conteĆŗdo assinado. Exemplo: ```xml ... ... ... ... ``` Em uma assinatura envelopada, o elemento `ds:Transform` especifica que estĆ” envelopada atravĆ©s do algoritmo `enveloped-signature`. 2. **Assinatura Envelopante**: Contrastando com assinaturas envelopadas, assinaturas envelopantes envolvem o recurso sendo assinado. Exemplo: ```xml ... ... ... ``` 3. **Assinatura Destacada**: Este tipo Ć© separado do conteĆŗdo que assina. A assinatura e o conteĆŗdo existem de forma independente, mas uma ligaĆ§Ć£o entre os dois Ć© mantida. Exemplo: ```xml ... ... ... ``` Em conclusĆ£o, Assinaturas XML fornecem maneiras flexĆ­veis de proteger documentos XML, com cada tipo atendendo a diferentes necessidades estruturais e de seguranƧa. ## ReferĆŖncias * [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** šŸ’¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** šŸ¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}