
Auditor de segurança de sonda ativa sem chave para Directus CMS. Comprova exposição de dados de função pública, enumeração de usuários, vazamentos de versão/esquema não autenticados, introspecção GraphQL e enumeração de campos de parâmetros de busca por meio de sondas anônimas ao vivo. Zero dependências.
Audite qualquer instância Directus em busca das configurações incorretas que realmente vazam dados — exposição de leitura por papel público, enumeração de usuários, vazamentos não autenticados de versão/esquema, introspecção GraphQL e o oráculo de enumeração de campos do parâmetro
search— e comprove cada um ao vivo com uma sonda anônima. Outras listas de verificação dizem o que pode estar errado; esta busca os bytes e mostra o que está.
⚡ Execute em uma única linha, sem token de admin, sem instalação:
npx directus-security --url https://your-directus.example.com
🤝 Quer que eu faça isso por você? Auditoria de escopo fixo — US$ 99 / 24h: eu verifico cada achado ao vivo e envio um relatório escrito com as correções exatas de política.
$ npx directus-security --url https://directus.example.com
1 critical, 2 high, 1 medium — 4 CONFIRMED via anonymous probe
CRITICAL /items/posts public-role read enabled — rows reachable anonymously
HIGH /items/posts?search=… search-param field enumeration (CVE-2025-30352 class)
HIGH /items/directus_users user list exposed (name + email)
MEDIUM /server/specs/oas Directus version leaked unauthenticated (CVE-2025-53887 class)
A Directus alimenta backends headless na Tripadvisor, Adobe e Mercedes, e o modelo de acesso padrão torna um erro muito fácil de cometer: deixar a permissão read habilitada para a política Public. O resultado é uma API que qualquer pessoa pode ler. Em 2025, surgiu um conjunto de CVEs não autenticados que mapeiam exatamente para sondas anônimas:
search enumera campos não permitidos, vazando e-mails e hashes de senha um caractere por vez./server/specs/oas, permitindo que atacantes associem sua build a exploits conhecidos.directus-security verifica tudo isso e confirma os casos reais emitindo a requisição anônima exata que um atacante faria — assim você prioriza fatos, não suposições.
# Probe a live instance (guesses common collection names)
npx directus-security --url https://directus.example.com
# Probe specific collections
npx directus-security --url https://directus.example.com --collections posts,authors
# Learn your exact collection names from a Directus schema snapshot, then probe
npx directus-security --url https://directus.example.com --snapshot ./snapshot.json
# Write a shareable HTML report
npx directus-security --url https://directus.example.com --html report.html
# Static only (no requests sent)
npx directus-security --url https://directus.example.com --no-probe
A saída é JSON em stdout (canalize para CI) e um resumo de uma linha em stderr. O código de saída só é diferente de zero em erros de uso — condicione seu pipeline ao summary do JSON.
npm i -g directus-security
directus-security --url https://directus.example.com
Zero dependências. Seus dados e credenciais nunca saem da sua máquina — cada requisição vai direto da ferramenta para sua instância Directus.
Mesma filosofia de sonda ativa para o restante da stack de backend, tudo sob licença MIT:
strapi-security · supabase-security · pocketbase-security · firebase-security · appwrite-security · nhost-security
MIT © Renzo Madueno
📚 Parte de Awesome Backend Security Auditors — a coleção completa de auditores de sonda ativa sem chave.
| Verificação | Severidade | Como é confirmada |
|---|
| Leitura por papel público em uma coleção | crítica | GET /items/{collection} anônimo retorna linhas |
Enumeração de campos pelo parâmetro search | alta | GET /items/{collection}?search=… anônimo responde (classe CVE-2025-30352) |
Enumeração de usuários em /items/directus_users | alta | leitura anônima retorna a lista de usuários (nome + e-mail) |
| Vazamento não autenticado de versão/esquema | média | /server/info ou /server/specs/oas retorna a versão sem autenticação (classe CVE-2025-53887) |
| Introspecção GraphQL em produção | média | consulta __schema respondida em /graphql ou /graphql/system |