Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
hyperswitch-unsigned-webhook — Proof-of-Concept für eine nicht authentifizierte Hyperswitch-Worldpayxml-Webhook-Schwachstelle (CWE-345/306), die SETTLED-XML fälscht, um Zahlungen als erfolgreich zu markieren, ohne PSP-Capture. | Kitploit
Tools/GitHubGitHub/abraxas/hyperswitch-unsigned-webhook
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsAuthentifizierungLabs & Praxis
GitHubabraxas/hyperswitch-unsigned-webhook

hyperswitch-unsigned-webhook

Proof-of-Concept für eine nicht authentifizierte Hyperswitch-Worldpayxml-Webhook-Schwachstelle (CWE-345/306), die SETTLED-XML fälscht, um Zahlungen als erfolgreich zu markieren, ohne PSP-Capture.

Repository anzeigen
25vor 9 TagenNoch 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

Abraxas Labs - hyperswitch-unsigned-webhook

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  hyperswitch-unsigned-webhook

Write-up: https://abraxaslabs.tech/research/hyperswitch-unsigned-webhook

hyperswitch-unsigned-webhook

Hyperswitch 2026.09.21.0 - Juspay

Worldpayxml::verify_webhook_source gibt Ok(true) zurück, mit einem Kommentar, dass die Verifikation über mTLS erfolge. Auf dieser Route gibt es kein mTLS. Die Funktion ignoriert den Body und die Header. incoming.rs vertraut dann auf source_verified und nimmt HandleResponse ohne PSync. LastEvent::Settled wird auf PaymentIntentSuccess abgebildet. Der Standard-Algorithmus von IncomingWebhook ist NoAlgorithm. BitPay und Shift4 erben das. Worldpayxml kommt nicht einmal so weit. Es bricht vorzeitig ab.

Unauthentifiziertes Dummy-SETTLED-XML markiert die Zahlung als erfolgreich. Keine Worldpay-Capture. Kein Client-Zertifikat.

IDnoch keine CVE
CWECWE-345, CWE-306
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
ProduktHyperswitch
Betroffenbis 2026.09.21.0 eingehende Worldpayxml-Webhooks
Authunauthentifiziert; benötigt merchant_id und orderCode
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Benötigt merchant_id (in jeder Hyperswitch-Dashboard-URL) und orderCode gleich der connector_transaction_id des Attempts. POST von unsigniertem SETTLED an /webhooks/{merchant_id}/worldpayxml. Wäre source_verified false, würde incoming Trigger ausführen und den Connector per PSync abfragen. Worldpayxml nimmt diesen Pfad nie. Der Intent wird Charged. Lab: status=succeeded. Dummy-XML. Kein PSP.

Das Erraten von Payment-IDs ist nicht der Bug. Das Fälschen von SETTLED für eine ID, die man bereits gesehen hat, ist es. Keine Shell. Keine echte Worldpay-Settlement.

Gleiches Produkt, anderer Bug: payout confirm unbound client_secret.

Wie ich es gefunden habe

Ich las Ok(true), dann HandleResponse vs. Trigger, dann Settled -> PaymentIntentSuccess. Der Kommentar sagt mTLS. Der Lab-POST hat kein Client-Zertifikat.

Der erste Client, der sich das ansieht, wird den Webhook gegen requires_confirmation POSTen. Incoming wird eine Zahlung, die die Bestätigung noch nicht verlassen hat, nicht auf Charged setzen. Den Attempt stempeln oder warten, bis requires_capture / processing erreicht ist. Das Lab macht das Stempeln. Dieser Stempel ist ein Lab-Fixture. Ein Live-Attempt hat bereits die Connector-ID. Der Webhook nicht.

Bereits dokumentierte Irrwege: signiertes HMAC auf einem Connector, der tatsächlich verifiziert (dieser Pfad tut es nicht); das Behandeln von Webhook-HTTP 200 als Orakel (stattdessen GET /payments/{id} pollen, bis status=succeeded); orderCode, das nicht connector_transaction_id ist; eine Reverse Shell. Theater.

Dann: Merchant, API-Key, worldpayxml-MCA, Payment mit confirm=false, connector_transaction_id stempeln, unsigniertes SETTLED, abrufen.

Lab

cd lab
./run.sh

Ziel ist ausschließlich http://127.0.0.1:18082. run.sh klont den Tag 2026.09.21.0 nach lab/hyperswitch-src für Konfiguration und Migrationen.

IOC status_before=requires_confirmation
IOC webhook status=200 unsigned lastEvent=SETTLED
IOC poll status=succeeded
SUCCESS Hyperswitch unsigned Worldpayxml webhook Charged

Die Behebung

Verifiziere die Worldpay-Benachrichtigung (Signatur / mTLS, die die Route tatsächlich terminiert). Rufe kein HandleResponse auf einem Connector auf, der Ok(true) von einem No-op zurückgegeben hat. Ein unsigniertes SETTLED darf die Intent nicht auf succeeded setzen.

Referenzen

  • github.com/juspay/hyperswitch Tag 2026.09.21.0
  • worldpayxml.rs · transformers.rs · incoming.rs · webhooks.rs · crypto.rs
  • Gleiches Produkt: hyperswitch-payout-confirm-secret
  • CWE-345 · CWE-306

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen