{"id":"CVE-2026-32729","summary":"Runtipi has a TOTP two-factor authentication bypass via unrestricted brute-force on `/api/auth/verify-totp`","details":"Runtipi is a personal homeserver orchestrator. Prior to 4.8.1, The Runtipi /api/auth/verify-totp endpoint does not enforce any rate limiting, attempt counting, or account lockout mechanism. An attacker who has obtained a user's valid credentials (via phishing, credential stuffing, or data breach) can brute-force the 6-digit TOTP code to completely bypass two-factor authentication. The TOTP verification session persists for 24 hours (default cache TTL), providing an excessive window during which the full 1,000,000-code keyspace (000000–999999) can be exhausted. At practical request rates (~500 req/s), the attack completes in approximately 33 minutes in the worst case. This vulnerability is fixed in 4.8.1.","aliases":["GHSA-v6gf-frxm-567w"],"modified":"2026-04-10T05:42:27.485247Z","published":"2026-03-13T21:41:11.699Z","database_specific":{"cwe_ids":["CWE-307","CWE-799"],"cna_assigner":"GitHub_M","osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/32xxx/CVE-2026-32729.json"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/32xxx/CVE-2026-32729.json"},{"type":"ADVISORY","url":"https://github.com/runtipi/runtipi/security/advisories/GHSA-v6gf-frxm-567w"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-32729"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/runtipi/runtipi","events":[{"introduced":"0"},{"fixed":"870bd7005754c6505869675b7cd72b53131922b0"}]}],"versions":["e2e","nightly","v0.1.0","v0.1.1","v0.1.2","v0.1.3","v0.1.4","v0.1.5","v0.2.0","v0.2.1","v0.3.0","v0.3.1","v0.4.0","v0.4.1","v0.4.2","v0.5.0","v0.6.0","v0.6.1","v0.7.0","v0.7.1","v0.7.2","v0.7.3","v0.7.4","v0.8.0","v0.8.1","v1.0.0","v1.0.1","v1.1.0","v1.1.1","v1.1.2","v1.2.0","v1.2.1","v1.3.0","v1.4.0","v1.4.1","v1.4.2","v1.5.0","v1.5.1","v1.5.2","v1.6.0","v2.0.0","v2.0.0-beta.1","v2.0.1","v2.0.2","v2.0.3","v2.0.4","v2.0.5","v2.0.6","v2.0.7","v2.1.0","v2.2.0","v2.2.1","v2.3.0","v2.3.1","v2.4.0","v2.5.0","v3.0.0","v3.0.1","v3.0.2","v3.0.3","v3.1.0","v3.1.1","v3.1.2","v3.1.3","v3.10.0","v3.10.0-beta.1","v3.10.0-beta.2","v3.10.0-beta.3","v3.10.0-beta.4","v3.10.0-beta.9","v3.2.0","v3.3.0","v3.3.2","v3.4.0","v3.4.1","v3.5.0","v3.5.0-beta.2","v3.5.1","v3.5.2","v3.5.3","v3.6.0","v3.6.1","v3.6.2","v3.6.3","v3.6.4","v3.7.0","v3.7.0-alpha.1","v3.7.0-alpha.2","v3.7.0-alpha.3","v3.7.0-alpha.4","v3.7.0-alpha.5","v3.7.0-alpha.6","v3.7.0-alpha.7","v3.7.0-alpha.8","v3.7.0-alpha.9","v3.7.0-beta.1","v3.7.0-beta.10","v3.7.0-beta.2","v3.7.0-beta.3","v3.7.0-beta.4","v3.7.0-beta.5","v3.7.0-beta.6","v3.7.0-beta.7","v3.7.0-beta.8","v3.7.0-beta.9","v3.7.1","v3.7.1-beta.1","v3.7.1-beta.2","v3.7.1-beta.3","v3.7.2","v3.7.2-beta.1","v3.7.3","v3.7.3-beta.1","v3.7.4","v3.7.5","v3.8.0","v3.8.0-beta.1","v3.8.0-beta.2","v3.8.1","v3.8.2","v3.8.2-alpha.1","v3.8.3","v3.8.3-alpha.1","v3.8.3-alpha.2","v3.8.3-beta.1","v3.8.3-beta.2","v3.8.3-beta.3","v3.8.3-beta.4","v3.8.3-beta.5","v3.8.3-beta.6","v3.8.4","v3.8.4-alpha.1","v3.8.4-alpha.2","v3.8.4-alpha.3","v3.8.4-beta.1","v3.9.0","v3.9.0-alpha.1","v3.9.0-alpha.2","v3.9.0-beta.1","v3.9.0-beta.2","v3.9.0-beta.3","v3.9.0-beta.4","v3.9.1","v3.9.2","v3.9.2-beta.1","v3.9.2-beta.2","v3.9.3","v3.9.3-beta.1","v3.9.3-beta.2","v3.9.3-beta.3","v3.9.4","v3.9.4-beta.1","v3.9.4-beta.2","v3.9.4-beta.3","v3.9.4-beta.4","v3.9.4-beta.5","v3.9.5-beta.1","v4.0.0","v4.0.0-alpha.1","v4.0.0-alpha.2","v4.0.0-beta.1","v4.0.0-beta.10","v4.0.0-beta.11","v4.0.0-beta.12","v4.0.0-beta.13","v4.0.0-beta.2","v4.0.0-beta.3","v4.0.0-beta.4","v4.0.0-beta.5","v4.0.0-beta.6","v4.0.0-beta.7","v4.0.0-beta.8","v4.0.0-beta.9","v4.0.1","v4.0.2","v4.0.3","v4.0.3-beta.1","v4.1.0","v4.1.0-alpha.1","v4.1.0-alpha.2","v4.1.0-beta.1","v4.1.0-beta.2","v4.1.1","v4.1.1-alpha.1","v4.1.1-alpha.2","v4.1.1-alpha.3","v4.1.2-alpha.1","v4.2.0","v4.2.0-beta.1","v4.2.0-beta.2","v4.2.0-beta.3","v4.2.0-beta.4","v4.2.1","v4.3.0","v4.3.0-beta.1","v4.3.0-beta.2","v4.4.0","v4.4.0-alpha.1","v4.4.0-beta.1","v4.4.0-beta.2","v4.4.0-beta.3","v4.4.0-beta.4","v4.4.0-beta.6","v4.4.0-beta.7","v4.5.0","v4.5.0-beta.1","v4.5.0-beta.2","v4.5.0-beta.3","v4.5.0-beta.4","v4.5.0-beta.5","v4.5.0-beta.6","v4.5.0-beta.7","v4.5.1","v4.5.2","v4.5.2-alpha.1","v4.5.3","v4.5.4","v4.5.5","v4.6.0","v4.6.0-beta.1","v4.6.0-beta.2","v4.6.1","v4.6.2","v4.6.3","v4.6.3-beta.1","v4.6.3-beta.2","v4.6.4","v4.6.5","v4.7.0","v4.7.0-alpha.1","v4.7.0-alpha.2","v4.7.0-beta.1","v4.7.0-beta.2","v4.7.0-beta.3","v4.7.1","v4.7.1-beta.1","v4.7.2","v4.7.2-beta.1","v4.8.0","v4.8.0-beta.1","v4.8.0-beta.2","v4.8.0-beta.3","v4.8.0-beta.4","v4.8.0-beta.5"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-32729.json"}}],"schema_version":"1.7.5","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N"}]}