
Detectar si una instancia de Strapi es vulnerable a CVE-2026-27886 (exfiltración de secretos de administrador mediante oráculo booleano no autenticado).
Detecte de forma segura si una instancia de Strapi es vulnerable a CVE-2026-27886 sin realizar la cadena completa de apropiación de cuentas. Consulte el artículo completo en el blog de Bishop Fox.
CVE-2026-27886 es un bypass de desinfección de parámetros no autenticado en Strapi versiones 4.0.0 a 5.36.1 que permite a atacantes remotos no autenticados filtrar secretos de administrador a través de la API de Contenido pública. El desinfector de consultas del framework en @strapi/utils procesa solo las claves de consulta documentadas filters, sort, fields y populate, y preserva silenciosamente cualquier otra clave de nivel superior en la solicitud. Las claves desconocidas luego se reenvían a través de transformQueryParams y llegan a strapi.db.query(...) como la cláusula SQL WHERE. Al probar where[updatedBy][resetPasswordToken][$startsWith]=<prefix> contra cualquier colección pública de la API de Contenido, un atacante puede filtrar secretos de administrador un carácter a la vez a través del campo meta.pagination.total de la respuesta.
Esta herramienta realiza pruebas de vulnerabilidad no destructivas mediante:
GET /api/<collection> de referenciaGET con ?where[id][$lt]=-1 agregadometa.pagination.total para determinar si la cláusula where llegó a la capa de base de datosEl predicado where[id][$lt]=-1 no puede coincidir con ninguna fila real, por lo que cuando la cláusula se respeta en la capa de base de datos, la respuesta se reduce a cero filas. Cuando el parche está aplicado, la clave where desconocida es eliminada por la lista blanca del desinfector antes de que se construya la consulta y la respuesta es idéntica a la de referencia. La sonda nunca toca columnas privadas de administrador y nunca modifica ningún dato.
where fue respetada en la capa de base de datos.sanitizeQuery elimina cualquier clave de nivel superior no reconocida antes de que lleguen a la base de datos.INCONCLUSIVE.En un servidor vulnerable, la herramienta enumera la dirección de correo electrónico del administrador carácter por carácter mediante where[updatedBy][email][$startsWith]=<prefix>. No encadena a la apropiación de la cuenta de administrador.
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
Sin dependencias externas. El escáner utiliza solo módulos de la biblioteca estándar de Python.
Pruebe un endpoint de colección de la API de Contenido pública de un servidor Strapi. Strapi asigna el pluralName del tipo de contenido a la ruta URL, por lo que el nombre exacto varía según la implementación.
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
La herramienta solo puede detectar la vulnerabilidad si se cumplen las siguientes condiciones:
find en al menos un tipo de contenidoupdated_by_id no NULLSi no se cumple alguna condición, la herramienta reportará un resultado INCONCLUSIVE.
Este código se distribuye bajo una licencia MIT.
El uso de esta herramienta para atacar objetivos sin consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. Los desarrolladores no asumen ninguna responsabilidad y no son responsables por cualquier mal uso o daño causado por este programa.