Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-21239 | Kitploit
Tools/GitHubGitHub/illera88/cve-2021-21239
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsAuthentifizierungLernen & Bildung
GitHubillera88/cve-2021-21239

CVE-2021-21239

Repository anzeigen
vor 11 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Technischer Bericht zu CVE-2021-21239: SAML-Authentifizierungsschwachstelle in Redash

Einführung in SAML

Security Assertion Markup Language (SAML) ist ein offener Standard für den Austausch von Authentifizierungs- und Autorisierungsdaten zwischen Parteien in einem föderierten Identitätssystem. Er ermöglicht Single Sign-on (SSO) über Domänen hinweg. Die Schlüsselkomponenten sind:

  • Identity Provider (IdP): Der Dienst, der den Benutzer authentifiziert und eine SAML-Assertion ausstellt (z. B. Googles SAML-IdP). Er signiert die Assertion mit seinem privaten Schlüssel, um Integrität und Authentizität zu gewährleisten.
  • Service Provider (SP): Die Anwendung, die sich für die Authentifizierung auf den IdP verlässt (z. B. Redash). Der SP verifiziert die Signatur mithilfe des öffentlichen Schlüssels oder Zertifikats des IdP, um der Assertion zu vertrauen.

In einem typischen SAML-Ablauf leitet der SP den Benutzer zur Authentifizierung an den IdP weiter. Der IdP gibt eine signierte SAML-Antwort zurück, die Assertionen über den Benutzer enthält (z. B. E-Mail, Name). Der SP validiert die Signatur und richtet den Benutzer ein oder meldet ihn an.

Erklärung der Schwachstelle

CVE-2021-21239 ist eine Schwachstelle zur Umgehung der Signaturvalidierung in der Bibliothek pysaml2 (Versionen <6.5.0), die von Redash <=10.1.0 für SAML-SSO verwendet wird. Im Wesentlichen kann ein Angreifer damit eine SAML-Antwort mit einem beliebigen eingebetteten öffentlichen Schlüssel fälschen, was Benutzerimitation und Privilegieneskalation über Just-in-Time (JIT)-Provisioning ermöglicht.

Die Schwachstelle rührt von der Art und Weise her, wie pysaml2 xmlsec1 zur Verifizierung von SAML-Signaturen aufruft. Xmlsec1 bevorzugt standardmäßig eingebettete öffentliche Schlüssel im <ds:KeyInfo> der SAML-Antwort gegenüber dem konfigurierten IdP-Zertifikat. Ein Angreifer kann eine SAML-Antwort mit einem selbst erzeugten RSA-Schlüsselpaar erstellen, den öffentlichen Schlüssel in <ds:RSAKeyValue> einbetten und die Assertion mit dem privaten Schlüssel signieren. Da pysaml2 xmlsec1 nicht darauf beschränkt, nur das vertrauenswürdige IdP-Zertifikat zu verwenden, wird die gefälschte Signatur als gültig erachtet, sodass sich der Angreifer als beliebiger Benutzer (z. B. Admin) anmelden und höchste Privilegien erlangen kann.

Auf Codeebene liegt die Schwachstelle in sigver.py von pysaml2 (Funktion check_signature). Der xmlsec1-Befehlsliste fehlt die Option --enabled-key-data raw-x509-cert, sodass xmlsec1 nicht vertrauenswürdige eingebettete Schlüssel verwenden kann:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

Dies ermöglicht Angriffe, bei denen der Angreifer die E-Mail-Adresse in <saml:NameID> ändert, um sich als beliebiger Benutzer auszugeben, wobei das JIT-Provisioning ausgenutzt wird.

Einrichtung zum Testen des Exploits

Zum Testen des Exploits wird eine lokale Redash-Instanz (v10.1.0 oder früher) mithilfe von Docker Compose gestartet. Das Setup umfasst die Konfiguration von SAML-SSO mit Googles IdP:

  • Redash über Docker Compose installieren: Redash-Repository klonen, den anfälligen Tag auschecken (z. B. v10.1.0) und docker-compose up ausführen.
  • SAML in den Umgebungsvariablen von Redash konfigurieren (z. B. REDASH_SAML_LOGIN_ENABLED=true, REDASH_SAML_METADATA_URL=... von Googles IdP).
  • Googles SAML-IdP zum Testen verwenden: Eine Google-Workspace-SAML-App mit der Redash-Callback-URL einrichten.
  • Die lokale Redash-Instanz mithilfe von Ngrok für Googles IdP erreichbar machen.

Dieses Setup ermöglicht das Testen der gefälschten SAML-Antwort, die über ein Python-Skript oder Burp Suite gesendet wird, und die Verifizierung der Privilegieneskalation.

Technische Erklärung und Fix

Die Schwachstelle entsteht dadurch, dass der xmlsec1-Aufruf von pysaml2 die Verwendung eingebetteter Schlüssel zur Verifizierung erlaubt und so das vertrauenswürdige IdP-Zertifikat umgeht. Ein Angreifer erzeugt ein RSA-Schlüsselpaar, erstellt eine SAML-Antwort mit dem öffentlichen Schlüssel in <ds:RSAKeyValue>, ändert Attribute (z. B. die E-Mail-Adresse zu der des Admins) und signiert die Assertion. Xmlsec1 verifiziert mithilfe des eingebetteten Schlüssels und erachtet sie als gültig. Der Fix wurde in pysaml2 v6.5.0 (erster Commit vom 17. Januar 2021) in src/saml2/sigver.py umgesetzt. Die xmlsec1-Befehlsliste wurde um --enabled-key-data raw-x509-cert erweitert, wodurch die Verifizierung auf das konfigurierte IdP-Zertifikat beschränkt wird:

