Drubix

Features

Everything you need to stay ahead of Drupal risk

Not a generic scanner with a Drupal label stuck on it. Thirty-two features, each built around how Drupal advisories, modules, and configuration actually work.

01 · Security matching

Every advisory, checked against every site

Drubix polls Drupal.org's security advisory feed continuously and cross-references it against each site's actual installed modules. The PHP libraries a site pulls in through Composer (Symfony, Guzzle, Twig and the rest) are checked too, against the Packagist advisory database. Once the connector module or GitHub is connected, this is a confirmed version match, not a guess based on what's publicly exposed.

$ checking 34 modules against 1,842 advisories

HIGHWebform: SA-CONTRIB-2026-014

Installed: 6.2.1 · Fixed: 6.2.3

→ composer require drupal/webform:^6.2.3

02 · Multi-site dashboard

One view for every site you manage

See every site in one place, sorted by what actually needs attention, not fifty separate admin logins to check one at a time. Each site shows its open findings, last scan time, and whether the connector module is reporting confirmed data.

client-a.example.com2 open
client-b.example.comclear
client-c.example.com1 open

03 · AI-opened fix pull requests

Findings come with the fix, already opened

"Module X is vulnerable" is table stakes. For a confirmed finding, Drubix opens a real pull request against your repo with the exact Composer version bump, already committed on a branch, ready to review and merge. The updated composer.lock is committed on the same branch, so your CI tests exactly what will be installed. The fix itself is never AI-guessed: it's the version the security advisory actually specifies. AI only writes the plain-English explanation in the PR description. When one advisory affects several of your sites, open a PR on every one of them in a single click. With Autopilot on, patch-level fixes are merged for you once CI passes.

HIGHWebform XSS (SA-CONTRIB-2026-014)

-> composer require drupal/webform:^6.2.3

-> PR #42 opened on github.com/you/your-site

04 · Real-time alerts

Hear about it the moment it matters

A weekly PDF nobody reads isn't a monitoring tool. When a new advisory affects a site you manage, Drubix pushes an alert to Slack, Microsoft Teams, Discord, email or a webhook immediately, filtered by the severity threshold you set, so you're not paged for every low-priority finding. Every alert has one-click Acknowledge and Snooze links, and new advisories are matched against your sites within the hour.

#client-alerts · Slack
[HIGH] Webform: cross-site scripting on client-portal.example.com. Fix: composer require drupal/webform:^6.2.3
Microsoft Teams · #ops
[CRITICAL] Drupal core: SA-CORE-2026-003 detected on 3 sites. Acknowledge · Snooze 7 days

05 · White-label reports

Reports your clients actually read

Every month, each client gets a report from you, not from us: your logo, colour and name, with replies coming to your inbox. A short email plus a branded PDF show what was checked, what was fixed, what's still open, the health score trend and uptime. Pick the send day, add a personal note, or send one now.

Site Health Report

client-portal.example.com
[HIGH] Webform: SA-CONTRIB-2026-014
Suggested fix: composer require drupal/webform:^6.2.3

06 · Historical trends

See if a site is getting better or worse

A point-in-time scan tells you today's status. Drubix records a daily snapshot of open findings by severity, so you can show a client (or yourself) whether a site's health is actually improving over time, not just what it looks like right now.

Open findings, last 30 days↓ trending down

07 · Cross-site benchmarking

Context a single site's history can't give you

Once enough sites are being monitored, see how any given site's security posture ranks against every other Drupal site on the platform. Not just whether it's improved since last month, but how it compares more broadly. Requires a minimum sample size before showing a number, rather than a misleading percentile from a handful of sites.

Top 12%

of monitored Drupal sites for open critical findings

08 · Config drift detection

Catch changes that never got exported to code

Config changed directly on a live site but never exported to your repository is a classic source of "it worked on staging" surprises. The connector module compares active configuration against the last exported config and flags exactly which objects have drifted.

core.extension.yml
- webform_ui: 0
+ webform_ui: 8000
system.site.yml
- page.front: /node
+ page.front: /home

