Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-44338-Lab — Laboratoire basé sur Docker démontrant le contournement d'authentification CVE-2026-44338 dans l'API Flask legacy de PraisonAI. Inclut des services vulnérables et corrigés avec un script PoC pour la recherche en sécurité locale. | Kitploit
Outils/GitHubGitHub/rootdirective-sec/cve-2026-44338-lab
Analyse des VulnérabilitésExploitation d'Applications WebTests d'IntrusionAuthentificationApprentissage et ÉducationLabs et Pratique
GitHubrootdirective-sec/cve-2026-44338-lab

CVE-2026-44338-Lab

Laboratoire basé sur Docker démontrant le contournement d'authentification CVE-2026-44338 dans l'API Flask legacy de PraisonAI. Inclut des services vulnérables et corrigés avec un script PoC pour la recherche en sécurité locale.

Voir le dépôt
1il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-44338 Laboratoire de contournement d'authentification de PraisonAI

Laboratoire Docker local pour CVE-2026-44338, un contournement d'authentification dans l'ancien serveur API Flask de PraisonAI.

Ce laboratoire démontre la condition d'accès non authentifié sur les routes API héritées. Il utilise intentionnellement une reproduction sécurisée au niveau des routes plutôt qu'un déploiement complet de PraisonAI, afin que la preuve reste concentrée sur la faille d'authentification et ne déclenche pas de véritables workflows d'agents ou d'appels LLM externes.

Résumé

CVE-2026-44338 affecte les versions de PraisonAI >= 2.5.6 et <= 4.6.33.

Dans l'ancien serveur API vulnérable, l'authentification était désactivée par défaut. Par conséquent, un appelant non authentifié capable d'atteindre le serveur API pouvait accéder à /agents et déclencher la route de workflow /chat sans jeton porteur.

Le problème a été corrigé dans PraisonAI 4.6.34 en modifiant le comportement par défaut pour exiger une authentification sauf si elle est explicitement désactivée.

Cause Racine

Dans la version vulnérable, l'ancien serveur API utilisait des paramètres d'authentification non sécurisés :

root@kitploit:~
AUTH_ENABLED = False
AUTH_TOKEN = None

def check_auth():
    if not AUTH_ENABLED:
        return True

Comme check_auth() renvoyait True lorsque l'authentification était désactivée, les routes protégées étaient ouvertes en échec.

Les routes affectées incluaient :

  • GET /agents
  • POST /chat

La version corrigée modifie la posture par défaut pour que l'authentification soit activée sauf si elle est explicitement désactivée via la configuration.

Détails de la Correction au Niveau Source

Le problème central n'était pas une primitive d'exploitation complexe. Il provenait de paramètres par défaut non sécurisés dans l'ancien serveur API Flask.

Comportement Vulnérable dans v4.6.33

Dans v4.6.33, l'authentification était désactivée par défaut :

root@kitploit:~
AUTH_ENABLED = False
AUTH_TOKEN = None

La vérification d'authentification échouait alors en mode ouvert :

root@kitploit:~
def check_auth():
    if not AUTH_ENABLED:
        return True

Cela signifie que la requête était acceptée chaque fois que l'authentification était désactivée, même si l'appelant n'envoyait pas d'en-tête Authorization.

Le flux vulnérable était :

root@kitploit:~
AUTH_ENABLED = False
        ↓
check_auth() returns True
        ↓
GET /agents is allowed
POST /chat is allowed
        ↓
unauthenticated caller can access agent metadata and reach the workflow trigger route

La partie sensible est que /chat n'était pas simplement un point de terminaison de statut. Il acceptait un message utilisateur puis appelait l'exécuteur de workflow PraisonAI en utilisant agents.yaml.

Comportement Corrigé dans v4.6.34

Dans v4.6.34, le comportement par défaut a été modifié pour exiger une authentification sauf si l'opérateur la désactive explicitement :

root@kitploit:~
AUTH_ENABLED = os.environ.get("PRAISONAI_API_AUTH", "enabled").strip().lower() != "disabled"
AUTH_TOKEN = os.environ.get("PRAISONAI_API_TOKEN") or None

