
Detectar se uma instância do Strapi é vulnerável ao CVE-2026-27886 (exfiltração não autenticada de segredos de administrador por oráculo booleano).
Detecte com segurança se uma instância do Strapi está vulnerável ao CVE-2026-27886 sem realizar toda a cadeia de tomada de conta. Veja o artigo completo no blog da Bishop Fox.
CVE-2026-27886 é uma bypass não autenticada de sanitização de parâmetros no Strapi versões 4.0.0 a 5.36.1 que permite que atacantes remotos e não autenticados vazem segredos de administradores através da API pública de Conteúdo. O sanitizador de consultas do framework em @strapi/utils processa apenas as chaves de consulta documentadas filters, sort, fields e populate, e preserva silenciosamente todas as outras chaves de primeiro nível na requisição. As chaves desconhecidas são então encaminhadas através de transformQueryParams e chegam em strapi.db.query(...) como a cláusula SQL WHERE. Ao testar where[updatedBy][resetPasswordToken][$startsWith]=<prefixo> contra qualquer coleção pública da API de Conteúdo, um atacante pode vazar segredos de administrador um caractere por vez através do campo meta.pagination.total da resposta.
Esta ferramenta realiza testes de vulnerabilidade não destrutivos através de:
GET /api/<colecao> de baseGET com ?where[id][$lt]=-1 anexadometa.pagination.total para determinar se a cláusula where alcançou a camada do banco de dadosO predicado where[id][$lt]=-1 não pode corresponder a nenhuma linha real; portanto, quando a cláusula é respeitada na camada do banco de dados, a resposta colapsa para zero linhas. Quando a correção está em vigor, a chave where desconhecida é descartada pela lista de permissões do sanitizador antes da construção da consulta, e a resposta é idêntica à de base. O teste nunca toca colunas privadas de administrador e nunca modifica dados.
where foi respeitada na camada do banco de dados.sanitizeQuery remove quaisquer chaves de primeiro nível não reconhecidas antes de chegarem ao banco de dados.INCONCLUSIVO.Em um servidor vulnerável, a ferramenta então enumera o endereço de e-mail do administrador caractere por caractere através de where[updatedBy][email][$startsWith]=<prefixo>. Ela não encadeia para tomada de conta de administrador.
git clone https://github.com/BishopFox/CVE-2026-27886-check
cd CVE-2026-27886-check
Nenhuma dependência externa. O scanner utiliza apenas módulos da biblioteca padrão do Python.
Teste um endpoint de coleção da API pública de Conteúdo de um servidor Strapi. O Strapi mapeia o pluralName do tipo de conteúdo para o caminho da URL, portanto o nome exato varia conforme a implantação.
python3 CVE-2026-27886-check.py <ENDPOINT>
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Alvo: http://target.example.com/api/articles
[+] Diferencial confirmado: total base=1, total teste-where=0 -> VULNERÁVEL
[+] Enumerando e-mail do admin
e-mail do admin = [email protected]
[+] Concluído. Para corrigir, atualize para Strapi 5.37.0 ou superior.
$ python3 CVE-2026-27886-check.py http://target.example.com/api/articles
[+] Alvo: http://target.example.com/api/articles
[+] Verificação diferencial: total base=1, total teste-where=1 -> NÃO VULNERÁVEL
A ferramenta só pode detectar a vulnerabilidade se as seguintes condições forem atendidas:
find em pelo menos um tipo de conteúdoupdated_by_id não nuloSe alguma condição não for atendida, a ferramenta reportará um resultado INCONCLUSIVO.
Este código é distribuído sob uma licença MIT.
O uso desta ferramenta para atacar alvos sem consentimento mútuo prévio é ilegal. É de responsabilidade do usuário final obedecer todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem qualquer responsabilidade e não se responsabilizam por qualquer uso indevido ou danos causados por este programa.