Security & Monitoring11 min read

Exposed backoffice on VPS: the overlooked attack surfaces

Authentik, Flowise, Mautic, Airflow — four tools running on thousands of self-hosted VPS instances. In August 2026, four CVEs target them. All require an authenticated user: but the login panel itself is an attack surface the moment it is reachable without network restriction. This guide details the five exposure patterns, the typical exploitation chain, and the three protection layers to put in place before exposing any backoffice to the Internet.

The common pattern: a public interface, a post-auth CVE

The typical reaction to a "post-auth" security patch is to conclude that unauthenticated users are protected. That is correct — and insufficient. What these CVEs reveal is that the login interface itself is a permanent attack surface: anyone able to reach the login page can attempt brute force, exploit a session leak, or passively monitor HTTP headers to fingerprint the software version.

On a typical self-hosted VPS, the backoffice is exposed on port 443 of a dedicated public IPv4, with no intermediate network layer. Application authentication manages access, but it does not reduce the attack surface — it filters it after the fact. Four CVEs published in August 2026 illustrate this gap between the perceived and actual exposure.

What these four CVEs have in common

  • Post-auth vector — all require a valid account, creating the illusion that application authentication provides sufficient protection
  • Backoffice accessible from the Internet — no network restriction upstream of the login panel
  • Unscoped secondary endpoint — SCIM, internal API, AJAX endpoint: routes that are active by default, that the administrator does not intentionally expose
  • Privilege escalation or code execution — impact goes beyond data leakage to full server takeover
  • No visible anomaly — these vulnerabilities are exploited without generating application errors, so they do not trigger standard alerts

CVE-2026-72537 — Authentik: account takeover via SCIM

Authentik up to version 2026.5.6 has a flaw in its SCIM ingestion function. An attacker with a limited-scope SCIM provisioning token can provision a SCIM user whose username matches an existing local account, including a superuser, without validating scope boundaries.

The concrete impact: overwriting or deleting administrator account credentials, with full privilege escalation. What makes this vector particularly dangerous on a VPS: the SCIM endpoint is active as soon as a SCIM source is configured, and it responds on the same domain as the admin interface. Without IP or network restriction upstream, any HTTP client can query it with a compromised token.

CVSS: 8.8 (HIGH). Update to a patched version.

CVE-2026-69251 — Flowise: TypeORM injection and code execution

Before version 3.1.3, Flowise allowed authenticated users to set arbitrary TypeORM options via the additionalConfig field in memory and agent nodes. TypeORM options entities, subscribers, and migrations can load local JavaScript files — allowing an attacker with interface access to upload a JavaScript payload and reference it from additionalConfig.entities to execute arbitrary code server-side.

The actual surface is the node configuration interface, accessible to any authenticated user. On a VPS deployment exposed without an authentication proxy, one compromised account is enough to turn Flowise into a remote execution vector.

CVSS: 9.0 (CRITICAL). Update to 3.1.3 or later.

CVE-2026-71245 — Mautic: SQL injection via field name

The getLeadIdsByFieldValueAction function in Mautic's AJAX controller reads a field parameter from the HTTP request. Doctrine cannot parameterize column identifiers, and the sanitizer in place does not block spaces, parentheses, or other SQL-relevant characters: an authenticated attacker can inject SQL via the field name itself.

What distinguishes this vector from classic SQL injections: the action requires only a valid session, with no additional permission check. On an exposed Mautic deployment, any low-privilege account — including a forgotten test or demo account — is sufficient to trigger exploitation.

CVSS: 7.1 (HIGH). Apply the Mautic patch released in August 2026.

CVE-2026-58076 — Apache Airflow: DAG deserialization and RCE

Apache Airflow from 3.0.0 to 3.3.0 reconstructs serialized exception nodes by dynamically importing a class name extracted from the serialized blob, with no useful restriction on what can be imported. An operator's executor_config can reach this path, allowing a DAG author to force an arbitrary callable to load and execute.

The scheduler triggers this code during normal reconstruction of serialized DAGs. The API server hits it on authenticated reads such as a DAG detail request. On an Airflow instance exposed without an authentication proxy, a compromised DAG author account — or a malicious imported DAG — leads to server-side code execution.

CVSS: HIGH. Update to 3.3.1, which limits the imported class to subclasses of BaseException.

The five exposure surfaces to know

These four CVEs illustrate five distinct patterns found in the majority of self-hosted tools exposed on VPS.

The five typical attack surfaces

  • Exposed management plane — the admin interface responds on a public IPv4 without IP restriction or upstream network filtering: any entity on the Internet can attempt authentication
  • Unscoped secondary endpoint — SCIM, inbound webhooks, internal API: routes active by default, outside the visible application flow, that IP restrictions on the main backoffice may not cover
  • Insufficient sandboxing — advanced configuration options (TypeORM additionalConfig, dynamic environment variables) allow escaping the application sandbox from the interface itself
  • Unconstrained deserialization — rebuilding objects from persisted data (serialized DAGs, queue messages) without validating the expected type opens an arbitrary execution path
  • SSRF via secondary component — a connector or integration node can be hijacked to make internal requests from the VPS, bypassing client-side network restrictions

The typical exploitation chain

Most exploitations of these surfaces follow a three-phase sequence, easily reproducible on an exposed VPS without network protection.

First phase: passive reconnaissance. The attacker identifies the technology and version via HTTP headers, login page HTML, or health/version endpoints that are often active without authentication. No authentication attempt is needed at this stage.

Second phase: initial access. Brute force against a low-privilege account, credential reuse from a third-party breach, or exploitation of an integration token configured with excessive rights. This phase directly benefits from the public exposure of the login panel.