09 · CI/CD integration

Stop a vulnerability before it ships

Gate a deploy pipeline on open findings. Fail the build automatically if a known vulnerability is present, before it ever reaches production. Drops straight into GitHub Actions or any CI system that can run a script.

# .github/workflows/monitor-gate.yml

Fetched 1 open finding(s) for site.

[high] Webform: SA-CONTRIB-2026-014

Build gate FAILED: severity ≥ high found.

10 · Attack surface scanning

Catch what should never be public

Checks for a publicly reachable .git/ directory, .env file, or database backup left in the webroot, and audits standard security headers (HSTS, CSP, X-Frame-Options). No connector needed; this runs on every passive scan.

CRITICALPublicly exposed: /.git/config

A readable .git directory can expose your entire commit history.

MODERATEMissing security header: content-security-policy

11 · Permissions, settings & admin audit

The misconfiguration behind most real Drupal breaches

Flags the anonymous or authenticated role holding a permission dangerous enough to hand over site control, such as "administer permissions" or "execute PHP code", plus writable settings.php and a missing files .htaccess. It also reviews the settings attackers look for (trusted host patterns, PHP errors shown to visitors, Twig debug on production, development modules left enabled, risky upload extensions, unsafe text formats) and audits administrator accounts: new admins, dormant ones, a user literally called "admin", and admins without two-factor login. No generic scanner can check this; it requires understanding Drupal's role model specifically.

CRITICAL: anonymous role
"administer permissions" granted
MODERATE: hardening
settings.php is writable
sites/default/files/.htaccess missing
HIGH: admin accounts
new administrator "j.doe" added 2 days ago

12 · Unmaintained module flagging

Risk before there's a CVE to match against

Most contrib modules aren't covered by Drupal.org's security advisory policy at all. Drubix flags known-unmaintained or inherently risky modules, like the deprecated PHP filter, proactively, rather than only reacting once an advisory eventually gets published.

php (PHP filter module)unmaintained
webformactively maintained

13 · Blast-radius incidents

One advisory, fifteen sites, one incident

When an advisory hits many sites in your portfolio at once, Drubix groups it into a single incident instead of forcing you to click through fifteen separate findings one at a time. Only possible because the platform is multi-site-aware. No single-site tool can do this by definition.

SA-CORE-2026-003 2 sites affected
client-portal.example.comcritical
donor-portal.example.comcritical

14 · Mean time to patch

A number you can put in a client report

Computed automatically from data Drubix already has: the average days between a finding being detected and resolved. "We patch in an average of 3.2 days" is a concrete, retainer-justifying claim, not a vague promise.

3.2 days

average time to patch, last 90 days

15 · Known-exploited prioritization

Fix what's actually being attacked

Cross-references matched advisories against CISA's Known Exploited Vulnerabilities catalog, reordering "fix this first" by real-world attacker activity, not just a severity label. A moderate finding that's actively being exploited jumps ahead of a critical one that isn't.

HIGHWebform: SA-CONTRIB-2026-014

⚠ Known exploited in the wild. Prioritize this

16 · AI agent activity correlation

Built for the fact that your CMS can now change itself

Drupal's own AI agents can now create fields, content types, and other configuration from natural-language instructions, with no developer in the loop. Drubix correlates that activity against real configuration drift and permission checks, so you find out when an autonomous change is worth a second look, not just when someone reviews it by chance. Every finding says plainly when it's a correlation, not proof. It flags what's worth checking, it doesn't claim certainty it doesn't have.

AIAgent activity + permission grant

-> "administer permissions" granted to anonymous. Review /admin/reports/dblog

17 · Plain-English report summaries

A summary your client will actually read

Every PDF report opens with a short, accurate paragraph: real severity counts, the actual most urgent issue, written in plain language for a non-technical client. The facts are always real and already computed; AI only handles the sentence, never the judgment.

"This report found 9 open findings (2 critical, 3 moderate...). The most urgent issue is: publicly exposed /.git/config."

18 · Upgrade planner

Drupal 10 ends on 9 December 2026. Is every site ready?

