Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain victim's valid password
-
DeliveryLoop TOTP guesses at /api/app/sync/register
-
ExploitLockout counter never increments
-
InstallReceive clientId/clientToken on hit
-
C2Exchange token for full JWT
-
ExecuteDisable MFA permanently
-
ImpactFull account takeover
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
|
| Exploitation Conditions | Exploitation requires that the attacker already possess the victim's valid username and password (PR:L) and that the target account has 2FA/TOTP enabled - the flaw specifically defeats the second factor by preventing the failed-attempt counter from ever reaching USER_MAX_PASSWORD_ATTEMPTS (10) on the POST /api/app/sync/register desktop-sync path. Limiting factors: the attacker must brute-force a rotating 6-digit TOTP within its short validity window (reflected as AC:H), and must hold working first-factor credentials, so this is not exploitable against accounts for which the attacker lacks the password. Affected deployments are Sync-in Server instances prior to version 2.4.0. |
| Impact | This is a real, credible authentication-security issue but not a mass-exploitation emergency. The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N, base 6.8) correctly captures a network-reachable flaw that nonetheless requires meaningful preconditions: AC:H reflects the need to brute-force a rotating 6-digit TOTP within its validity window, and PR:L reflects that the attacker must already possess the victim's valid username and password - the vulnerability defeats the second factor, not the first. Impact is genuine (C:H/I:H): a successful guess yields a clientToken exchangeable for a full JWT, and the attacker can then permanently disable MFA, i.e. full account takeover. No EPSS score, no CISA KEV listing, and no public POC were provided, so this is 'no public exploit identified at time of analysis' - treat exploitation as plausible-but-unproven rather than active. The 6.8 rating is broadly justified; the practical risk hinges entirely on whether an attacker has already obtained valid passwords (credential stuffing/phishing), so this is best prioritized as a defense-in-depth/MFA-integrity fix rather than an unauthenticated RCE-tier drop-everything issue. |
| Exploit ScenarioDerived | An attacker who has already harvested a Sync-in user's password (via phishing or a prior breach) but is blocked by 2FA repeatedly calls POST /api/app/sync/register with that password and guessed TOTP codes; because failed TOTP attempts never increment the lockout counter, the account is never locked and the code can be brute-forced. On a correct guess the server returns {clientId, clientToken}, which the attacker exchanges at POST /api/app/sync/auth/cookie for a full JWT and then calls POST /api/auth/2fa/disable to permanently strip MFA. No public exploit code is currently identified, but the attack requires only standard HTTP requests once valid credentials are held. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Sync-in Server versions prior to 2.4.0 fail to increment the failed-attempt counter when a valid username and password are paired with an incorrect TOTP code on the desktop sync registration endpoint (POST /api/app/sync/register), so the account lockout threshold of 10 is never reached. An attacker who already possesses working first-factor credentials-and is targeting an account with 2FA enabled-can repeatedly guess the rotating 6-digit TOTP without triggering lockout; a successful guess yields a client ID and token that can be exchanged for a full JWT, after which the attacker can call POST /api/auth/2fa/disable to permanently remove MFA. Exploitation requires authenticated access (PR:L) and the high attack complexity (AC:H) reflects the need to guess a time-based code within its short validity window; no public exploit identified at time of analysis. This is a real, credible authentication-security issue but not a mass-exploitation emergency.
RemediationAI
Upgrade Sync-in Server to version 2.4.0 or later. The vendor-released patch in 2.4.0 fixes the failed-attempt counter logic so that the lockout threshold of 10 is properly enforced. The advisory at https://github.com/Sync-in/server/security/advisories/GHSA-274f-6w77-8qm9 contains upgrade instructions. As a compensating control if immediate upgrade is not possible, consider monitoring and rate-limiting requests to POST /api/app/sync/register at a reverse proxy or WAF, though this may affect legitimate sync client registrations; alternatively, temporarily disable desktop sync client registration for high-value accounts if the feature is not essential. Note that these workarounds do not address the underlying flaw and may introduce side effects such as blocking legitimate clients or reducing functionality.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, 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 the desktop sync client registration flow of Sync-in Server, an open-source file storage, sharing, and collaboration platform. The endpoint POST /api/app/sync/register accepts a username, password, and TOTP code; on a failed TOTP, SyncClientsManager.register() invokes updateAccesses(user, ip, false), which unexpectedly enters a freeze branch that writes the passwordAttempts field back without incrementing it. Because the counter never reaches the constant USER_MAX_PASSWORD_ATTEMPTS (10), the lockout gate that would normally block further attempts is never triggered. This is a classic CWE-307 (Improper Restriction of Excessive Authentication Attempts) weakness. The affected product is identified by CPE cpe:2.3:a:sync-in:server:*:*:*:*:*:*:*:* (all versions before 2.4.0). Once a TOTP guess succeeds, the server returns a {clientId, clientToken} pair that can be exchanged at POST /api/app/sync/auth/cookie for a JWT, granting full API access. While that token remains valid, the attacker can also invoke POST /api/auth/2fa/disable to permanently disable multi-factor authentication for the victim account. The assessed CVSS v3.1 vector is CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N (score 6.8), reflecting network exploitation with high complexity and authenticated privileges.
Know when Server 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:H/PR:L/UI:N/S:U/C:H/I:H/A:N
Network-reachable endpoint (AV:N); attacker must already hold valid password (PR:L) and brute-force a time-limited TOTP (AC:H); account takeover yields C:H/I:H, no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Sync-in Server is an open-source platform for file storage, sharing, collaboration, and syncing. Prior to version 2.4.0, POST /api/app/sync/register accepts credentials and a TOTP code to register a desktop sync client. On a failed TOTP, SyncClientsManager.register() calls updateAccesses(user, ip, false), which hits a freeze branch that writes passwordAttempts back unchanged. The counter never reaches USER_MAX_PASSWORD_ATTEMPTS (10) and the lockout gate never fires. A successful guess returns a {clientId, clientToken} pair. The token can be exchanged via POST /api/app/sync/auth/cookie for a full JWT. While the code is valid, the attacker can also call POST /api/auth/2fa/disable to permanently remove MFA. Version 2.4.0 patches the issue.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Traccar Traccar Server version 4.0 and earlier contains a CWE-94: Improper Control of Generation of Code ('Code Injectio
Account takeover in self-hosted Bitwarden Server before 2026.6.0 lets a low-privileged organization member steal any oth
Full user impersonation in the Laci Synchroni sync server (backend prior to 1.2.3) lets an attacker take over any accoun
Provider service users in Bitwarden Server Cloud can hijack arbitrary organizations via unauthorized API endpoint access
NoMachine Server is affected by Integer Overflow. Rated high severity (CVSS 8.8), this vulnerability is low attack compl
NoMachine Server is affected by Buffer Overflow. Rated high severity (CVSS 8.8), this vulnerability is low attack comple
Authentication bypass in Bitwarden Server versions prior to 2026.4.1 allows authenticated users with SCIM management pri
JetAudio jetCast Server 2.0 contains a stack-based buffer overflow vulnerability in the Log Directory configuration fiel
Credential-holding attackers can completely bypass TOTP two-factor authentication on Sync-in Server versions prior to 2.
A broken authentication vulnerability in 4D SAS 4D Server software v17, v18, v19 R7, and earlier allows attackers to sen
An information disclosure vulnerability in 4D SAS 4D Server Application v17, v18, v19 R7 and earlier allows attackers to
Privilege escalation in self-hosted Bitwarden Server before 2026.5.0 lets an authenticated organization member holding a
EUVD-2026-84112
GHSA-274f-6w77-8qm9
NVD
CVE.org
EPSS
Exploit-DB