CVE-2026-69183
HighCVSS 7.5Exploitation Probability (EPSS)
Low risk40th percentile - higher than 40% of all known CVEs
Summary
Monkeytype 26.26.0 and earlier has a vulnerability in the rate-limit key generator that uses client-controlled cf-connecting-ip and x-forwarded-for headers before req.ip. An unauthenticated attacker can rotate these headers to bypass rate limits, allowing repeated requests to endpoints like forgotPasswordEmail and verificationEmail, causing mail bombing, exhausting Firebase/SMTP quotas, and evading brute-force protection.
Risk Assessment
An attacker could spam users with emails, exhaust external service quotas, and cause resource exhaustion.
Recommendation
Update Monkeytype to a patched version if available. Configure a trusted proxy to overwrite cf-connecting-ip and x-forwarded-for headers.
Other vulnerabilities in Monkeytype
See all- CVE-2026-118762Critical
In the Monkeytype repository, the .github/workflows/fix-formatting.yml workflow runs on pull_request_target with repository write permissions, checks out a fork pull request, installs dependencies from the fork's package.json, and invokes the fork-controlled oxfmt binary. Because actions/checkout persists the elevated GITHUB_TOKEN in Git configuration until after untrusted code executes, an external contributor can run arbitrary code, read or exfiltrate the token, and push repository content or modify pull requests and issues. The issue affects the repository CI workflow, not the Monkeytype application or user data, and is fixed in version 26.43.0.
- CVE-2025-66563Medium
Monkeytype in version 25.49.0 and earlier improperly handles user input, allowing an attacker to execute malicious JavaScript on anyone viewing a malicious quote submission. quote.text and quote.source are user input and are inserted straight into the DOM; if they contain HTML tags, they will be rendered (after some escaping using quotes and textarea tags).
- CVE-2025-59838Medium
Monkeytype, a typing test application, has an XSS vulnerability due to improper handling of user input when loading a saved custom text. Affects versions 25.36.0 and prior; fixed in version 25.44.0.
Original NVD description (English source)
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.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

