Directus Security Scanner — Find public-role collection leaks avatar

Directus Security Scanner — Find public-role collection leaks

Pricing

Pay per usage

Go to Apify Store
Directus Security Scanner — Find public-role collection leaks

Directus Security Scanner — Find public-role collection leaks

Probes a public Directus instance for misconfigured Public-role permissions. Detects collections readable without auth via /items/{collection}. Returns counts + curl reproducer. Counts only. -- By Renzo Madueno, https://rotatepilot.com

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Renzo Madueno

Renzo Madueno

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

Directus ships with a "Public" role enabled by default, and the only thing keeping your collections private is the read permissions assigned to it. Most operators tighten Public on their main content collections but forget the internal ones — directus_users, directus_files, and any custom table created via the admin UI. This actor finds those leaks in 30 seconds.

Probes a public Directus instance for collections readable by the Public role. Sends /items/{collection}?limit=1&meta=total_count per collection. Returns row counts + a verbatim curl reproducer per finding. Counts only — never row data.

💸 Found a leak? I do turnkey Directus audits + Public-role hardening for $99 (Stripe — 48h, money-back if nothing actionable). Or $29/mo weekly auto-scans at rls-monitor.vercel.app.

⭐️ Solo dev competing with bigger Apify publishers. A 30-second review is the single thing that lifts ranking. Thank you.

Why this exists

Directus's REST API exposes every collection at /items/<name>. The Public role's read permission is what decides who can list a collection without authenticating. Most Directus tutorials walk through enabling Public read on a demo collection (e.g., articles) and then forget to mention that the Public role persists across schema changes — so when you add a new collection it inherits no permission, but the patterns established by tutorial code often grant Public access opportunistically.

The biggest landmines:

  1. directus_users — if Public read is on, every internal user's email, role, status, and login token field metadata is listable
  2. directus_files — file metadata + download URLs leak even when individual files require auth
  3. Custom collections cloned from a "public" template — the Public-role read permission carries over silently

This scanner probes ~35 collection names (common business names plus Directus system tables) plus any you pass as hints.

How to run

Either:

  1. Leave inputs empty + click Run for a DEMO sample report
  2. Provide your directusUrl to scan your actual instance
{
"directusUrl": "https://directus.your-domain.com",
"collectionHints": ["my-custom-collection"],
"outputFormat": "both"
}

What you get

  • HTML report in the run's key-value store: severity-coded findings, copy-pasteable curl reproducers, exact Directus admin steps to fix
  • Dataset rows: one structured row per finding

Sample finding

[CRITICAL] directus_users — readable by Public role
Total records: 1,284
Sample columns: id, first_name, last_name, email, password, role, status, token, last_access
Sensitive columns detected: email, password, token
Reproducer:
curl 'https://directus.your-domain.com/items/directus_users?limit=1' -I

How to fix (free, ~5 min)

  1. Open Directus admin → Settings → Access Control
  2. Click the Public role
  3. For each leaky collection, set the read permission to No Access
  4. Click Save on each change
  5. Re-run this scanner to confirm zero anon-readable collections

If a collection should be public (blog content, marketing pages), set read to Custom Access and use field-level rules to hide sensitive columns from anon responses.

Ethical use

  • Only scan instances you own or have explicit permission to scan
  • Probe queries use ?limit=1&meta=total_count to confirm exposure without exfiltrating contents

FAQ

How do I check if my Directus collections are readable by the Public role? Provide your directusUrl (and optionally collectionHints for custom collections) and run the actor — or leave inputs empty for a demo report. In about 30 seconds it probes ~35 collection names, including Directus system tables, and lists every collection the Public role can read, with record counts and a curl reproducer.

Do I need an API key to run this? No. The scanner tests what an unauthenticated visitor can read via /items/<collection>, so it needs only your Directus URL. No admin token, static token, or login is required.

Why use this scanner instead of checking Access Control in the Directus admin manually? The admin panel shows the Public role's permissions, but it's easy to miss that the Public role persists across schema changes and that a custom collection cloned from a public template inherited read access. This actor makes real unauthenticated requests and proves which collections actually leak — honestly, review the panel too, but only the live probe confirms real exposure of system tables like directus_users.

What are the alternatives to this Directus scanner? If you use a different backend, the sister scanners cover it: Supabase, Firebase, Convex, and Appwrite.

What vulnerabilities does it check for? It detects collections readable by the Directus Public role — including high-risk system tables directus_users (emails, password/token field metadata) and directus_files (file metadata and download URLs) — plus custom collections that silently inherited Public read, and flags sensitive columns (email, password, token, etc.).

Is the scan safe and read-only? Yes. It issues only ?limit=1&meta=total_count read probes to confirm exposure and read the record count — it never writes, deletes, or pulls bulk data. It surfaces totals and sample column names, not your records.

Automate it

Public-role permissions persist across schema changes, so a new collection or a cloned template can quietly become readable long after launch. Use Apify's scheduler to re-scan your Directus instance nightly or weekly, then connect the output via Apify integrations — Slack, Make, n8n, Zapier, or a webhook — to alert your team the moment a Public-readable collection appears. Recurring audits turn a one-time check into continuous monitoring.

Built and maintained by Renzo Madueño, founder of Rotate Pilot, aviation exam-prep software. More tools on GitHub.