Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify registered user email address
-
DeliveryRotate x-forwarded-for header value per request
-
ExploitEach value creates unique rate-limit bucket
-
ExecutionBypass all rate limiters on public endpoints
-
PersistFlood /users/forgotPasswordEmail with unlimited requests
-
ImpactExhaust Firebase/SMTP quota and mail-bomb target user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Anti-spoofing controls
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The |
| Impact | CVSS 3.1 scores this at 7.5 High (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H), reflecting trivial, unauthenticated network exploitation with high availability impact - an accurate characterization given the zero-complexity header manipulation required. EPSS data is absent from the provided intelligence, so exploitation probability relative to the broader threat landscape cannot be quantified. The vulnerability is not listed in CISA KEV, and no proof-of-concept has been identified at time of analysis, which reduces immediate urgency for patch-cycle prioritization. However, the combination of zero authentication, zero complexity, and no available fix creates a persistently open exposure window for all deployments. The secondary risk of exhausting shared Firebase or SMTP quotas is operationally significant - it can deny email-based account functions (password reset, verification) to all legitimate users, not just the direct target. The brute-force evasion angle is a meaningful multiplier: once rate limiting is bypassed, credential stuffing against registered accounts becomes feasible. Overall this represents a genuine operational risk rather than a theoretical high-CVSS-low-real-risk case. |
| Exploit ScenarioDerived | An unauthenticated attacker who knows a registered user's email address sends a high-volume loop of POST requests to |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 20, 2026
Rate-limit bypass in Monkeytype ≤ 26.26.0 allows unauthenticated remote attackers to neutralize all request throttling protections by rotating client-controlled cf-connecting-ip or x-forwarded-for HTTP headers, with each rotated value creating an independent rate-limit bucket and resetting the window. The affected middleware in backend/src/middlewares/rate-limit.ts trusts these client-supplied headers over Express's trust-proxy-derived req.ip, rendering rootRateLimiter, badAuthRateLimiter, getKey(), and getKeyWithUid() ineffective. Practical consequences include mail-bombing registered users via the /users/forgotPasswordEmail and verificationEmail endpoints, exhausting Firebase or SMTP quotas affecting all users, and evading brute-force credential protections. No public exploit has been identified at time of analysis; no fixed version is available.
RemediationAI
No vendor-released patch has been identified at time of analysis; the GitHub Security Advisory GHSA-c878-p3jh-mmjf (https://github.com/monkeytypegame/monkeytype/security/advisories/GHSA-c878-p3jh-mmjf) should be monitored for a fix release. As a primary compensating control, operators should modify backend/src/middlewares/rate-limit.ts to use only Express's trust-proxy-derived req.ip as the rate-limit key, removing any precedence given to cf-connecting-ip or x-forwarded-for; this requires setting Express's trust proxy option to the specific IP or CIDR of the actual upstream reverse proxy so that req.ip reliably reflects the verified client address. Operators deploying behind Cloudflare should restrict incoming traffic to Cloudflare's published IP ranges only, ensuring the header overwrite is authoritative. At the infrastructure layer, a WAF rule or nginx proxy_set_header directive can strip or overwrite x-forwarded-for and cf-connecting-ip on all inbound requests before they reach the application, eliminating the spoofing vector entirely without code changes - note this may break legitimate IP-based logging downstream. Additionally, applying independent rate limiting at the infrastructure layer (Cloudflare Rate Limiting, AWS WAF, nginx limit_req) specifically on the /users/forgotPasswordEmail and verificationEmail endpoints provides a defense-in-depth layer that does not depend on application-level header trust.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in backend/src/middlewares/rate-limit.ts within Monkeytype's Express.js backend (CPE: cpe:2.3:a:monkeytypegame:monkeytype:*:*:*:*:*:*:*:*). CWE-290 (Authentication Bypass by Spoofing) describes the root cause precisely: the rate-limit key generator reads client-supplied cf-connecting-ip and then x-forwarded-for HTTP headers to derive the bucket identifier before falling back to Express's trust-proxy-resolved req.ip. Because HTTP headers are fully attacker-controllable, rotating their values per request yields a unique key for each request and a fresh rate-limit window, bypassing every downstream limiter. The cf-connecting-ip spoofing vector is topology-dependent - mitigated only when Cloudflare sits in the request path and overwrites the header before it reaches the application. The x-forwarded-for and direct-origin paths are unconditionally vulnerable on any deployment where a trusted upstream proxy does not strip or overwrite these headers. The impacted endpoints include Firebase Auth and SMTP email-trigger routes, meaning quota exhaustion on those third-party services is a realistic downstream consequence.
Know when Monkeytype gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Publicly reachable endpoint requires no credentials or special conditions; impact is solely availability via quota exhaustion with no confidentiality or data integrity breach.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
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.
Executive ViewAI
Monkeytype versions 26.26.0 and earlier contain a rate-limit bypass vulnerability (CVSS 7.5) allowing unauthenticated attackers to flood users with password-reset and verification emails, exhausting email services and impacting all users of affected deployments. Although no public exploit has been identified at time of analysis, the vulnerability enables undetected credential compromise through brute-force attacks. Organizations must immediately inventory deployments and activate interim protections.
No vendor-released patch identified at time of analysis. Interim mitigations include: (1) implement network-layer rate limiting at the reverse proxy or WAF edge, applying per-IP throttling independent of application-controlled headers; (2) restrict cf-connecting-ip and x-forwarded-for header acceptance to traffic from documented trusted proxies only; (3) monitor email service quota usage for anomalies and implement alerts; (4) enable detailed audit logging on password-reset and email-verification operations to detect brute-force patterns; (5) as an emergency measure, apply temporary rate limiting to the /users/forgotPasswordEmail and /verificationEmail endpoints at the network boundary.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
More in Monkeytype
View allMonkeytype is a minimalistic and customizable typing test. Rated critical severity (CVSS 9.6), this vulnerability is rem
Monkeytype 25.49.0 and earlier renders attacker-controlled quote submission fields (quote.text and quote.source) directl
Arbitrary code execution inside Monkeytype's 'fix-formatting' GitHub Actions workflow (versions prior to 26.43.0) lets a
Monkeytype is a minimalistic and customizable typing test. Rated low severity (CVSS 2.4), this vulnerability is low atta
EUVD-2026-63423
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB