Cloudanix VulnDB

CVE-2024-4340

High · 7.5

CVSS

7.5

EPSS

3.2%

Published

Apr 30, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A malformed input sent to software that analyzes SQL text can make affected services fail or become unavailable.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This vulnerability is a denial-of-service condition in the Python sqlparse library. When sqlparse.parse() receives an attacker-controlled, heavily nested Python list instead of a normal SQL string, the parser can recurse until Python raises a RecursionError. In applications that expose sqlparse parsing to remote users, this can cause request failures, worker crashes, error storms, or resource exhaustion. The flaw does not directly provide code execution, data disclosure, or data modification; the primary impact is loss of availability.

Why it matters to the business

Applications or services that use sqlparse on untrusted input may become unreliable or unavailable when malformed, deeply nested input is submitted. This can interrupt user-facing functionality, degrade API reliability, trigger autoscaling or operational incidents, and create support load. The issue has a high availability impact but is not currently listed in CISA KEV and has no known public exploit maturity in the provided data, so remediation should be prioritized based on whether sqlparse is reachable through externally supplied input.

How an attack unfolds

An attacker first identifies an application feature, API endpoint, job processor, query formatter, validation routine, or developer tool that passes user-controlled content into sqlparse.parse(). Instead of sending ordinary SQL text, the attacker submits an extremely deeply nested list-like structure through a path that the application converts or forwards into Python objects. When the vulnerable sqlparse version attempts to parse the structure, recursive processing exceeds Python's recursion limit and raises RecursionError. If the application does not isolate or reject the bad input, the request may fail with a 500 error, the worker may terminate or restart, and repeated submissions can exhaust available workers or keep the affected service in a degraded state.

How to fix it

Upgrade sqlparse to a fixed version or a package build that includes commit b4a39d9850969b4e1d6940d32094ee0b42a2cf03. If consuming directly from Git, pin to that commit or a later trusted commit. If consuming through PyPI, Linux distributions, container images, or vendored dependencies, update to the vendor release that incorporates this fix and rebuild/redeploy dependent applications. As defense in depth, ensure calls to sqlparse.parse() only receive expected string input, reject lists and deeply nested structured objects before parsing, enforce request size and nesting-depth limits at API boundaries, wrap parsing in exception handling that safely returns an error without crashing workers, and apply rate limiting to endpoints that trigger parsing.

How to confirm the fix worked

Confirm dependency inventories, lockfiles, SBOMs, container images, and runtime environments no longer include a vulnerable sqlparse build and that the installed code contains the fix at or after commit b4a39d9850969b4e1d6940d32094ee0b42a2cf03. Run unit or integration tests that pass normal SQL strings to sqlparse.parse() and verify expected behavior. Add a negative regression test using an intentionally nested list-like input and confirm the application rejects it before parsing or handles the resulting exception without worker termination or service degradation. Validate externally exposed endpoints enforce input type, size, and nesting limits and return controlled 4xx responses for malformed input rather than 500 errors or process crashes.

Typical attack path

  1. Find an exposed application feature or API that accepts user-supplied SQL-like input, query text, filters, or structured payloads that may be parsed by sqlparse.
  2. Submit a malformed payload containing a heavily nested list or list-like structure rather than a normal SQL string.
  3. Trigger sqlparse.parse() in the vulnerable application code path.
  4. Cause Python recursion depth exhaustion and a RecursionError inside the parser.
  5. Repeat requests to produce sustained request failures, worker restarts, queue backlog, or service unavailability.

How to detect it