For each site, Drubix shows whether its core version and PHP version still get security fixes, and checks every contrib module against drupal.org for the next major version: ready, update to a specific release, pre-release only, or blocking. You get an ordered upgrade plan per site instead of a spreadsheet of guesses.

EOLDrupal 10.4 · security support ends 9 Dec 2026

PHP 8.1 → Drupal 11 needs PHP 8.3+

31 of 34 modules ready for Drupal 11

→ update pathauto to 8.x-1.13

19 · Uptime, SSL & domain monitoring

Down, expiring or misconfigured: you hear first

Every monitored site is checked every 5 minutes. A site counts as down after two failed checks in a row, so one blip doesn't page anyone, and you get a “back up” alert with the outage length. Daily checks warn you before an SSL certificate or a domain registration expires, and flag broken certificate chains. Everything goes through the same alert channels as security findings.

client-a.example.comUp · 212 ms · 99.98%
client-b.example.comSSL · 6 days left
client-c.example.comDown for 4 min

20 · Client health page

A live link your client can check any time

Give each client a read-only page in your branding: health score, open items by severity, a 90-day trend, what was fixed recently and uptime. No login, never indexed by search engines, and open-issue details stay hidden unless you choose to show them. Replace or turn off the link whenever you like.

Site health · 92 / 100

client-portal.example.com · Healthy
0 critical · 0 high · 1 moderate
Recently fixed: Drupal core access bypass

21 · Team workflow

Triage fifty sites without the noise

Acknowledge, snooze, accept a risk with a written reason, or assign an issue to a teammate, who gets an email with the fix. Snoozed and accepted issues drop out of digests and escalations; everything is kept in a per-issue history. Actively exploited vulnerabilities can't be snoozed. Every alert has one-click Acknowledge and Snooze links, so triage happens straight from Slack or email.

Webform RCEAssigned: priya
Missing CSP headerSnoozed until 14 Oct
Devel enabled on stagingAccepted risk

22 · Daily digest & escalation

One morning email. Escalation if nothing moves.

Each morning, in your timezone: new critical and high issues, criticals still open and what was fixed. It's skipped on quiet days and replaced by a short all-clear on Mondays. If a critical issue stays unpatched for the number of days you choose, it escalates to the account owner and anyone else you add. On the 1st of each month you get a summary of everything Drubix caught, fixed and prevented.

Daily digest · Thursday 24 September

NEW1 critical · 2 high

Fixed since yesterday: 3

Overdue: Webform RCE (4 days open)

23 · Exact versions from composer.lock

Confirmed findings without installing anything

Connect the site's GitHub repository and Drubix reads composer.lock on every scan, so every finding is a confirmed version match even without the connector module. Advisory data comes straight from packages.drupal.org with exact affected-version ranges, and the suggested fix is the right release for the branch each site is on.

$ reading composer.lock · 64 Drupal packages

webform 6.2.5 · affected: <6.2.12 || >=6.3.0 <6.3.1

→ composer require drupal/webform:^6.2.12

24 · Bulk import & bulk fixes

Your whole portfolio in minutes

Import sites from a CSV, a Pantheon account or an Acquia Cloud account, including each client's report recipients, with a preview before anything is added. When one advisory hits fifteen of your sites, open fifteen fix pull requests with one click, each with the right version for that site.

Import from Pantheon23 sites ready
SA-CONTRIB-2026-175 · 15 sitesOpen 15 PRs
PR #88 · client-f.example.comopened

25 · Autopilot

Patch-level security updates, merged once your CI passes

Turn it on per site and Drubix handles the routine patches end to end. It opens the fix PR, updates composer.lock, waits for your CI, and merges only the exact commit your tests passed. It only takes patch-level updates like 10.3.5 to 10.3.6. Anything bigger, or anything that looks wrong (a failing test, a Composer conflict, a declined approval), stops it, leaves a comment on the PR and alerts you. If you'd rather the client signs off first, they get an approve or decline link sent in your agency's name. Drubix never deploys: your release process stays in charge.

