Webhook.construct_event accepts signatures made with an empty endpoint secret
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Comienza en el punto de entrada stripe.Webhook.construct_event y sigue cómo se utiliza el secreto proporcionado durante la verificación de la firma. Añade cobertura para secretos vacíos y compuestos únicamente por espacios en blanco, y considera el trabajo realizado cuando esas configuraciones se rechazan antes del cálculo de la firma, mientras los secretos válidos continúan verificando eventos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 2.1k
- Forks
- 539
- Merge medio
- 3 d 5 h
- PR fusionados (30 d)
- 17
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de stripe/stripe-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
stripe/stripe-python#1948 ·
Los mantenedores suelen responder en 1 día
-
Boolean list elements are encoded as True/False instead of true/falsePosiblemente ocupada @inchang-ing la tomó hace 1 día. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
stripe/stripe-python#1947 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
feature-request future
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
stripe/stripe-python#1941 · 6 comentarios ·
Los mantenedores suelen responder en 1 día
-
Add support for HTTPX2Abiertofeature-request future
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
stripe/stripe-python#1886 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
feature-request
Dificultad 2/5 1-3 horas Aptitud para principiantes 54/100
stripe/stripe-python#1841 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de stripe/stripe-python
Issues similares
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
yunaremaia/proto-drift#22 ·
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
yunaremaia/memwatch#96 ·
-
bug good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
yunaremaia/ci-gate-watch#34 ·
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
yunaremaia/agent-capability-attestation#64 ·
Los mantenedores suelen responder en 1 día
-
bug good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 86/100
yunaremaia/agent-call-graph#43 ·
Los mantenedores suelen responder en 1 día