Description
Django REST framework is a toolkit for building Web APIs. From 3.12.0 until 3.18.2, TokenProxy.delete() in rest_framework/authtoken/models.py uses the proxy's user-id pk while the concrete Token token-string primary key identifies rows, so Django issues a deletion query that matches no row and reports zero deletions without raising an error. Applications, administrative integrations, or operational scripts that revoke credentials through a TokenProxy instance can therefore believe revocation succeeded while the token remains live and continues authenticating. DRF's own TokenAdmin.delete_model workaround is not affected, but other callers can leave access available indefinitely because DRF tokens do not expire automatically. This issue is fixed in version 3.18.2.
Published: 2026-10-21
Score: 7.4 High
EPSS: < 1% Very Low
KEV: No
Impact: Unauthorized access due to retained authentication token
Action: Apply Patch
AI Analysis

Impact

In Django REST framework from 3.12.0 through 3.18.1 the TokenProxy.delete() method uses the proxy object's user‑id primary key while the token string primary key identifies rows. Consequently Django issues a deletion query that matches no row and reports zero deletions while raising no error. Applications, administrators, or scripts that revoke credentials via a TokenProxy instance may mistakenly believe the revoke succeeded, but the token remains active and can continue authenticating.

Affected Systems

Django REST framework released between versions 3.12.0 and 3.18.1, inclusive, is affected. The issue is resolved starting with version 3.18.2.

Risk and Exploitability

The CVSS score of 7.4 indicates a high severity impact on confidentiality and integrity. EPSS is not available and the vulnerability is not listed in the CISA KEV catalog. The likely attack vector is via any client, administrative integration, or operational script that calls TokenProxy.delete() to revoke credentials, inferred from the description. Exploitation does not require additional conditions beyond access to the delete operation.

Generated by OpenCVE AI on October 22, 2026 at 02:55 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade Django REST framework to version 3.18.2 or a later release.
  • Verify that all token revocation operations now correctly delete tokens and that no stale tokens remain active.
  • If an upgrade is not immediately possible, modify existing revocation scripts or integrations to use DRF's TokenAdmin.delete_model or confirm the token was actually removed after a delete call.

Generated by OpenCVE AI on October 22, 2026 at 02:55 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-xw6w-gcfp-cf8m Django REST framework: TokenProxy.delete() reports success and revokes nothing
History

Sun, 25 Oct 2026 07:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Thu, 22 Oct 2026 12:30:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Important


Thu, 22 Oct 2026 10:45:00 +0000

Type Values Removed Values Added
First Time appeared Encode
Encode django Rest Framework
Vendors & Products Encode
Encode django Rest Framework

Wed, 21 Oct 2026 20:30:00 +0000

Type Values Removed Values Added
Description Django REST framework is a toolkit for building Web APIs. From 3.12.0 until 3.18.2, TokenProxy.delete() in rest_framework/authtoken/models.py uses the proxy's user-id pk while the concrete Token token-string primary key identifies rows, so Django issues a deletion query that matches no row and reports zero deletions without raising an error. Applications, administrative integrations, or operational scripts that revoke credentials through a TokenProxy instance can therefore believe revocation succeeded while the token remains live and continues authenticating. DRF's own TokenAdmin.delete_model workaround is not affected, but other callers can leave access available indefinitely because DRF tokens do not expire automatically. This issue is fixed in version 3.18.2.
Title Django REST framework: TokenProxy.delete() reports success and revokes nothing
Weaknesses CWE-390
CWE-613
References
Metrics cvssV3_1

{'score': 7.4, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N'}


Subscriptions

Encode Django Rest Framework
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-23T15:08:55.473Z

Reserved: 2026-10-20T21:53:58.473Z

Link: CVE-2026-114137

cve-icon Vulnrichment

Updated: 2026-10-23T14:54:11.548Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-21T21:17:56.057

Modified: 2026-10-23T15:17:25.650

Link: CVE-2026-114137

cve-icon Redhat

Severity : Important

Publid Date: 2026-10-21T20:06:57Z

Links: CVE-2026-114137 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T10:30:04Z

Weaknesses
  • CWE-390

    Detection of Error Condition Without Action

  • CWE-613

    Insufficient Session Expiration