CVE-2026-23842

7.5 HIGH

📋 TL;DR

ChatterBot versions up to 1.2.10 are vulnerable to denial-of-service due to improper database connection pool management. Concurrent calls to the get_response() method can exhaust SQLAlchemy connections, causing persistent service unavailability requiring manual restart. This affects all users running vulnerable ChatterBot instances.

💻 Affected Systems

Products:
  • ChatterBot
Versions: All versions up to and including 1.2.10
Operating Systems: All operating systems running Python
Default Config Vulnerable: ⚠️ Yes
Notes: All configurations using the vulnerable get_response() method are affected. The vulnerability is in the core library, not dependent on specific database backends.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete service outage requiring manual restart, potentially disrupting chatbot-dependent business operations for extended periods.

🟠

Likely Case

Service degradation or temporary unavailability during high concurrent usage, requiring intervention to restore functionality.

🟢

If Mitigated

Minimal impact with proper connection limits and monitoring, though risk remains without patching.

🌐 Internet-Facing: HIGH - Internet-facing chatbots are exposed to automated attacks that can trigger concurrent requests.
🏢 Internal Only: MEDIUM - Internal systems may still experience accidental or intentional DoS from authenticated users.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Exploitation requires only the ability to send concurrent requests to the get_response() endpoint, making it simple to weaponize.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.2.11

Vendor Advisory: https://github.com/gunthercox/ChatterBot/security/advisories/GHSA-v4w8-49pv-mf72

Restart Required: Yes

Instructions:

1. Update ChatterBot: pip install --upgrade chatterbot==1.2.11
2. Restart your chatbot application
3. Verify the update with: pip show chatterbot

🔧 Temporary Workarounds

Rate Limiting

all

Implement request rate limiting to prevent concurrent exhaustion of connection pool

# Example using Flask-Limiter
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
limiter = Limiter(get_remote_address)
@limiter.limit("10 per minute")
def get_response_endpoint():
    # Your chatbot logic

Connection Pool Configuration

all

Increase SQLAlchemy connection pool size and implement timeouts

# In your SQLAlchemy configuration
engine = create_engine('sqlite:///chatbot.db', pool_size=20, max_overflow=30, pool_timeout=30)

🧯 If You Can't Patch

  • Implement strict rate limiting and monitoring for concurrent requests to get_response() endpoints
  • Deploy behind a WAF with DoS protection and implement circuit breaker patterns in application code

🔍 How to Verify

Check if Vulnerable:

Check installed ChatterBot version: pip show chatterbot | grep Version

Check Version:

pip show chatterbot | grep Version

Verify Fix Applied:

Confirm version is 1.2.11 or higher and test with concurrent requests to ensure service remains available

📡 Detection & Monitoring

Log Indicators:

  • SQLAlchemy connection pool exhaustion errors
  • Database connection timeout messages
  • Increased error rates from get_response() calls

Network Indicators:

  • Spike in concurrent requests to chatbot endpoints
  • Increased response times followed by service unavailability

SIEM Query:

source="chatbot.logs" AND ("pool exhausted" OR "TimeoutError" OR "OperationalError")

🔗 References

📤 Share & Export