Webhook.construct_event accepts signatures made with an empty endpoint secret
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia dal punto di ingresso stripe.Webhook.construct_event e traccia come viene utilizzato il secret fornito durante la verifica della firma. Aggiungi la copertura per i secret vuoti e composti solo da spazi bianchi, e considera il lavoro eseguito quando tali configurazioni vengono rifiutate prima del calcolo della firma, mentre i secret validi continuano a verificare gli eventi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Version: stripe-python 15.2.0
If the webhook endpoint secret is unset (e.g. STRIPE_WEBHOOK_SECRET missing, read with an empty-string default), passing "" as the secret makes stripe.Webhook.construct_event verify an HMAC keyed with the empty string. Anyone can then forge checkout.session.completed and similar events and they pass verification.
Reproduction
import hashlib, hmac, json, time, stripe
payload = json.dumps({"id": "evt_x", "object": "event", "type": "checkout.session.completed",
"data": {"object": {"metadata": {"tenant_id": "t"}}}})
ts = int(time.time())
sig = hmac.new(b"", f"{ts}.{payload}".encode(), hashlib.sha256).hexdigest()
event = stripe.Webhook.construct_event(payload, f"t={ts},v1={sig}", "")
print(event["type"]) # checkout.session.completed — accepted
Expected: an empty (or whitespace-only) secret is a configuration error, not a key. Suggest raising ValueError (or SignatureVerificationError) when secret is empty, before computing any signature.
Why it matters: a deployment that simply forgot to set the secret silently accepts forged events instead of rejecting them — e.g. activating or cancelling subscriptions. We found this in a security review and now refuse with 503 when the secret is unset, but the library failing closed would protect everyone who hasn't.
- Lingua principale
- Python
- Stelle
- 2.1k
- Fork
- 540
- Merge medio
- 2g 18h
- PR unite (30g)
- 27
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di stripe/stripe-python
-
feature-request future
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
stripe/stripe-python#1941 · 4 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
Add support for HTTPX2Apertafeature-request future
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
stripe/stripe-python#1886 · 2 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
feature-request
Difficoltà 2/5 1-3 ore Idoneità per principianti 54/100
stripe/stripe-python#1841 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
feature-request future
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
stripe/stripe-python#1812 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Add async context manager support for AIOHTTPClient and HTTPXClientForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertafeature-request future
Difficoltà 3/5 1-2 giorni Idoneità per principianti 74/100
stripe/stripe-python#1796 · 3 commenti ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di stripe/stripe-python
Issue simili
-
good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
btclib-org/btclib-node#1955 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation v0.9.2
Difficoltà 2/5 Mezza giornata Idoneità per principianti 72/100
khuisman/mcp-gee-sweet#1033 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
ossf/cve-bin-tool#5966 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 2 giorni
-
write_iceberg ignores the table's write.parquet.compression-codec propertyForse già presa @YuangGao l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
Eventual-Inc/Daft#7606 ·
I maintainer di solito rispondono entro 1 giorno