Description
Monkeytype is a minimalistic and customizable typing test. In 26.26.0 and earlier, the backend rate-limit key generator in backend/src/middlewares/rate-limit.ts uses client-controlled cf-connecting-ip and x-forwarded-for headers before the trust-proxy-derived req.ip value. An unauthenticated attacker can rotate either header to create a new bucket for each request, bypassing rootRateLimiter, badAuthRateLimiter, getKey(), and the getKeyWithUid() fallback used by public endpoints. This permits repeated POST /users/forgotPasswordEmail and verificationEmail requests, mail bombing registered users, consuming Firebase or SMTP quota, evading brute-force protection, and enabling resource exhaustion. Exploitability of cf-connecting-ip depends on deployment topology, but x-forwarded-for and direct-to-origin paths remain affected when those values are not overwritten by a trusted proxy. No fixed version is available as of this review.
Published: 2026-08-20
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The Monkeytype backend uses client-controlled cf‑connecting‑ip and x‑forwarded‑for headers in its rate‑limit key generator before processing the trusted proxy‑derived req.ip value. An unauthenticated attacker can rotate these headers to create a unique bucket for each request, bypassing the rootRateLimiter, badAuthRateLimiter, getKey(), and getKeyWithUid() fallbacks used by public endpoints. This allows the attacker to repeatedly POST to /users/forgotPasswordEmail and /verificationEmail, bomb a target’s mailbox, consume Firebase or SMTP quotas, evade brute‑force protection and exhaust server resources. The vulnerability results in denial‑of‑service, large‑scale email spam, and potential compromise of user accounts through password reset abuse.

Affected Systems

Monkeytype game (monkeytype) versions 26.26.0 and earlier are affected. The backend component responsible for rate limiting is the one mentioned in the description. No fixed version is currently available, so all deployments of 26.26.0 or earlier risk exploitation.

Risk and Exploitability

The CVSS score of 7.5 reflects the high impact of rate‑limit bypass and resource exhaustion. EPSS is not available, but the lack of a mitigation means the exploit is likely feasible in all affected deployments. The vulnerability can be exploited via crafted HTTP headers, which attackers can send from any client. The CVE is not listed in the CISA KEV catalog. Because the attack vector relies on client‑controlled headers, any deployment that does not properly trust a reverse proxy or validate IP sources is vulnerable. The risk to systems is moderate to high, especially for services that rely on the affected password‑reset or verification mail endpoints. Guidance from the vendor suggests waiting for a patch or applying the remediation steps described below.

Generated by OpenCVE AI on August 20, 2026 at 20:31 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Configure the web server or application to ignore client-controlled IP headers and use only the IP derived from a trusted proxy for rate limiting. This prevents attackers from rotating headers to bypass limits.
  • Implement additional throttling mechanisms and CAPTCHA challenges on the /users/forgotPasswordEmail and /verificationEmail endpoints to deter repeated requests.
  • Actively monitor outbound email traffic and impose hard limits on SMTP or Firebase quota usage to thwart mail‑bombing attempts.
  • Upgrade Monkeytype to the latest release when a fix is made available.

Generated by OpenCVE AI on August 20, 2026 at 20:31 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 21 Aug 2026 13:30:00 +0000

Type Values Removed Values Added
First Time appeared Monkeytype
Monkeytype monkeytype
Vendors & Products Monkeytype
Monkeytype monkeytype

Thu, 20 Aug 2026 16:45:00 +0000

Type Values Removed Values Added
Description Monkeytype is a minimalistic and customizable typing test. In 26.26.0 and earlier, the backend rate-limit key generator in backend/src/middlewares/rate-limit.ts uses client-controlled cf-connecting-ip and x-forwarded-for headers before the trust-proxy-derived req.ip value. An unauthenticated attacker can rotate either header to create a new bucket for each request, bypassing rootRateLimiter, badAuthRateLimiter, getKey(), and the getKeyWithUid() fallback used by public endpoints. This permits repeated POST /users/forgotPasswordEmail and verificationEmail requests, mail bombing registered users, consuming Firebase or SMTP quota, evading brute-force protection, and enabling resource exhaustion. Exploitability of cf-connecting-ip depends on deployment topology, but x-forwarded-for and direct-to-origin paths remain affected when those values are not overwritten by a trusted proxy. No fixed version is available as of this review.
Title Monkeytype: Rate-limit and anti-brute-force controls bypassable via spoofed HTTP headers (forgotPasswordEmail/verificationEmail mail bombing and badAuth bypass)
Weaknesses CWE-290
CWE-307
CWE-644
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

Monkeytype Monkeytype
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-20T17:14:13.680Z

Reserved: 2026-08-03T16:00:23.482Z

Link: CVE-2026-69183

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-20T17:19:34.387

Modified: 2026-08-20T17:19:34.387

Link: CVE-2026-69183

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-21T13:01:39Z

Weaknesses
  • CWE-290

    Authentication Bypass by Spoofing

  • CWE-307

    Improper Restriction of Excessive Authentication Attempts

  • CWE-644

    Improper Neutralization of HTTP Headers for Scripting Syntax