{"record":{"id":"13ac4341eb77f614","repo":"bitwarden/server","slug":"cannot-edit-item-update-to-the-latest-version-of","errorCode":null,"errorMessage":"Cannot edit item. Update to the latest version of Bitwarden and try again.","messagePattern":"Cannot edit item\\. Update to the latest version of Bitwarden and try again\\.","errorType":"http","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"src/Api/Vault/Controllers/CiphersController.cs","lineNumber":1659,"sourceCode":"        });\n    }\n\n    private void ValidateAttachment()\n    {\n        if (!Request?.ContentType.Contains(\"multipart/\") ?? true)\n        {\n            throw new BadRequestException(\"Invalid content.\");\n        }\n    }\n\n    private void ValidateClientVersionForFido2CredentialSupport(Cipher cipher)\n    {\n        if (cipher.Type == Core.Vault.Enums.CipherType.Login && !cipher.IsDataBlobEncrypted())\n        {\n            var loginData = JsonSerializer.Deserialize<CipherLoginData>(cipher.Data);\n            if (loginData?.Fido2Credentials != null && _currentContext.ClientVersion < _fido2KeyCipherMinimumVersion)\n            {\n                throw new BadRequestException(\"Cannot edit item. Update to the latest version of Bitwarden and try again.\");\n            }\n        }\n    }\n\n    private async Task<CipherOrganizationDetails> GetByIdAsyncAdmin(Guid cipherId)\n    {\n        return await _cipherRepository.GetOrganizationDetailsByIdAsync(cipherId);\n    }\n\n    private async Task<CipherDetails> GetByIdAsync(Guid cipherId, Guid userId)\n    {\n        return await _cipherRepository.GetByIdAsync(cipherId, userId);\n    }\n\n    private DateTime? GetLastKnownRevisionDateFromForm()\n    {\n        DateTime? lastKnownRevisionDate = null;\n        if (Request.Form.TryGetValue(\"lastKnownRevisionDate\", out var dateValue))","sourceCodeStart":1641,"sourceCodeEnd":1677,"githubUrl":"https://github.com/bitwarden/server/blob/e93b962371d80964556f5590c6615f5160a437a1/src/Api/Vault/Controllers/CiphersController.cs#L1641-L1677","documentation":"Thrown by ValidateClientVersionForFido2CredentialSupport when all of these are true: the cipher is a Login type, the data blob is not encrypted (server can deserialize it), the deserialized login data contains Fido2Credentials, and _currentContext.ClientVersion is below _fido2KeyCipherMinimumVersion (which is Version '2023.10.0'). This prevents older clients from corrupting or misinterpreting passkey/FIDO2 credential data they cannot handle.","triggerScenarios":"An outdated Bitwarden client (extension, desktop, mobile, web, or CLI) attempts to edit a cipher that contains FIDO2/passkey credentials; the Bitwarden-Client-Version header is missing or reports a version below 2023.10.0; a proxy strips client headers.","commonSituations":"User has an outdated browser extension or mobile app that predates passkey support; automated tooling using an old CLI version; a reverse proxy strips the Bitwarden-Client-Version header; the web vault served a stale cached version.","solutions":["Update the Bitwarden client to the latest version (at minimum 2023.10.0)","Verify the Bitwarden-Client-Version header is sent with every request from the client","If behind a proxy or API gateway, ensure client headers are forwarded unchanged","For CLI users, upgrade bw to the latest release"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Check client version before editing a cipher with FIDO2 credentials\nvar minVersion = new Version(\"2023.10.0\");\nif (currentClientVersion < minVersion && cipherHasFido2Credentials)\n{\n    throw new InvalidOperationException(\n        $\"Client version {currentClientVersion} is too old. Minimum required: {minVersion}. \" +\n        \"Update to the latest version of Bitwarden.\");\n}\n// Safe to proceed","typeGuard":"// Type guard / version check helper\nstatic bool ClientSupportsFido2(Version clientVersion)\n{\n    return clientVersion >= new Version(\"2023.10.0\");\n}","tryCatchPattern":null,"preventionTips":["Always send the Bitwarden-Client-Version header with every API request","Check for client updates before editing items that may contain passkeys","Ensure proxies and gateways forward client headers unchanged","For automated tooling, pin to the latest CLI/SDK version"],"tags":["fido2","passkey","webauthn","client-version","compatibility","login-cipher"],"backgroundTag":null,"analyzedSha":"e93b962371d80964556f5590c6615f5160a437a1","analyzedAt":"2026-08-13T14:22:19.382Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}