Third phase: post-auth exploitation. Once a valid account is obtained, the applicable CVE is exploited to escalate privileges, execute code, or exfiltrate data. The outcome varies by tool: full superadmin account takeover (Authentik), server-side code execution (Flowise, Airflow), or arbitrary database read (Mautic).

Checklist before exposing a backoffice to the Internet

01

Audit active endpoints by default

Before any exposure, list all active routes: SCIM endpoints, internal API, webhooks, health checks. These routes are rarely documented in installation guides, but they are accessible as soon as the service is reachable. For each endpoint, determine whether it must be publicly accessible or can be restricted to an internal network or IP allowlist.

02

Restrict network access upstream

Configure the VPS firewall (ufw, iptables) to limit access to administration ports to a trusted IP list, or via VPN. If public exposure is required, position an authentication proxy (Authentik, Authelia) upstream of the service, before any request reaches the application.

03

Enforce HTTPS on all entry points

Verify that all endpoints — including secondary API routes and webhooks — are served over HTTPS only. An active HTTP endpoint on an exposed backoffice can transmit tokens or sessions in cleartext, even if the main interface is secured.

04

Disable unused endpoints

Each tool offers optional features that activate additional endpoints: SCIM in Authentik, advanced integration nodes in Flowise, external API in Mautic. If a feature is not used, disable the corresponding endpoint in the configuration, or block access at the network level.

05

Apply updates within 72 hours of a CVE

For self-hosted tools exposed on the Internet, exploitation of a published CVE often follows the publication of technical details within days to hours. Set up a rapid update process: subscribe to project security feeds (GitHub Security Advisories, mailing lists), test in an isolated environment, deploy within 72 hours for HIGH and CRITICAL vulnerabilities.

Level 1 — Network protection: reduce the visible surface

Network protection is the first line of defense and the only one that is independent of the application itself. It consists of limiting who can physically reach the service, before any application logic.

On a VPS, available tools are the system firewall (ufw allow from <IP> to any port 443), provider security groups, and an access VPN such as WireGuard or Headscale. This layer reduces the attack surface even for future unpublished CVEs: an attacker who cannot reach the login page cannot exploit a post-auth vulnerability.

For services that must remain accessible to distributed teams, a zero-trust access VPN or a fixed egress IP list (corporate proxies) is a better alternative to direct public exposure.

Level 2 — Authentication proxy: a layer independent of the app

A network authentication proxy such as Authentik or Authelia sits between the Internet and the protected service. Every request must pass through a valid proxy-level session before reaching the application. This layer is independent of application authentication: even if the application has a post-auth vulnerability, the attacker must first bypass the proxy layer.

The concrete mechanism is forward auth: the reverse proxy (nginx, Caddy, Traefik) queries the authentication proxy on each request. If the session is invalid, the request is redirected to the proxy login page, without the protected application ever being contacted. Secondary API endpoints (SCIM, webhooks) benefit from the same protection, since filtering occurs at the reverse proxy level, before routing to the service.

This architecture is compatible with the typical Docker deployment on VPS: the internal Docker network carries communication between the authentication proxy, reverse proxy, and protected services. Only the reverse proxy is exposed on port 443.

Authentik as an upstream authentication proxy

Authentik can play two distinct roles on a VPS: identity provider (SSO) for your own applications, and network authentication proxy in front of third-party services. Deployed upstream of Flowise, Mautic, or Airflow, it intercepts all incoming requests and subjects them to its authentication flow — MFA, IP restrictions, session policies — before forwarding them to the protected service. This is a defensive layer that remains effective even when the application itself has a post-auth CVE.

Level 3 — Monitoring: detect what passed the first two layers

The first two layers reduce the attack surface; they do not eliminate it. Monitoring completes the defense-in-depth strategy: it allows detection of an ongoing exploitation or a compromised account before the impact spreads.

For a self-hosted VPS, signals to watch for include: burst authentication failures on the authentication proxy (brute force indicator), accesses to unusual secondary endpoints (SCIM, internal API) from new IPs, administrator account creation or modification, and unusual child processes spawned by the service (code execution indicator).

These signals are collectable with tools already available in the self-hosted ecosystem: application logs centralized in Loki or Graylog, system metrics with Prometheus and Alertmanager, and a tool like Crowdsec that analyzes logs in real time and can automatically block suspicious IPs. The goal is not exhaustive surveillance, but anomaly detection on the most exposed surfaces.

Three exposure architectures: attack surface comparison

ArchitectureExposed surfaceImpact of a post-auth CVE
Direct backoffice (public port 443)Login panel + all active endpointsDirect exploitation if any account is compromised
Reverse proxy only (nginx/Caddy)Login panel filtered by HTTPS, endpoints routedIdentical: routing does not filter access
Auth proxy upstream (Authentik/Authelia)Only the auth proxy login pageAttacker must bypass two independent authentication layers

Applying these principles: where to start

The priority depends on your current deployment state. If services are today exposed directly on the Internet without network restriction, the first action is to enable the system firewall and restrict access to administration ports to your trusted IPs — this takes less than ten minutes and immediately reduces the attack surface, regardless of any CVE.

The second step is deploying an authentication proxy. Authentik installs via Docker Compose and can be configured for forward auth with nginx in a few hours. Once in place, it protects all services behind it, including those whose vulnerabilities are not yet known.

Finally, monitoring must be planned from the start of deployment, not after an incident. Centralized application logs and an alert rule on burst authentication failures are a minimal baseline that requires no complex tooling. These four August 2026 CVEs share a common pattern: their impact would have been far more limited if the login panel itself had not been accessible without restriction from the Internet.

Deploy Authentik upstream of your backoffices

Authentik installs on your VPS in minutes and sits between the Internet and your self-hosted services. A network authentication layer independent of your applications, effective even against post-auth vulnerabilities.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.