* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Uma ferramenta que pode receber uma URL ou lista de URLs e retorna a URL de consumo SAML.
No XML, a parte assinada do XML é salva na memória, em seguida, alguma codificação/decodificação é realizada e a assinatura é verificada. Idealmente, essa codificação/decodificação não deveria alterar os dados, mas com base nesse cenário, **os dados verificados e os dados originais podem não ser os mesmos**.
Documentos XML contendo Assinaturas XML são normalmente **processados em dois passos independentes**: **validação de assinatura** e **invocação de função** (lógica de negócios). Se ambos os módulos têm visões diferentes dos dados, uma nova classe de vulnerabilidades chamada ataques de Envoltório de Assinatura XML (XSW) existe.\
Nesses ataques, o **adversário****modifica** a **estrutura da mensagem****injetando****elementos forjados que não invalidam a Assinatura XML**. O objetivo dessa alteração é mudar a mensagem de tal forma que a **lógica de aplicativo e o módulo de verificação de assinatura usem partes diferentes da mensagem**. Consequentemente, o receptor verifica a Assinatura XML com sucesso, mas a lógica de aplicativo processa o elemento falso. O **atacante, assim, contorna a proteção de integridade** e a autenticação de origem da Assinatura XML e pode injetar conteúdo arbitrário.
Um atacante pode **adicionar um novo elemento raiz onde a assinatura** é encontrada. Portanto, quando o validador verifica a integridade da assinatura, ele pode notar que **verificou** a **integridade** do **Response -> Assertion -> Subject**, e pode ficar confuso com o **novo Response -> Assertion -> Subject** malicioso em vermelho e usar seus dados.
A diferença com #1 é que o tipo de Assinatura usado é uma **assinatura destacada** onde XSW #1 usou uma assinatura de envoltório.\
Observe como a nova estrutura maliciosa é a mesma de antes, tentando confundir a lógica de negócios depois que a verificação de integridade foi realizada.
Neste ataque, uma **Assertion maliciosa é criada no mesmo nível** que a assertion original para tentar confundir a lógica de negócios e usar os dados maliciosos.
No XSW #5, a Assinatura e a Assertion original não estão em uma das três configurações padrão (envolvida/envolvendo/destacada). Neste caso, a Assertion copiada envolve a Assinatura.
XSW #6 insere sua Assertion copiada na mesma localização que as #4 e #5. A peça interessante aqui é que a Assertion copiada envolve a Assinatura, que por sua vez envolve a Assertion original.
XSW #7 insere um elemento **Extensions** e adiciona a Assertion copiada como **filha**. Extensions é um elemento XML válido com uma **definição de esquema menos restritiva**. Os autores deste [artigo](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf) desenvolveram este método em resposta à biblioteca OpenSAML. O OpenSAML usava validação de esquema para comparar corretamente o ID usado durante a validação de assinatura com o ID da Assertion processada. Os autores descobriram que, nos casos em que as Assertions copiadas com o mesmo ID da Assertion original eram filhas de um elemento com uma definição de esquema menos restritiva, eles foram capazes de contornar essa contramedida específica.
XSW #8 usa outro elemento XML **menos restritivo** para executar uma variação do padrão de ataque usado em XSW #7. Desta vez, a Assertion original é a filha do elemento menos restritivo em vez da Assertion copiada.
Você pode usar a extensão do Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) para analisar o pedido, aplicar qualquer ataque XSW que escolher e lançá-lo.
Para obter mais informações sobre este ataque, leia o artigo original em [https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf)
Devido ao fato de que as Respostas SAML são documentos XML **deflacionados e codificados em base64**, podemos testar **XXE** manipulando o documento XML enviado como a Resposta SAML. Exemplo:
Você também pode usar a extensão do Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) para gerar o POC a partir de uma solicitação SAML para testar possíveis vulnerabilidades XXE.
A Transformação de Linguagem de Folha de Estilo Extensível (XSLT) é uma linguagem Turing completa para transformar documentos XML em outros tipos de documentos, como HTML, JSON ou PDF. Um aspecto importante a ser observado aqui é que **o ataque não requer uma assinatura válida para ter sucesso**. A razão para isso é que **a transformação XSLT ocorre antes que a assinatura digital seja processada para verificação**. Basicamente, precisamos de uma Resposta SAML assinada para realizar o ataque, mas a assinatura pode ser autoassinada ou inválida.
Aqui você pode encontrar um **POC** para verificar esse tipo de vulnerabilidades, na página hacktricks mencionada no início desta seção, você pode encontrar payloads.
Você também pode usar a extensão do Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) para gerar o POC a partir de uma solicitação SAML para testar possíveis vulnerabilidades XSLT.
A exclusão de assinatura é usada para testar como a implementação do SAML se comporta quando não há **elemento de assinatura**. Quando um elemento de assinatura está **ausente**, a etapa de **validação de assinatura pode ser completamente ignorada**. Se a assinatura não for validada, qualquer um dos conteúdos que normalmente seriam assinados podem ser adulterados por um atacante.
A exclusão de assinatura começa interceptando a resposta SAML e clicando em `Remover Assinaturas`. Ao fazer isso, **todos** os elementos de assinatura são removidos.
A falsificação de certificado é o processo de testar se o Provedor de Serviços **verifica se um Provedor de Identidade confiável assinou a Mensagem SAML**. O relacionamento de confiança entre SP e IdP é estabelecido e **deve ser verificado** cada vez que uma Mensagem SAML é recebida. O que isso significa é usar um certificado **autoassinado** para assinar a Resposta ou Declaração SAML.
Depois de enviar o certificado, devemos ver um certificado importado na guia Certificados do SAML Raider. Uma vez lá, destacamos o certificado importado e pressionamos o botão `Salvar e Autoassinado`.
Ao fazer isso, é gerado um clone autoassinado do certificado original. Agora é hora de voltar para a solicitação interceptada ainda retida no Proxy do burp. Primeiro, selecione o novo certificado autoassinado no menu suspenso de Assinatura XML. Em seguida, use o botão `Remover Assinaturas` para remover quaisquer assinaturas existentes. Finalmente, use o **botão `(Re-)Assinar Mensagem`** ou `(`**`Re-)Assinar Declaração`** (**qualquer um** é **mais****apropriado** em sua situação específica).
Depois de assinar a mensagem com o certificado autoassinado, envie-a em seu caminho. Se autenticarmos, sabemos que podemos assinar nossas Mensagens SAML. A capacidade de assinar nossas Mensagens SAML significa que podemos alterar valores na Declaração e eles serão aceitos pelo Provedor de Serviços.
## Confusão do Destinatário do Token / Confusão do Alvo do Provedor de Serviços <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
A Confusão do Destinatário do Token / Confusão do Alvo do Provedor de Serviços **testa se o Provedor de Serviços valida o Destinatário**. Isso significa que **se a resposta fosse destinada a um Provedor de Serviços diferente**, o **Provedor de Serviços atual deve notar e rejeitar a autenticação**.\
O campo **Destinatário** é um atributo do elemento **SubjectConfirmationData**, que é um filho do elemento Subject em uma Resposta SAML.
> O elemento SubjectConfirmationData especifica dados adicionais que permitem confirmar o assunto ou restringir as circunstâncias em que o ato de confirmação do assunto pode ocorrer. A confirmação do assunto ocorre quando um partido confiante procura verificar a relação entre uma entidade que apresenta a declaração (ou seja, a entidade que atesta) e as reivindicações do assunto da declaração.
O atributo Destinatário encontrado no **elemento SubjectConfirmationData é um URL que especifica o local para o qual a Declaração deve ser entregue**. Se o Destinatário for um Provedor de Serviços diferente daquele que o recebe, a Declaração não deve ser aceita.
A Confusão do Destinatário do Token SAML (SAML-TRC) tem algumas condições prévias para que possamos tentar a exploração. Primeiro, **precisamos ter uma conta legítima em um Provedor de Serviços**. Em segundo lugar, **o SP-Alvo deve aceitar tokens emitidos pelo mesmo Provedor de Identidade que atende ao SP-Legítimo**.
O ataque é relativamente simples se as condições forem verdadeiras. Nós **autenticamos** no **SP-Legítimo** via o Provedor de Identidade compartilhado. Então **interceptamos a Resposta SAML em seu caminho do IdP para o SP-Legítimo**. Uma vez interceptada, enviamos a **Resposta SAML que foi destinada ao SP-Legítimo para o SP-Alvo em vez disso**. Se o **SP-Alvo aceitar a Declaração**; nos encontraremos logados com o mesmo nome de conta que temos para o SP-Legítimo e teremos acesso aos recursos correspondentes do SP-Alvo.
Usando o [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor), que pode receber uma lista de URLs e, em seguida, fornecer a URL de retorno (SAML consume), decidi alimentar a ferramenta com todos os subdomínios de `uberinternal.com` para ver se há outros domínios que usam a mesma biblioteca e havia.
O que fiz em seguida foi criar um script que chama a página vulnerável `oidauth/prompt` e tenta o XSS e, se minha entrada for refletida, ele me dá uma mensagem vulnerável agradável.
Os ataques foram obtidos em [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\
Você pode encontrar recursos adicionais e write-ups em [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/)
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).