Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
hyperswitch-payout-confirm-secret — Proof-of-concept e lab per una falla di conferma dei payout di Hyperswitch: un client_secret fittizio più l'importo in POST /payouts/{id}/confirm aumenta l'importo del payout memorizzato. | Kitploit
Strumenti/GitHubGitHub/abraxas/hyperswitch-payout-confirm-secret
Autenticazione e AutorizzazioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingSicurezza delle APILab e Pratica

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHubabraxas/hyperswitch-payout-confirm-secret

hyperswitch-payout-confirm-secret

Proof-of-concept e lab per una falla di conferma dei payout di Hyperswitch: un client_secret fittizio più l'importo in POST /payouts/{id}/confirm aumenta l'importo del payout memorizzato.

Vedi Repository
1817 giorni faNon ancora revisionato

Abraxas Labs - hyperswitch-payout-confirm-secret

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  hyperswitch-payout-confirm-secret

hyperswitch-payout-confirm-secret

Hyperswitch 2026.09.21.0 - Juspay

payouts_confirm autentica pk_ con check_value_present("client_secret"). Presente. Non uguale. Payments confirm invece vincola: authenticate_client_secret restituisce IR_09 in caso di mancata corrispondenza. Il body di confirm è un PayoutCreateRequest completo. update_payouts_and_payout_attempt scrive amount prima del routing verso il connector.

Un client_secret fittizio più amount=99900 su payouts confirm memorizza 99900. Payments confirm con lo stesso valore fittizio restituisce comunque IR_09.

IDnessuna CVE al momento
CWECWE-863, CWE-345
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
ProdottoHyperswitch
Affettofino a 2026.09.21.0 payouts confirm
Authpk_ pubblicabile più payout id; secret fittizio
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Serve la publishable key (pubblica, checkout) e il payout id (link di payout, dashboard del merchant, risposta di creazione lato client). POST /payouts/{id}/confirm con un secret fittizio e un nuovo amount. Il retrieve mostra l'importo aumentato anche quando il routing verso il connector restituisce 400 IR_39 (nessun payout connector idoneo). La scrittura è già avvenuta. L'evasione su un negozio che ha un processore di payout è il passo successivo.

Un guest senza pk_ non è questo bug. Il confirm con secret sk_ è lato merchant. Non è una shell. Non è un payout riuscito verso il connector su questa immagine del lab.

Stesso prodotto della webhook Worldpayxml non firmata. Bug diverso.

Come l'ho trovato

Ho letto check_value_present, poi payments req_cs != pi_cs, poi update_payouts_and_payout_attempt prima di payouts_core. L'autenticazione per pk_ è "checkout SDK". Il secret dovrebbe vincolare la sessione del browser a questo payout. Payments fa un confronto di uguaglianza. Payouts fa un controllo di presenza. Un valore fittizio non vuoto è sufficiente. Il JSON è comunque una richiesta di creazione, quindi amount non è un no-op su confirm.

Il primo client che guarda questo invierà confirm senza client_secret e otterrà MissingRequiredField. Presente. Invia il secret reale e sei tu il pagatore. Invia un valore fittizio su payments confirm e ottieni IR_09. Questo è il controllo. Invia il valore fittizio su payouts confirm.

Vicoli ciechi già registrati: trattare HTTP 400 IR_39 come "non è successo nulla" (fai il retrieve del payout); l'amount resta 1000 perché confirm ha omesso amount (unwrap_or mantiene il vecchio valore); payout già in stato terminale (Success / Failed / Cancelled); una reverse shell. Teatro. La prova è il retrieve con amount=99900 dopo il secret fittizio, con payments confirm che restituisce ancora IR_09.

Poi: crea un merchant, una secret key, una pk_ pubblicabile, un connector payout worldpayxml, e POST /payouts/create con confirm=false e amount 1000. RequiresConfirmation. Controllo con secret fittizio su payments. Valore fittizio 99900 su payouts. Retrieve.

Lab

cd lab
./run.sh

Target solo http://127.0.0.1:18083. Non condividere un progetto compose con il lab della webhook.

IOC amount_before=1000 status_before=requires_confirmation
IOC payments.confirm dummy-secret status=400 IR_09 client_secret mismatch
IOC payouts.confirm dummy-secret status=400 IR_39 no eligible connector
IOC retrieve amount=99900 status=requires_confirmation
SUCCESS Hyperswitch payout confirm unbound client_secret amount raise

La correzione

Confronta client_secret con payouts.client_secret come fa payments, e non applicare PayoutCreateRequest.amount su confirm finché quel controllo non passa. Un secret fittizio deve restituire IR_09 (o 401), e l'amount del retrieve deve restare 1000.

Riferimenti

  • github.com/juspay/hyperswitch tag 2026.09.21.0
  • payouts.rs routes · authentication.rs · payouts/helpers.rs · core/payouts.rs · payments/helpers.rs
  • Stesso prodotto: hyperswitch-unsigned-webhook
  • CWE-863 · CWE-345

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.

Scarica lo strumento