Skip to content
Heist/ feed
UnratedFix available

Mnemosyne has JWT signature verification bypass sync server that allows authentication bypass

Type: advisorySource: OSV1 source record

### 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

Announced Source revision 1
Original source ↗

PYSEC-2026-4106

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:PYSEC-2026-4106

mnemosyne-memory

Source reference: /affected/0/package/name

Affected versions
1.10.1

Source reference: /affected/0/versions

1.10.2

Source reference: /affected/0/versions

1.11.0

Source reference: /affected/0/versions

1.12.0

Source reference: /affected/0/versions

1.13.0

Source reference: /affected/0/versions

1.9.0

Source reference: /affected/0/versions

2.0.0

Source reference: /affected/0/versions

2.1

Source reference: /affected/0/versions

2.2

Source reference: /affected/0/versions

2.3

Source reference: /affected/0/versions

2.5.0

Source reference: /affected/0/versions

2.6.0

Source reference: /affected/0/versions

2.7.0

Source reference: /affected/0/versions

2.8.0

Source reference: /affected/0/versions

3.0.0

Source reference: /affected/0/versions

3.1.0

Source reference: /affected/0/versions

3.1.2

Source reference: /affected/0/versions

3.10.0

Source reference: /affected/0/versions

3.3.0

Source reference: /affected/0/versions

3.4.0

Source reference: /affected/0/versions

3.5.0

Source reference: /affected/0/versions

3.6.0

Source reference: /affected/0/versions

3.7.0

Source reference: /affected/0/versions

3.8.0

Source reference: /affected/0/versions

3.9.0

Source 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/pypa/advisory-database/blob/main/vulns/mnemosyne-memory/PYSEC-2026-4106.yaml"
    }
  }
]
Related CVEs
CVE-2026-59163

Source reference: /aliases

Publisher severity

No explicit severity was provided.

Event
#62494 · Revision 1
Added to Heist Feed
Publisher date
Read the original announcement