CVE-2026-114138: Django REST framework: Accept header with many large quoted parameters burns ~19s of CPU per request in content negotiation

Published Oct 21, 2026
·
Updated

Django REST framework is a toolkit for building Web APIs. Prior to 3.18.2, DefaultContentNegotiation.getacceptlist in restframework/negotiation.py accepts an unbounded number and aggregate size of Accept tokens, while selectrenderer in that file repeatedly invokes MediaType parsing from restframework/utils/mediatypes.py for each attacker-controlled token, every renderer, and forced 406 renegotiation. A remote unauthenticated client can send many distinct media types containing large quoted parameter values with numerous semicolons, causing Django's parameter parser and DRF's repeated parsing structure to consume disproportionate CPU. Requests to any reachable endpoint can pin synchronous workers for prolonged periods, and concurrent requests can make the service unavailable until the requests stop. This issue is fixed in version 3.18.2.

Affected Software

1 affected component
pypi/djangorestframework<3.18.2

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade Django REST framework to a version that resolves this vulnerability.

    Fixed in 3.18.2

Event History

Oct 21, 2026
CVE Published
via MITRE·08:09 PM
Data Sourced
via MITRE·08:09 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which deployments are exposed to this denial-of-service condition?

Deployments using Django REST framework before 3.18.2 are exposed if an attacker can reach any API endpoint that performs DRF content negotiation. Synchronous workers are particularly affected because a costly request can pin a worker for a prolonged period.

2

Does exploitation require authentication or user interaction?

No. A remote unauthenticated client can trigger the issue by sending crafted Accept headers, and no user interaction is required.

3

What request characteristics are used to consume CPU?

An attacker sends an Accept header with many distinct media-type tokens, large quoted parameter values, and numerous semicolons. DRF repeatedly parses these attacker-controlled tokens across renderers and during forced 406 renegotiation, consuming disproportionate CPU.

4

What is the remediation?

Upgrade Django REST framework to version 3.18.2, which fixes the unbounded Accept-token count and aggregate-size handling issue.

5

What operational impact should be expected during an attack?

Concurrent crafted requests can pin workers and make the service unavailable until those requests stop. The affected endpoint need only be reachable; the issue is not limited to a specific API route.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203