Plan ID is not validated, enabling billing bypass and paid-feature drift #18

Closed
opened 2026-04-16 12:10:49 +00:00 by userAdityaa · 0 comments
Contributor

Summary

The API accepts any arbitrary string as a relay plan ID without validation, enabling requests to sidestep billing logic and cause product state inconsistency. Unknown plans silently bypass Stripe subscription-item sync, leaving relays with invalid billing configurations.

What’s actually happening

We have a plan field coming from the client, and:

  • It is treated as free-form input (no strict validation).
  • The backend logic:
    • Only explicitly checks for "free" in a couple of places.
    • For anything else, it assumes “paid-like behavior”.
  • Later, billing logic:
    • Doesn’t recognize unknown plan values → silently skips billing.
### Summary The API accepts any arbitrary string as a relay plan ID without validation, enabling requests to sidestep billing logic and cause product state inconsistency. Unknown plans silently bypass Stripe subscription-item sync, leaving relays with invalid billing configurations. ### What’s actually happening We have a `plan` field coming from the client, and: * It is treated as **free-form input** (no strict validation). * The backend logic: * Only explicitly checks for `"free"` in a couple of places. * For anything else, it assumes “paid-like behavior”. * Later, billing logic: * Doesn’t recognize unknown plan values → silently skips billing.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: coracle/caravel#18