Security vulnerabilities

  • Status Closed
  • Assigned To
    cbay
  • Private
Attached to Project: Security vulnerabilities
Opened by zabisardar65gmail.com - 08.11.2026
Last edited by cbay - 10.11.2026

FS#545 - # Rate Limit Bypass on Password Reset Endpoint via Spoofable X-Forwarded-For Header

### Summary

The password-reset endpoint at `https://admin.alwaysdata.com/password/lost/` appears to rely on the client-supplied `X-Forwarded-For` header when identifying clients for rate limiting.

After reaching the endpoint's request limit and receiving an HTTP `429 Too Many Requests` response, changing the `X-Forwarded-For` header value allowed additional password-reset requests.

During testing using my own email address, I received nearly 100 password-reset emails, demonstrating that the rate-limiting mechanism could be bypassed and that repeated email notifications could be triggered.

### Affected Endpoint

`POST https://admin.alwaysdata.com/password/lost/`

### Steps to Reproduce

1. Navigate to the password-reset page.

2. Submit password-reset requests using an email address you control.

3. Continue until the server responds with `HTTP/2 429 Too Many Requests`.

4. Change the `X-Forwarded-For` header value in the request.

5. Submit another request.

6. Observe that the endpoint accepts further requests despite the previous rate-limit response.

7. Check the controlled mailbox and observe the additional password-reset emails.

### Proof of Concept

Original request header:

`X-Forwarded-For: [initial value]`

After receiving HTTP 429, change the header:

`X-Forwarded-For: [different value]`

The endpoint then accepts further requests instead of consistently enforcing the rate limit.

### Impact

An unauthenticated attacker may be able to bypass the password-reset request limit by manipulating the `X-Forwarded-For` header.

This could allow repeated password-reset emails to be triggered for a target email address, potentially resulting in email flooding, user disruption, and abuse of the password-reset notification system.

Testing was performed only using an email address under my control.

### Recommended Remediation

- Do not trust arbitrary client-supplied `X-Forwarded-For` values.
- Configure trusted reverse proxies to overwrite or sanitise forwarding headers.
- Derive the rate-limit identity from the actual client IP as established by trusted infrastructure.
- Apply additional rate limits based on the destination email address and other appropriate identifiers.
- Consider a progressive cooldown and abuse-detection mechanism.

### Evidence

- HTTP 429 response showing that the rate limit was reached.
- Subsequent accepted requests after changing the forwarding header.
- Password-reset emails received in my controlled mailbox, with timestamps.

Closed by  cbay
10.11.2026 17:19
Reason for closing:  Invalid
10.11.2026: A request to reopen the task has been made. Reason for request: I again tried just now but its seems like you fixed that issue However i'm attaching proof of my controlled account where i tested that bug on 9 november 2026 im attaching that screenshot evidence where i requested 100 plus passowrd reset requests token successfully if you want i can also able to give you an account email address to check logs of that account for further investigation
Admin
cbay commented on 10.11.2026 17:19

Hello,

I do not believe that overriding X-Forwarded-For lets you override the rate limiting. Feel free to include a script that reproduces the issue.

Kind regards,
Cyril

I again tried just now but its seems like you fixed that issue However i'm attaching proof of my controlled account where i tested that bug on 9 november 2026 im attaching that screenshot evidence where i requested 100 plus passowrd reset requests token successfully if you want i can also able to give you an account email address to check logs of that account for further investigation

Loading...

Available keyboard shortcuts

Tasklist

Task Details

Task Editing