Look for evidence of application-level denial-of-service attempts rather than host compromise. Relevant sources include application logs, Python exception traces, web/API gateway logs, WAF logs, process supervisor logs, container restart events, APM traces, and metrics for 5xx spikes or worker restarts. Search for RecursionError exceptions occurring in code paths that call sqlparse.parse() or reference the sqlparse package. Correlate these errors with requests containing unusually large bodies, excessive nested brackets or arrays, repeated malformed JSON/list payloads, or bursts from the same source IP or client identity. Investigate periods where parsing-related errors align with increased latency, queue buildup, gunicorn/uWSGI/Celery worker restarts, Kubernetes pod restarts, or sudden drops in successful request volume. There are no known malware artifacts or network command-and-control indicators associated with this vulnerability; detection should focus on malformed input attempts and resulting Python recursion failures.

  • RecursionError: maximum recursion depth exceeded
  • maximum recursion depth exceeded while calling a Python object
  • /site-packages/sqlparse/
  • sqlparse.parse(
  • sqlparse.exceptions
  • Traceback (most recent call last):
  • Worker exiting
  • worker timeout
  • container restarted
  • CrashLoopBackOff

What your security team should do

  • Inventory applications, containers, serverless functions, CI tools, and developer portals that include the Python sqlparse library.
  • Prioritize remediation for internet-facing or multi-tenant services where user-controlled input can reach sqlparse.parse().
  • Upgrade or repin sqlparse to a build containing commit b4a39d9850969b4e1d6940d32094ee0b42a2cf03 or later.
  • Add application-layer validation to require SQL parser inputs to be strings and to reject deeply nested structured payloads.
  • Review error handling around SQL parsing so malformed input cannot crash worker processes or create unbounded retries.
  • Add monitoring for RecursionError events, elevated 5xx rates, worker restarts, and unusual request bodies with excessive nesting.
  • If immediate upgrade is not possible, restrict access to affected parsing functionality, apply rate limits, and block requests with excessive bracket or array nesting at API gateways or WAFs.

The record

Passing a heavily nested list to sqlparse.parse() leads to a Denial of Service due to RecursionError.

Affected packages

Ecosystem Package Introduced Fixed
PyPI sqlparse 0 0.5.0
Chainguard kubeflow-pipelines-visualization-server 0 2.2.0-r0
Chainguard py3-sqlparse 0 0.5.0-r0
Chainguard py3-supported-sqlparse 0 0.5.0-r0
Chainguard py3.10-sqlparse 0 0.5.0-r0
Chainguard py3.10-sqlparse-bin 0 0.5.0-r0
Chainguard py3.11-sqlparse 0 0.5.0-r0
Chainguard py3.11-sqlparse-bin 0 0.5.0-r0
Chainguard py3.12-sqlparse 0 0.5.0-r0
Chainguard py3.12-sqlparse-bin 0 0.5.0-r0
Chainguard py3.13-sqlparse 0 0.5.0-r0
Chainguard py3.13-sqlparse-bin 0 0.5.0-r0
Debian:11 sqlparse 0 No fix
Debian:11 sqlparse 0 0.4.1-1+deb11u1
Debian:12 sqlparse 0 No fix
Debian:13 sqlparse 0 0.5.0-1
Mageia:9 python-sqlparse 0 0.4.4-1.1.mga9
Red Hat:ansible_automation_platform:2.4::el8 automation-controller-venv-tower 0 0:4.5.7-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 automation-hub 0 0:4.9.2-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-aiohttp 0 0:3.9.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-aiohttp-debuginfo 0 0:3.9.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-black 0 0:22.8.0-2.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-cryptography 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-cryptography-debuginfo 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-galaxy-ng 0 0:4.9.2-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-gunicorn 0 0:22.0.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-idna 0 0:3.7-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-jinja2 0 0:3.1.4-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-pillow 0 0:10.3.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-pillow-debuginfo 0 0:10.3.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-pydantic 0 0:1.10.15-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-requests 0 0:2.32.2-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-social-auth-app-django 0 0:5.4.1-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python39-sqlparse 0 0:0.5.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-aiohttp 0 0:3.9.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-aiohttp-debugsource 0 0:3.9.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-black 0 0:22.8.0-2.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-cryptography 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-cryptography-debugsource 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-galaxy-ng 0 0:4.9.2-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-gunicorn 0 0:22.0.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-idna 0 0:3.7-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-jinja2 0 0:3.1.4-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-pillow 0 0:10.3.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-pillow-debugsource 0 0:10.3.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-pydantic 0 0:1.10.15-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-requests 0 0:2.32.2-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-social-auth-app-django 0 0:5.4.1-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 python3x-sqlparse 0 0:0.5.0-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 receptor 0 0:1.4.8-1.el8ap
Red Hat:ansible_automation_platform:2.4::el8 receptorctl 0 0:1.4.8-1.el8ap
Red Hat:ansible_automation_platform:2.4::el9 automation-controller-venv-tower 0 0:4.5.7-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 automation-hub 0 0:4.9.2-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-aiohttp 0 0:3.9.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-aiohttp-debugsource 0 0:3.9.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-black 0 0:22.8.0-2.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-cryptography 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-cryptography-debugsource 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-galaxy-ng 0 0:4.9.2-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-gunicorn 0 0:22.0.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-idna 0 0:3.7-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-jinja2 0 0:3.1.4-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-pillow 0 0:10.3.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-pillow-debugsource 0 0:10.3.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-pydantic 0 0:1.10.15-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-requests 0 0:2.32.2-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-social-auth-app-django 0 0:5.4.1-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python-sqlparse 0 0:0.5.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-aiohttp 0 0:3.9.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-aiohttp-debuginfo 0 0:3.9.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-black 0 0:22.8.0-2.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-cryptography 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-cryptography-debuginfo 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-galaxy-ng 0 0:4.9.2-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-gunicorn 0 0:22.0.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-idna 0 0:3.7-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-jinja2 0 0:3.1.4-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-pillow 0 0:10.3.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-pillow-debuginfo 0 0:10.3.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-pydantic 0 0:1.10.15-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-requests 0 0:2.32.2-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-social-auth-app-django 0 0:5.4.1-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 python3-sqlparse 0 0:0.5.0-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 receptor 0 0:1.4.8-1.el9ap
Red Hat:ansible_automation_platform:2.4::el9 receptorctl 0 0:1.4.8-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el8 automation-controller-venv-tower 0 0:4.5.7-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python39-black 0 0:22.8.0-2.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python39-cryptography 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python39-cryptography-debuginfo 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python39-idna 0 0:3.7-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python39-jinja2 0 0:3.1.4-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python39-requests 0 0:2.32.2-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python3x-black 0 0:22.8.0-2.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python3x-cryptography 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python3x-cryptography-debugsource 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python3x-idna 0 0:3.7-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python3x-jinja2 0 0:3.1.4-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 python3x-requests 0 0:2.32.2-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 receptor 0 0:1.4.8-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el8 receptorctl 0 0:1.4.8-1.el8ap
Red Hat:ansible_automation_platform_developer:2.4::el9 automation-controller-venv-tower 0 0:4.5.7-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python-black 0 0:22.8.0-2.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python-cryptography 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python-cryptography-debugsource 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python-idna 0 0:3.7-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python-jinja2 0 0:3.1.4-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python-requests 0 0:2.32.2-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python3-black 0 0:22.8.0-2.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python3-cryptography 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python3-cryptography-debuginfo 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python3-idna 0 0:3.7-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python3-jinja2 0 0:3.1.4-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 python3-requests 0 0:2.32.2-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 receptor 0 0:1.4.8-1.el9ap
Red Hat:ansible_automation_platform_developer:2.4::el9 receptorctl 0 0:1.4.8-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python39-black 0 0:22.8.0-2.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python39-cryptography 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python39-cryptography-debuginfo 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python39-jinja2 0 0:3.1.4-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python3x-black 0 0:22.8.0-2.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python3x-cryptography 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python3x-cryptography-debugsource 0 0:42.0.5-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 python3x-jinja2 0 0:3.1.4-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 receptor 0 0:1.4.8-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el8 receptorctl 0 0:1.4.8-1.el8ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python-black 0 0:22.8.0-2.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python-cryptography 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python-cryptography-debugsource 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python-jinja2 0 0:3.1.4-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python3-black 0 0:22.8.0-2.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python3-cryptography 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python3-cryptography-debuginfo 0 0:42.0.5-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 python3-jinja2 0 0:3.1.4-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 receptor 0 0:1.4.8-1.el9ap
Red Hat:ansible_automation_platform_inside:2.4::el9 receptorctl 0 0:1.4.8-1.el9ap
Red Hat:openstack:17.1::el8 python-sqlparse 0 0:0.4.1-2.el8ost
Red Hat:openstack:17.1::el8 python3-sqlparse 0 0:0.4.1-2.el8ost
Red Hat:openstack:17.1::el9 python-sqlparse 0 0:0.4.1-2.el9ost
Red Hat:openstack:17.1::el9 python3-sqlparse 0 0:0.4.1-2.el9ost
SUSE:Enterprise Storage 7.1 python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise Module for Basesystem 15 SP5 python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP4 python-sqlparse 0 0.4.4-150400.6.7.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP5 python-sqlparse 0 0.4.4-150400.6.7.1
SUSE:Linux Enterprise Server 15 SP3-LTSS python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise Server 15 SP4-LTSS python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP3 python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP4 python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Manager Proxy 4.3 python3-sqlparse 0 0.4.2-150300.12.1
SUSE:Manager Server 4.3 python3-sqlparse 0 0.4.2-150300.12.1
Ubuntu:22.04:LTS sqlparse 0 0.4.2-1ubuntu0.22.04.2
Ubuntu:23.10 sqlparse 0 0.4.2-1ubuntu1.1
Ubuntu:24.04:LTS sqlparse 0 0.4.4-1ubuntu0.1
Wolfi kubeflow-pipelines-visualization-server 0 2.2.0-r0
Wolfi py3-sqlparse 0 0.5.0-r0
Wolfi py3-supported-sqlparse 0 0.5.0-r0
Wolfi py3.10-sqlparse 0 0.5.0-r0
Wolfi py3.10-sqlparse-bin 0 0.5.0-r0
Wolfi py3.11-sqlparse 0 0.5.0-r0
Wolfi py3.11-sqlparse-bin 0 0.5.0-r0
Wolfi py3.12-sqlparse 0 0.5.0-r0
Wolfi py3.12-sqlparse-bin 0 0.5.0-r0
Wolfi py3.13-sqlparse 0 0.5.0-r0
Wolfi py3.13-sqlparse-bin 0 0.5.0-r0
openSUSE:Leap 15.5 python-sqlparse 0 0.4.4-150400.6.7.1
openSUSE:Leap 15.5 python3-sqlparse 0 0.4.2-150300.12.1

Related vulnerabilities