root@kitploit:~
com_list = [
    self.xmlsec, '--verify', '--enabled-reference-uris', 'empty,same-doc',
    '--pubkey-cert-pem', cert_file_name,
    '--enabled-key-data', 'raw-x509-cert',
    '--id-attr:%s' % id_attr, node_name,
    '--node-id', nodeid, '--output', output_file_name, xml_file_name
]

Dies erzwingt die Validierung der Vertrauenskette und verhindert die Verwendung eingebetteter Schlüssel. Redash behob dies durch ein Upgrade von pysaml2 in späteren Versionen (z. B. v11+). Anfällige Versionen verwendeten kein --insecure; der Fehler war die fehlende Einschränkungsoption.

Exploit-Code

Der Exploit-Code ist in cve-2021-21239.py implementiert. Dieses Python-Skript automatisiert den Prozess der Fälschung einer SAML-Antwort, um CVE-2021-21239 in Redash <=10.1.0 auszunutzen und so über JIT-Provisioning Benutzerimitation und Privilegieneskalation zu ermöglichen. Der Exploit zielt auf den Google-Workspace-SAML-IdP ab, der Angriff wurde jedoch auch mit anderen IdPs (keycloak) getestet. Das Skript führt die folgenden Schritte aus:

  1. Analysiert Befehlszeilenargumente: Nimmt Eingaben für die SAML-Vorlagendatei, die Redash-URL, die IdP-ID, die Assertion-ID, E-Mail, Vorname und Nachname entgegen, mit Standardwerten für Tests (z. B. email="[email protected]").
  2. Ermittelt die IdP-ID: Ruft die idpid vom SAML-Login-Endpunkt von Redash ab, sofern sie nicht angegeben wurde, und gewährleistet so die Kompatibilität mit der Konfiguration des Ziels.
  3. Füllt die XML-Vorlage: Verwendet eine Vorlage (SAMLResponseTempalte.xml) mit Platzhaltern für E-Mail, Namen, Zeitstempel und Assertion-ID. Dynamische UTC-Zeitstempel werden mit einem Gültigkeitsfenster von 5 Minuten erzeugt, um die Validierung von Redash zu bestehen.
  4. Erzeugt ein RSA-Schlüsselpaar: Erstellt einen privaten 2048-Bit-RSA-Schlüssel zum Signieren der SAML-Assertion.
  5. Signiert das XML: Verwendet die Python-Bibliothek xmlsec, um das <saml:Assertion>-Element mit RSA-SHA256 zu signieren und den öffentlichen Schlüssel in <ds:RSAKeyValue> einzubetten, um die Schwachstelle auszunutzen.
  6. Verifiziert die Signatur: Validiert die Signatur und stellt sicher, dass die gefälschte SAML-Antwort strukturell gültig ist.
  7. Sendet die SAMLResponse: Codiert das signierte XML (Base64- und URL-Encoding) und sendet es an den SAML-Callback-Endpunkt von Redash (/saml/callback?org_slug=default).
  8. Extrahiert das Session-Cookie: Ruft das Session-Cookie aus der Antwort ab, sodass der Angreifer den Zielbenutzer imitieren kann.

Schwierigkeiten bei der Ausnutzung und deren Umgehung

Die Ausnutzung von CVE-2021-21239 erforderte die Erstellung einer gefälschten SAML-Antwort, die Redash über JIT-Provisioning akzeptiert. Wichtige Schwierigkeiten und deren Umgehung:

  • Umgehung der Signaturvalidierung: Pysaml2 erlaubte eingebettete Schlüssel; umgangen durch die Erzeugung eines RSA-Schlüsselpaars und die Einbettung des öffentlichen Schlüssels in <ds:RSAKeyValue>, signiert mit dem privaten Schlüssel.
  • Herausforderungen bei der XML-Signierung: Erste Versuche mit dem xmlsec1-Binary funktionierten, aber die Python-Bibliothek xmlsec verursachte Digest-Abweichungen aufgrund von Whitespace-/Kanonisierungsproblemen. Umgangen durch die Serialisierung des XML in eine einzelne Zeile (etree.tostring(..., pretty_print=False)) vor der Signierung.
  • Zeitstempelvalidierung: Ein zu weit in der Zukunft liegendes NotOnOrAfter führte zur Ablehnung; umgangen durch die Verwendung dynamischer UTC-Zeitstempel mit 5-minütiger Gültigkeit.
  • HTTP-Header-Konflikt: Die Requests-Bibliothek codierte SAMLResponse doppelt, was zu Parsing-Fehlern führte; umgangen durch das Senden roher Formulardaten.
  • Redash-Setup: Das lokale Redash benötigte Ngrok für Googles IdP; umgangen durch Tunneling mit Ngrok und entsprechende SAML-Konfiguration.

Diese Herausforderungen verdeutlichen die Notwendigkeit präziser XML-Manipulation und der Einrichtung der Umgebung, um die Schwachstelle effektiv auszunutzen. Der bereitgestellte Exploit-Code demonstriert dies erfolgreich, indem er eine SAML-Antwort fälscht, um Benutzer zu imitieren und Zugriff zu erlangen.

Tool herunterladen
  • Listet Benutzer auf: Ruft die Redash-Benutzerliste einschließlich der Gruppenmitgliedschaften der Benutzer ab. Dies ermöglicht es, Admin-Benutzer zu identifizieren und gezielt anzugreifen.