HIGHWebform: access bypass · 6.2.7 to 6.2.9

PR #42 opened · composer.lock updated

CI passed · client approved

-> Merged by Autopilot. Deploy as usual.

26 · Before & after screenshots

See the update worked before anyone merges it

Point Drubix at your PR previews or staging site and, once CI passes, it screenshots the homepage and key pages like login, checkout and contact on both the live site and the preview. Error pages are caught straight away, and pages that look very different are held for a human to check. The screenshots sit next to the PR, and go to the client with the approval request, so everyone can trust a patch enough to merge it quickly.

/ (homepage)no visible change
/user/login2% changed
/contactHTTP 500 on preview

27 · Temporary firewall rules

Can't update today? Block it at the edge

Code freeze, client sign-off, a big upgrade in progress: sometimes the patch has to wait. For a vulnerable contrib module, Drubix reads the module's routes from the exact release the site runs and gives you a rule that blocks its public URLs, ready to paste into Cloudflare, Nginx or Apache. Admin pages and ordinary Drupal pages are never touched. It's a stopgap until the update ships, and the docs say plainly what it does and doesn't cover.

# Nginx · webform 6.2.7 (temporary)
location ~* "^(/[a-z]{2})?/(webform/[^/]+)(/|$)" {
return 403;
}

28 · Custom code scanning

Advisories cover contrib. Your own code needs checking too.

Most agency sites carry custom modules and themes that no security advisory will ever cover. Drubix scans them in the connected repository for the mistakes that cause real Drupal breaches: SQL built by joining strings, user input printed as markup, unserialize() on request data, shell commands, eval(), Twig's |raw filter, routes open to anyone, and more. Contrib, core and vendor code are skipped, and a comment silences a line you've reviewed.

HIGHSQL built from user input

modules/custom/client_search/src/SearchController.php:48

-> Use placeholders: $db->query("... WHERE id = :id", [':id' => $id])

29 · Secrets in the repository

The password that got committed by accident

Database passwords in settings.php, API keys in a .env file, private keys, cloud and payment credentials, even database dumps: Drubix checks the site's repository for them every day and tells you which file and line. It never stores the secret itself, only its location and the first few characters, so you can find it and rotate it.

CRITICALDatabase password in the repository

web/sites/default/settings.php:812 · "Real…0!" (13 characters)

-> Move it to an environment variable and change the password

30 · File integrity monitoring

Know when core or a module no longer matches the official release

Once a day the connector compares every core and contrib code file on the server with the official Drupal.org release it claims to be. You hear about modified files, files that shouldn't be there at all, and, most urgently, PHP files sitting in the public files folder, where a web shell usually hides after a break-in. Patches you applied on purpose are easy to tell apart from tampering.

CRITICAL: PHP in the files folder
sites/default/files/2026-09/cache.php
HIGH: not in the official release
core/modules/system/src/helper.inc
MODERATE: modified
modules/contrib/webform/webform.module

31 · Page tampering monitor

What your visitors' browsers actually load

Every day Drubix opens the homepage and key pages (login, checkout, contact) in a real browser and records every script, frame and form destination. A new third-party script, a form that suddenly posts somewhere else, a card skimmer, a crypto-miner, hidden spam links, or a redirect that only fires for visitors arriving from Google: each one raises an alert. Accept a new source your team added and it won't alert again.

CRITICALPossible card-skimming script on /checkout

HIGHNew third-party script source: cdn-stats.example.net

HIGHVisitors from Google are redirected away

32 · Email & DNS security

Stop someone sending email as your client

Daily checks of each site's domain for missing or weak SPF, DKIM and DMARC records, so nobody can send convincing phishing in your client's name. Drubix also looks up the domain's subdomains in public certificate logs and flags ones still pointing at a deleted service (an old Heroku app, a removed S3 bucket, a closed Azure site), the dangling records attackers take over to host content on your client's domain.

DMARC policyp=none (monitoring only)
SPF and DKIMvalid
old-campaign.client.comcan be taken over

Ready to see it on your own sites?

Start with a free scan. No credit card, no commitment.