
Бесключевой активный аудитор безопасности для Directus CMS. Доказывает раскрытие данных публичных ролей, перечисление пользователей, неавторизованные утечки версий/схем, интроспекцию GraphQL и перечисление полей через параметры поиска с помощью живых анонимных зондов. Ноль зависимостей.
Аудит любого экземпляра Directus на предмет неверных конфигураций, которые на самом деле приводят к утечке данных — чтение через публичную роль, перечисление пользователей, неаутентифицированная утечка версии/схемы, интроспекция GraphQL и оракул перечисления полей через параметр
search— и доказательство каждой уязвимости с помощью анонимного запроса. Другие чеклисты говорят, что может быть не так; этот загружает байты и показывает, что есть.
⚡ Запуск одной строкой, без токена администратора, без установки:
npx directus-security --url https://your-directus.example.com
🤝 Хотите, чтобы это сделали за вас? Фиксированный аудит — $99 / 24ч: я проверяю каждую находку вживую и отправляю письменный отчёт с точными исправлениями политик.
$ 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 используется как headless-бэкенд в Tripadvisor, Adobe и Mercedes, и модель доступа по умолчанию делает одну ошибку очень лёгкой: включение чтения для публичной политики. В результате API может читать кто угодно. В 2025 году появился кластер неаутентифицированных CVE, которые точно соответствуют анонимным зондам:
search перечисляет неразрешённые поля, утекая email'ы и хэши паролей по одному символу./server/specs/oas, позволяя злоумышленникам сопоставить вашу сборку с известными эксплойтами.directus-security проверяет их и подтверждает реальные, отправляя точный анонимный запрос, который отправил бы злоумышленник — так вы разбираетесь с фактами, а не с предположениями.
# Проверка работающего экземпляра (угадывает распространённые имена коллекций)
npx directus-security --url https://directus.example.com
# Проверка определённых коллекций
npx directus-security --url https://directus.example.com --collections posts,authors
# Узнать точные имена коллекций из снимка схемы Directus, затем проверить
npx directus-security --url https://directus.example.com --snapshot ./snapshot.json
# Создать HTML-отчёт для передачи
npx directus-security --url https://directus.example.com --html report.html
# Только статический анализ (без отправки запросов)
npx directus-security --url https://directus.example.com --no-probe
Вывод — JSON в stdout (можно передавать в CI) и однострочное резюме в stderr.
Ненулевой код возврата только при ошибках использования — привязывайте пайплайн к полю summary в JSON.
npm i -g directus-security
directus-security --url https://directus.example.com
Ноль зависимостей. Ваши данные и учётные данные никогда не покидают вашу машину — каждый запрос идёт напрямую от инструмента к вашему экземпляру Directus.
Та же философия активного зонда для остальной части бэкенд-стека, все под лицензией MIT:
strapi-security · supabase-security · pocketbase-security · firebase-security · appwrite-security · nhost-security
MIT © Renzo Madueno
📚 Часть Awesome Backend Security Auditors — полная коллекция аудиторов с активными зондами без ключей.
| Проверка | Серьёзность | Как подтверждается |
|---|
| Чтение публичной роли в коллекции | критическая | анонимный GET /items/{collection} возвращает строки |
Перечисление полей через параметр search | высокая | анонимный GET /items/{collection}?search=… даёт ответ (CVE-2025-30352 class) |
Перечисление пользователей через /items/directus_users | высокая | анонимное чтение возвращает список пользователей (имя + email) |
| Неаутентифицированная утечка версии/схемы | средняя | /server/info или /server/specs/oas возвращает версию без аутентификации (CVE-2025-53887 class) |
| Интроспекция GraphQL в продакшене | средняя | запрос __schema отвечает на /graphql или /graphql/system |