
Détecter si une instance Strapi est vulnérable à CVE-2026-27886 (exfiltration non authentifiée des secrets d'administrateur par oracle booléen).
Détectez en toute sécurité si une instance Strapi est vulnérable à CVE-2026-27886 sans effectuer l'intégralité de la chaîne de prise de contrôle de compte. Consultez l'article complet sur le blog de Bishop Fox.
CVE-2026-27886 est un contournement non authentifié de l'assainissement des paramètres dans Strapi versions 4.0.0 à 5.36.1 qui permet à des attaquants distants non authentifiés de divulguer les secrets d'administrateur via l'API publique de contenu. Le sanitiseur de requêtes de @strapi/utils traite uniquement les clés de requête documentées filters, sort, fields et populate, et conserve silencieusement toutes les autres clés de premier niveau de la requête. Les clés inconnues sont ensuite transmises via transformQueryParams et atterrissent dans strapi.db.query(...) en tant que clause SQL WHERE. En sondant where[updatedBy][resetPasswordToken][$startsWith]=<prefix> sur n'importe quelle collection publique de l'API Content, un attaquant peut divulguer les secrets d'administrateur un caractère à la fois via le champ meta.pagination.total de la réponse.
Cet outil effectue un test de vulnérabilité non destructif en :
GET /api/<collection>GET avec ?where[id][$lt]=-1 ajoutémeta.pagination.total pour déterminer si la clause where a atteint la couche base de donnéesLe prédicat where[id][$lt]=-1 ne peut correspondre à aucune ligne réelle, donc lorsque la clause est honorée au niveau de la base de données, la réponse se réduit à zéro ligne. Lorsque le correctif est en place, la clé where inconnue est supprimée par la liste blanche du sanitiseur avant la construction de la requête et la réponse est identique à celle de référence. La sonde ne touche jamais aux colonnes privées de l'administration et ne modifie jamais aucune donnée.
where a été honorée au niveau de la base de données.sanitizeQuery supprime toute clé de premier niveau non reconnue avant qu'elle n'atteigne la base de données.INCONCLUSIF.Sur un serveur vulnérable, l'outil énumère ensuite l'adresse e-mail de l'administrateur caractère par caractère via where[updatedBy][email][$startsWith]=<prefix>. Il ne chaîne pas avec la prise de contrôle du compte administrateur.
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
Aucune dépendance externe. Le scanner utilise uniquement les modules de la bibliothèque standard Python.
Testez un point de terminaison de collection de l'API publique d'un serveur Strapi. Strapi mappe le pluralName du type de contenu vers le chemin URL, donc le nom exact varie selon le déploiement.
python3 CVE-2026-27886-check.py <ENDPOINT>
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential confirmed: baseline total=1, where-test total=0 -> VULNERABLE
[+] Enumerating admin email
admin email = [email protected]
[+] Done. To remediate, upgrade to Strapi 5.37.0 or later.
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Target: http://target.example.com/api/articles
[+] Differential check: baseline total=1, where-test total=1 -> NOT VULNERABLE
L'outil ne peut détecter la vulnérabilité que si les conditions suivantes sont remplies :
find sur au moins un type de contenuupdated_by_id non NULLSi une condition n'est pas remplie, l'outil rapportera un résultat INCONCLUSIF.
Ce code est distribué sous une licence MIT.
L'utilisation de cet outil pour attaquer des cibles sans consentement mutuel préalable est illégale. Il est de la responsabilité de l'utilisateur final de respecter toutes les lois locales, étatiques et fédérales applicables. Les développeurs déclinent toute responsabilité et ne sont pas responsables de tout usage abusif ou dommage causé par ce programme.