FOSSBilling CVE-2026-53646
HIGHSeverity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network guest endpoint (PR:N) but AC:H because the attacker must already hold the unexpired original link, and UI:R since the victim must trigger a reset; account takeover yields full C/I/A:H.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
FOSSBilling is a free, open-source billing and client management system. In versions 0.5.6 through 0.7.2, when a ClientPasswordReset record already exists for a client (from a previous unexpired reset request), subsequent calls to the reset_password guest API endpoint reuse the existing token instead of generating a new one. The 15-minute validity window is anchored to the first request's created_at timestamp, not the time of the most recent email. An attacker who obtained the original reset link remains able to use it even after the victim requests a new reset, because the original token is never invalidated or rotated. Version 0.8.0 patches the issue. Some workarounds are available. Configure a reverse proxy (e.g., Nginx, Apache, Cloudflare) to apply per-IP rate limiting to the /client/reset-password endpoint to minimize the window of opportunity, and/or manually clear expired client_password_reset records from the database after a client reports a suspected compromise.
AnalysisAI
Account takeover in FOSSBilling 0.5.6 through 0.7.2 arises because the reset_password guest API endpoint reuses an existing, unexpired ClientPasswordReset token rather than rotating it on each request. An attacker who has captured a victim's earlier reset link retains a valid path to hijack the account even after the victim requests a fresh reset, since the original token is never invalidated and its 15-minute window is anchored to the first request. No public exploit is identified at time of analysis, and the CVSS 4.0 score is 7.7 (High); version 0.8.0 fixes the flaw.
Technical ContextAI
FOSSBilling is a PHP-based open-source billing and client management platform. The weakness is a classic CWE-640 (Weak Password Recovery Mechanism): the password-reset workflow persists a ClientPasswordReset record keyed to a client, and when a record already exists from a prior unexpired request, the reset_password handler reuses that same token and created_at timestamp instead of generating and persisting a new one. Because token validity (15 minutes) is computed from the original created_at rather than the most recent email send, and because a new request neither deletes nor rotates the prior token, any previously issued link stays live for its full original lifetime. The client_password_reset database table therefore holds a single reusable token per client rather than a per-request, single-use secret.
Affected ProductsAI
FOSSBilling versions 0.5.6 through 0.7.2 are affected, and the issue is fixed in version 0.8.0. No CPE strings were supplied in the input. The authoritative source is the FOSSBilling GitHub Security Advisory GHSA-vp66-w6rc-x32p (https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-vp66-w6rc-x32p); no separate NVD CPE configuration was provided.
RemediationAI
Vendor-released patch: 0.8.0 - upgrade FOSSBilling to 0.8.0 or later, which corrects token rotation/invalidation, per advisory GHSA-vp66-w6rc-x32p (https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-vp66-w6rc-x32p). If immediate upgrade is not possible, the vendor documents two workarounds: configure a reverse proxy (Nginx, Apache, or Cloudflare) to enforce per-IP rate limiting on the /client/reset-password endpoint to shrink the window of opportunity (trade-off: rate limiting curbs automated abuse but does not invalidate an already-captured token, so it is mitigation not remediation), and manually clear expired rows from the client_password_reset database table after a client reports a suspected compromise (trade-off: reactive and manual, effective only once abuse is suspected). Combine both interim controls until 0.8.0 is deployed.
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
The ngx_http_parse_chunked function in http/ngx_http_parse.c in nginx 1.3.9 through 1.4.0 allows remote attackers to cau
A critical vulnerability in Kubernetes ingress-nginx controller allows unauthenticated attackers with pod network access
nginx 0.8.41 through 1.4.3 and 1.5.x before 1.5.7 allows remote attackers to bypass intended restrictions via an unescap
An issue was discovered on GL.iNet devices before version 4.5.0. Rated critical severity (CVSS 9.8), this vulnerability
Nginx versions since 0.5.6 up to and including 1.13.2 are vulnerable to integer overflow vulnerability in nginx range fi
The resolver in nginx before 1.8.1 and 1.9.x before 1.9.10 allows remote attackers to cause a denial of service (invalid
Kubernetes ingress-nginx contains a configuration injection vulnerability via the mirror-target and mirror-host Ingress
A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-url` Ingres
A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-tls-match-c
Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. Rated critical severity (CVSS 9.8
The STARTTLS implementation in mail/ngx_mail_smtp_handler.c in the SMTP proxy in nginx 1.5.x and 1.6.x before 1.6.1 and
Same technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today