La version corrigée améliore également le comportement de gestion des jetons :

  • l'authentification est activée par défaut
  • désactiver l'authentification nécessite un choix de configuration explicite
  • si aucun jeton n'est fourni alors que l'authentification est activée, le serveur génère un jeton aléatoire
  • la comparaison des jetons utilise secrets.compare_digest()
  • le serveur API se lie à 127.0.0.1 par défaut au lieu de s'exposer sur toutes les interfaces

Le flux corrigé est :

root@kitploit:~
AUTH_ENABLED = True by default
        ↓
request must include a valid Bearer token
        ↓
missing or invalid token returns 401
        ↓
/agents and /chat are no longer reachable anonymously

Ce laboratoire reflète cette différence au niveau source :

root@kitploit:~
vuln    -> auth disabled by default, unauthenticated requests return 200
patched -> auth required by default, unauthenticated requests return 401

Conception du Laboratoire

Le laboratoire contient deux services locaux :

ServiceURLComportement
vulnhttp://127.0.0.1:8081Reproduit le comportement d'authentification vulnérable en mode ouvert
patchedhttp://127.0.0.1:8082Nécessite une authentification par jeton porteur

Les deux services sont liés à 127.0.0.1 uniquement.

La route /chat utilise un exécuteur factice au lieu d'un véritable workflow PraisonAI. Cela fournit une preuve observable que la requête non authentifiée atteint le chemin de déclenchement du workflow sans provoquer d'effets secondaires externes.

Structure du Dépôt

root@kitploit:~
.
├── docker-compose.yml
├── vuln
│   ├── Dockerfile
│   └── start_server.py
├── patched
│   ├── Dockerfile
│   └── start_server.py
├── poc
│   └── poc.py
└── .gitignore
└── README.md

Exécution

root@kitploit:~
docker compose up --build -d
python3 poc/poc.py

Résultat Attendu

Le service vulnérable autorise l'accès non authentifié :

root@kitploit:~
=== vuln ===
[unauthenticated] GET /agents
status: 200

[unauthenticated] POST /chat
status: 200

verdict: LIKELY_VULNERABLE

Le service corrigé bloque l'accès non authentifié :

root@kitploit:~
=== patched ===
[unauthenticated] GET /agents
status: 401

[unauthenticated] POST /chat
status: 401

verdict: NOT_VULNERABLE_OR_PROTECTED

Résumé final attendu :

root@kitploit:~
vuln:    LIKELY_VULNERABLE
patched: NOT_VULNERABLE_OR_PROTECTED

Vérification Manuelle

Vérifiez la route vulnérable :

root@kitploit:~
curl -i http://127.0.0.1:8081/agents

Réponse vulnérable attendue :

root@kitploit:~
HTTP/1.1 200 OK

Vérifiez la route corrigée :

root@kitploit:~
curl -i http://127.0.0.1:8082/agents

Réponse corrigée attendue :

root@kitploit:~
HTTP/1.1 401 UNAUTHORIZED

Les journaux du serveur devraient montrer clairement la différence :

root@kitploit:~
vuln:    "GET /agents HTTP/1.1" 200
patched: "GET /agents HTTP/1.1" 401

Nettoyage

root@kitploit:~
docker compose down -v

Notes de Sécurité

Ce laboratoire est destiné uniquement à la recherche en sécurité locale.

La preuve de concept ne :

  • exécute pas de commandes shell
  • utilise pas de vraies clés API
  • appelle pas de fournisseurs LLM externes
  • scanne pas de réseaux externes
  • déclenche pas de véritables workflows d'agents PraisonAI

Références

  • Avis GitHub : GHSA-6rmh-7xcm-cpxj https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-6rmh-7xcm-cpxj

  • NVD : CVE-2026-44338 https://nvd.nist.gov/vuln/detail/CVE-2026-44338

  • OSV : GHSA-6rmh-7xcm-cpxj https://osv.dev/vulnerability/GHSA-6rmh-7xcm-cpxj

  • Source vulnérable : PraisonAI v4.6.33 src/praisonai/api_server.py https://raw.githubusercontent.com/MervinPraison/PraisonAI/v4.6.33/src/praisonai/api_server.py

  • Source corrigée : PraisonAI v4.6.34 src/praisonai/api_server.py https://raw.githubusercontent.com/MervinPraison/PraisonAI/v4.6.34/src/praisonai/api_server.py

Télécharger l’outil