
Auditeur de sécurité par sondes actives sans clé pour Directus CMS. Démontre l'exposition des données des rôles publics, l'énumération d'utilisateurs, les fuites non authentifiées de version/schéma, l'introspection GraphQL et l'énumération de champs par paramètres de recherche via des sondes anonymes en direct. Zéro dépendance.
Auditez n'importe quelle instance Directus pour les mauvaises configurations qui fuient réellement des données — exposition en lecture du rôle public, énumération d'utilisateurs, fuite non authentifiée de la version/schéma, introspection GraphQL, et l'oracle d'énumération de champs via le paramètre
search— et prouvez chacune d'elles en direct avec une sonde anonyme. Les autres checklists vous disent ce qui pourrait être mal configuré ; celui-ci récupère les octets et vous montre ce qui est.
⚡ Exécutez-le en une ligne, sans jeton admin, sans installation :
npx directus-security --url https://your-directus.example.com
🤝 Vous voulez que ce soit fait pour vous ? Audit à périmètre fixe — 99 $ / 24 h : je vérifie chaque constat en direct et j'envoie un rapport écrit avec les correctifs de politique exacts.
$ 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)
Directus alimente des backends headless chez Tripadvisor, Adobe et Mercedes, et le modèle d'accès par défaut rend une erreur très facile à commettre : laisser la lecture read activée pour la politique Public. Le résultat est une API que n'importe qui peut lire. 2025 a apporté un ensemble de CVE non authentifiées qui correspondent exactement à des sondes anonymes :
search énumère les champs non autorisés, faisant fuiter les e-mails et les hashs de mots de passe un caractère à la fois./server/specs/oas, permettant aux attaquants de faire correspondre votre build à des exploits connus.directus-security vérifie ces éléments et confirme ceux qui sont réels en émettant la
requête anonyme exacte qu'un attaquant utiliserait — vous triez ainsi des faits, pas des peut-être.
# Sonde une instance en direct (devine les noms de collections courants)
npx directus-security --url https://directus.example.com
# Sonde des collections spécifiques
npx directus-security --url https://directus.example.com --collections posts,authors
# Apprenez vos noms de collections exacts depuis un snapshot de schéma Directus, puis sondez
npx directus-security --url https://directus.example.com --snapshot ./snapshot.json
# Écrivez un rapport HTML partageable
npx directus-security --url https://directus.example.com --html report.html
# Statique uniquement (aucune requête envoyée)
npx directus-security --url https://directus.example.com --no-probe
La sortie est en JSON sur stdout (à diriger vers votre CI) et un résumé d'une ligne sur stderr.
Le code de sortie est non nul uniquement en cas d'erreurs d'utilisation — faites passer votre pipeline sur le summary JSON.
npm i -g directus-security
directus-security --url https://directus.example.com
Zéro dépendance. Vos données et identifiants ne quittent jamais votre machine — chaque requête va directement de l'outil vers votre instance Directus.
Même philosophie de sonde active pour le reste de la pile backend, tous sous licence MIT :
strapi-security · supabase-security · pocketbase-security · firebase-security · appwrite-security · nhost-security
MIT © Renzo Madueno
📚 Fait partie d'Awesome Backend Security Auditors — la collection complète d'auditeurs à sonde active sans clé.
| Vérification | Sévérité | Comment c'est confirmé |
|---|
| Lecture du rôle public sur une collection | critique | le GET /items/{collection} anonyme renvoie des lignes |
Énumération de champs via le paramètre search | élevée | le GET /items/{collection}?search=… anonyme répond (classe CVE-2025-30352) |
Énumération d'utilisateurs /items/directus_users | élevée | la lecture anonyme renvoie la liste des utilisateurs (nom + e-mail) |
| Fuite non authentifiée de version/schéma | moyenne | /server/info ou /server/specs/oas renvoie la version sans authentification (classe CVE-2025-53887) |
| Introspection GraphQL en production | moyenne | la requête __schema reçoit une réponse sur /graphql ou /graphql/system |