Mnemosyne has JWT signature verification bypass sync server that allows authentication bypass
### Summary The Mnemosyne sync server's authentication check decoded JWT bearer tokens but never verified their HMAC-SHA256 signatures. Any well-formed token was accepted, allowing an unauthenticated attacker to impersonate any user and read or modify their sync data. **Severity: Critical** CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N = 9.1 Assumes the sync server endpoint is network-reachable. If your deployment is localhost-only, the score drops substantially and severity becomes High or Medium depending on local exposure. Confirm your threat model. ### Affected versions All mnemosyne versions exposing the sync server endpoint, up to and including v3.10.0. ### Patched versions v3.10.1 (commit a0b6b871 on branch security/jwt-signature-verification) ___ ### Description The sync server uses JWT bearer tokens to authenticate clients. Prior to v3.10.1, the auth check in mnemosyne/core/sync_server.py parsed the JWT's header and payload using base64 decoding, then passed the token to a jwt library call with options that effectively disabled signature verification. The server accepted any well-formed token regardless of the signature, including tokens with alg: none and tokens signed with the wrong key. The fix in v3.10.1 replaces the broken decode with a from-scratch HS256 verifier using only the Python standard library: - Constant-time signature comparison via hmac.compare_digest - Strict alg: HS256 check, rejecting none and other algorithms - UTC-aware exp validation with leewa
GHSA-xcw4-53cc-hv32
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: osv:GHSA-xcw4-53cc-hv32
mnemosyne-memory
Source reference: /affected/0/package/name
- Affected versions
- 1.10.1
Source reference:
/affected/0/versions1.10.2Source reference:
/affected/0/versions1.11.0Source reference:
/affected/0/versions1.12.0Source reference:
/affected/0/versions1.13.0Source reference:
/affected/0/versions1.9.0Source reference:
/affected/0/versions2.0.0Source reference:
/affected/0/versions2.1Source reference:
/affected/0/versions2.2Source reference:
/affected/0/versions2.3Source reference:
/affected/0/versions2.5.0Source reference:
/affected/0/versions2.6.0Source reference:
/affected/0/versions2.7.0Source reference:
/affected/0/versions2.8.0Source reference:
/affected/0/versions3.0.0Source reference:
/affected/0/versions3.1.0Source reference:
/affected/0/versions3.1.2Source reference:
/affected/0/versions3.10.0Source reference:
/affected/0/versions3.3.0Source reference:
/affected/0/versions3.4.0Source reference:
/affected/0/versions3.5.0Source reference:
/affected/0/versions3.6.0Source reference:
/affected/0/versions3.7.0Source reference:
/affected/0/versions3.8.0Source reference:
/affected/0/versions3.9.0Source reference:
/affected/0/versions - Fixed versions
- 3.10.1
Source reference:
/affected/0/ranges - Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "3.10.1"
}
]
}
],
"package": {
"name": "mnemosyne-memory",
"purl": "pkg:pypi/mnemosyne-memory",
"ecosystem": "PyPI"
},
"versions": [
"1.10.1",
"1.10.2",
"1.11.0",
"1.12.0",
"1.13.0",
"1.9.0",
"2.0.0",
"2.1",
"2.2",
"2.3",
"2.5.0",
"2.6.0",
"2.7.0",
"2.8.0",
"3.0.0",
"3.1.0",
"3.1.2",
"3.10.0",
"3.3.0",
"3.4.0",
"3.5.0",
"3.6.0",
"3.7.0",
"3.8.0",
"3.9.0"
],
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-xcw4-53cc-hv32/GHSA-xcw4-53cc-hv32.json",
"last_known_affected_version_range": "<= 3.10.0"
}
}
]- Related CVEs
- CVE-2026-59163
Source reference:
/aliases
Publisher severity
critical
Source reference: /database_specific/severity
- Event
- #62526 · Revision 1
- Added to Heist Feed
- Publisher date