---
id: CVE-2024-53861
aliases:
  - GHSA-75c5-xw7c-p5pm
  - PYSEC-2026-1814
title: PyJWT Issuer field partial matches allowed
summary: PyJWT Issuer field partial matches allowed
severity: low
cvss: 2.2
cvssVector: 'CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:L/A:N'
vendor: pyjwt
product: pyjwt
ecosystem: pip
affected:
  - 'pyjwt >= 2.10.0, < 2.10.1'
patched:
  - pyjwt 2.10.1
published: '2024-12-02'
updated: '2026-09-10'
sourceUpdated: '2026-09-10T03:50:21.333090692Z'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/GHSA-75c5-xw7c-p5pm'
references:
  - url: 'https://github.com/jpadilla/pyjwt/security/advisories/GHSA-75c5-xw7c-p5pm'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2024-53861'
  - url: >-
      https://github.com/jpadilla/pyjwt/commit/1570e708672aa9036bc772476beae8bfa48f4131#diff-6893ad4a1c5a36b8af3028db8c8bc3b62418149843fc382faf901eaab008e380R366
  - url: >-
      https://github.com/jpadilla/pyjwt/commit/33022c25525c1020869c71ce2a4109e44ae4ced1
  - url: 'https://github.com/jpadilla/pyjwt'
tags:
  - osv
  - pip
epss: 0.00832
epssPercentile: 0.55623
ingestedAt: '2026-07-08T18:25:46.765Z'
---

## Overview

### Summary
The wrong string if check is run for `iss` checking, resulting in `"acb"` being accepted for `"_abc_"`.

### Details
This is a bug introduced in version [2.10.0](https://github.com/jpadilla/pyjwt/commit/1570e708672aa9036bc772476beae8bfa48f4131#diff-6893ad4a1c5a36b8af3028db8c8bc3b62418149843fc382faf901eaab008e380R366): checking the "iss" claim
changed from `isinstance(issuer, list)` to `isinstance(issuer,
Sequence)`.

```diff
-        if isinstance(issuer, list):
+        if isinstance(issuer, Sequence):
            if payload["iss"] not in issuer:
                raise InvalidIssuerError("Invalid issuer")
        else:
```

Since str is a Sequnce, but not a list, `in` is also used for string
comparison. This results in `if "abc" not in "__abcd__":` being
checked instead of `if "abc" != "__abc__":`.
### PoC
Check out the unit tests added here: https://github.com/jpadilla/pyjwt-ghsa-75c5-xw7c-p5pm
```python
        issuer = "urn:expected"

        payload = {"iss": "urn:"}

        token = jwt.encode(payload, "secret")

        # decode() succeeds, even though `"urn:" != "urn:expected". No exception is raised.
        with pytest.raises(InvalidIssuerError):
            jwt.decode(token, "secret", issuer=issuer, algorithms=["HS256"])
```


### Impact

I would say the real world impact is not that high, seeing as the signature still has to match. We should still fix it.


## Affected packages

- `pyjwt >= 2.10.0, < 2.10.1`

## Remediation

Upgrade to a patched release:

- `pyjwt 2.10.1`
