
CVE-2026-23842 — Vulnérabilité de déni de service de sévérité élevée causée par l'épuisement du pool de connexions SQLAlchemy lors d'appels concurrents à get_response() dans ChatterBot ≤ 1.2.10.
Ce dépôt documente ma découverte et ma divulgation responsable de la CVE-2026-23842, une vulnérabilité de déni de service de haute sévérité dans ChatterBot.
Les versions de ChatterBot ≤ 1.2.10 sont vulnérables à une condition de déni de service causée par une gestion inappropriée des sessions et du pool de connexions de la base de données.
Les invocations simultanées de :
get_response()
peuvent épuiser le QueuePool sous-jacent de SQLAlchemy, entraînant :
sqlalchemy.exc.TimeoutError<= 1.2.10
>= 1.2.11
ChatterBot s'appuie sur SQLAlchemy pour l'interaction avec la base de données et utilise une configuration de pool de connexions par défaut.
Cependant :
Lorsque plusieurs threads invoquent get_response() simultanément :
TimeoutErrorCela entraîne un déni de disponibilité à l'échelle du service.
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()
La vidéo suivante démontre :
S'il est déployé comme :
Un attaquant peut déclencher la condition à distance sans authentification.
| Métrique | Valeur |
|---|---|
| Vecteur d'attaque | Réseau |
| Complexité d'attaque | Faible |
| Privilèges requis | Aucun |
| Interaction utilisateur | Aucune |
| Confidentialité | Aucune |
| Intégrité | Aucune |
| Disponibilité | Élevée |
| Date | Événement |
|---|---|
| 9 janv. | Vulnérabilité signalée |
| 13 janv. | Le mainteneur a reproduit le problème |
| 17 janv. | Avis publié |
| 19 janv. | CVE-2026-23842 attribuée |
| 21 janv. | Publication publique |
Découverte et divulgation responsable par :
Aditya Bhatt Spécialiste VAPT Rapporteur de la CVE-2026-23842
Cette vulnérabilité a été divulguée de manière responsable au mainteneur avant la publication publique. Aucun exploit n'a été partagé publiquement avant la disponibilité du correctif.