- Status Closed
-
Assigned To
cbay - Private
Opened by noobx - 31.05.2026
Last edited by cbay - 01.06.2026
FS#340 - API Customer Create Endpoint Accessible Without Authentication — POST /v1/customer/ Bypasses Auth Ch
Severity: Medium
CVSS: 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N)
Endpoint: POST https://api.alwaysdata.com/v1/customer/ Method: POST (only — GET/PUT/PATCH/DELETE all return 401)
Auth Required: None (verified)
API Customer Create Endpoint Accessible Without Authentication — POST /v1/customer/ Bypasses Auth Check
Summary
The REST API endpoint POST /v1/customer/ does not enforce authentication unlike every other API endpoint. While the endpoint currently returns HTTP 500 when processing a valid email+password pair, this is due to a downstream payment integration failure — the authentication middleware is simply absent on this endpoint. Any unauthenticated request that passes field validation reaches the payment/registration logic without an API token.
Steps to Reproduce
1. Attempt GET /v1/customer/ without credentials:
curl -sk https://api.alwaysdata.com/v1/customer/ -> "Authorization header is missing" [HTTP 401, expected]
2. Attempt POST /v1/customer/ without credentials, empty body:
curl -sk -X POST https://api.alwaysdata.com/v1/customer/ \
-H "Content-Type: application/json" \
-d '{}'
-> {"email":["Ce champ est obligatoire."],"password":["Ce champ est obligatoire."]}
[HTTP 400, NOT 401 — request reached field validation without auth]
3. Attempt POST /v1/customer/ without credentials, valid fields:
curl -sk -X POST https://api.alwaysdata.com/v1/customer/ \
-H "Content-Type: application/json" \
-d '{"email":"attacker@example.com","password":"TestPass123!"}'
-> "Erreur interne : nous avons ete notifies."
[HTTP 500 — request reached payment integration layer without auth]
4. Compare with all other API verbs on the same endpoint:
curl -sk -X PUT https://api.alwaysdata.com/v1/customer/ -d '{}' -H "Content-Type: application/json"
-> "Authorization header is missing" [HTTP 401]
curl -sk -X PATCH https://api.alwaysdata.com/v1/customer/ -d '{}' -H "Content-Type: application/json"
-> "Authorization header is missing" [HTTP 401]
Impact
The authentication check is missing from the POST handler for /v1/customer/. While the 500 error prevents account creation via this vector alone today (the error occurs at the payment/registration step, after auth is already bypassed), the root cause is a broken access control — not a payment validation failure. If the payment requirement is ever removed or this endpoint is called in a different context, unauthenticated account creation becomes trivially possible. The endpoint also allows an attacker to probe registration logic (field validation, error messages) without any credentials, and its error messages confirm the internal system state.
Additionally, rate limiting on this endpoint (~7 requests per IP before 429) is insufficient to prevent slow-speed probing of the registration backend logic.
Fix
Apply the same authentication middleware to the POST handler of /v1/customer/ as is applied to all other methods (GET, PUT, PATCH, DELETE). If unauthenticated registration is intended to be supported via the API (as it is via the web UI at /en/register/), add explicit exception handling and ensure the payment/card verification requirement is enforced at this layer, not relying on downstream failures.
curl Proof of Concept
# Step 1 — Confirm GET requires auth
curl -sv https://api.alwaysdata.com/v1/customer/ 2>&1 | grep -E "< HTTP|Authorization header"
# Step 2 — Confirm POST does NOT require auth (reaches field validation)
curl -sv -X POST https://api.alwaysdata.com/v1/customer/ \
- H "Content-Type: application/json" \
- d '{}' 2>&1 | grep -E "< HTTP|obligatoire"
# Expected: Step 1 = 401, Step 2 = 400 with JSON validation errors (no 401)
Loading...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Add new task
- Alt + ⇧ Shift + m My searches
- Alt + ⇧ Shift + t focus taskid search
Tasklist
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Next task
- p Previous task
- Alt + ⇧ Shift + e ↵ Enter Edit this task
- Alt + ⇧ Shift + w watch task
- Alt + ⇧ Shift + y Close Task
Task Editing
- Alt + ⇧ Shift + s save task
Hello,
Being able to create a customer without authentication is done on purpose.
There was a bug that triggered a 500 error in some cases, which is now fixed. It was not a vulnerability.
Kind regards,
Cyril