Skip to main content

Monkeytype CVE-2026-69183

| EUVDEUVD-2026-63423 HIGH
Authentication Bypass by Spoofing (CWE-290)
2026-08-20 GitHub_M
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify registered user email address
  2. Delivery
    Rotate x-forwarded-for header value per request
  3. Exploit
    Each value creates unique rate-limit bucket
  4. Execution
    Bypass all rate limiters on public endpoints
  5. Persist
    Flood /users/forgotPasswordEmail with unlimited requests
  6. Impact
    Exhaust 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 x-forwarded-for spoofing path requires only network access to any Monkeytype backend HTTP endpoint and is exploitable unconditionally on deployments where no trusted upstream proxy strips or overwrites that header before the request reaches the application. The cf-connecting-ip path is exploitable only on deployments not behind Cloudflare, or where Cloudflare is not configured as the sole source allowed to set that header. No authentication is required. To trigger mail-bombing specifically, the attacker must know at least one registered user's email address; however, the rate-limit bypass itself applies to all public API endpoints regardless of whether a target email is known. Exploitation is constrained to resource exhaustion and brute-force evasion - no direct access to stored user data or credentials is provided by this bypass alone. Deployments correctly configured with trust proxy set exclusively to a verified upstream proxy IP, where that proxy reliably overwrites both headers, are substantially mitigated.

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 /users/forgotPasswordEmail, incrementing a spoofed x-forwarded-for header value with each request. Because each unique header value produces a distinct rate-limit bucket, no limiter fires and the backend dispatches a password-reset email for every request, flooding the victim's inbox and rapidly depleting the platform's Firebase or SMTP sending quota. Once quota is exhausted, legitimate password reset and email verification functions are denied to all users until quota resets, and the same header-rotation technique can be applied to brute-force login endpoints without triggering lockout.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

monkeytype ≤ 26.26.0

Affected Packages

euvd monkeytype no fix

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

Vendor (GitHub_M) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Publicly reachable endpoint requires no credentials or special conditions; impact is solely availability via quota exhaustion with no confidentiality or data integrity breach.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:L/SA:L

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
popular consumer typing website; negligible self-hosted enterprise footprint
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy