VDB
Sign up
HIGH7.5

PYSEC-2026-1244

ChatterBot Vulnerable to Denial of Service via Database Connection Pool Exhaustion

Quick fix

PYSEC-2026-1244 — chatterbot: upgrade to the fixed version with the command below.

pip install --upgrade 'chatterbot>=1.2.11'

Details

### Summary ChatterBot versions up to 1.2.10 are vulnerable to a denial-of-service condition caused by improper database session and connection pool management. Concurrent invocations of the get_response() method can exhaust the underlying SQLAlchemy connection pool, resulting in persistent service unavailability and requiring a manual restart to recover.

### Details ChatterBot relies on SQLAlchemy for database access and uses a connection pool with default limits. The get_response() method does not enforce concurrency limits, rate limiting, or explicit session lifecycle controls.

When multiple threads concurrently invoke get_response(), database connections are rapidly consumed and not released in a timely manner. This leads to exhaustion of the SQLAlchemy QueuePool, causing subsequent requests to block and eventually fail with a TimeoutError.

This issue can be triggered without authentication in deployments where ChatterBot is exposed as a chatbot service, making it exploitable by remote attackers to cause denial of service.

PoC Video: https://github.com/user-attachments/assets/4ee845c4-b847-4854-84ec-4b2fb2f7090f

### PoC 1. Install ChatterBot version 1.2.10. 2. Use the default database configuration (SQLite / SQLAlchemy). 3. Run the following Python script to invoke concurrent requests:

from chatterbot import ChatBot import threading

bot = ChatBot("dos-test")

def attack(): bot.get_response("hello")

threads = [] for _ in range(30): t = threading.Thread(target=attack) t.start() threads.append(t)

for t in threads: t.join()

4. Observe that the application becomes unresponsive and raises SQLAlchemy TimeoutError exceptions indicating exhaustion of the connection pool.

### Impact This vulnerability allows an attacker to trigger a denial-of-service condition by exhausting the database connection pool. Once triggered, the chatbot becomes unresponsive to legitimate users and requires a manual restart to restore functionality.

All deployments of ChatterBot version 1.2.10 or earlier that allow concurrent access to the get_response() method are impacted.

Are you affected?

Enter the version of the package you're using.

Affected packages

PyPI/chatterbot
Introduced in: 0Fixed in: 1.2.11
Fixpip install --upgrade 'chatterbot>=1.2.11'

References