Most recent
navigate open esc close Corpus index built 2026-06-07 23:58 UTC

← All research

Survey May 3, 2026

Open WebUI on Public Cloud: Auth Posture Survey

NuClide Research · 2026-05-03


Summary

Reused the 20,581 port-3000 hits from the prior Flowise sweep and re-fingerprinted them for Open WebUI (the popular Ollama / OpenAI-compatible chat frontend) via GET /api/version body match ({"version":"0.x.x"}) plus /api/config for auth-state + branding. 112 confirmed Open WebUI instances across DO/Hetzner/Vultr.

DCWF KSAT coverage

Auto-derived from DCWF AI work-role rule files (ksat-tag).

  • 672 (AI Test & Evaluation Specialist): K7003, K7004, K7044, S7068, S7070, S7075, T5904
  • 733 (AI Risk & Ethics Specialist): K7051, T5868, T5882, T5893, T5904
  • overlap (Common AI KSATs (all 5 roles)): K108, K1158, K1159, K22, K6311, K6935, K7003, K942

In contrast to the vector-DB and inference-server tier, Open WebUI ships auth-on by default and operators have largely left it that way: 111 of 112 instances enforce authentication. This matches the earlier finding for Flowise (43 instances, 0% unauth) and n8n (1006 instances, 0% unauth), orchestration / chat-UI tier is closed-by-default.

The new finding shape is operator-policy misconfiguration rather than auth-disabled: 14 of 112 instances have enable_signup: true at the application layer. Authentication is required, but anyone can register an account from the public internet and use the operator’s Ollama/OpenAI-compatible backend. Five of those are branded deploys with operator-attributable names (“Aera IA”, “TopicalBase AiChat”, “Lexa”, “Tuuci AI”, “CloudU3 AI Platform”), meaning the operator ID is visible in the /api/config response.

A side benefit of the survey: branded deployments reveal previously-unmapped commercial AI-chat products that can be cross-referenced for further investigation.


Methodology

Reused IPs from prior Flowise port-3000 masscan: 20,581 hosts

openwebui-probe.py (200-thread fingerprint)
  GET /api/version → {"version":"x.y.z"} (Open WebUI shape)
  GET /api/config  → features (auth, signup, ldap, api_keys), name, default_models
  GET /api/models  → model list (gated in newer versions)
  → 201 raw matches → 112 confirmed Open WebUI (via /api/config name + features shape)

The 89 raw matches that weren’t Open WebUI are other apps with /api/version that happen to return JSON with a “version” key, generic Node.js dashboards, custom apps using arbitrary version strings (Unix timestamps, CalVer-style numbers, etc.). Distinguishing was via /api/config returning the Open WebUI features shape (auth, enable_signup, enable_login_form, enable_websocket, etc.).


Findings Summary

MetricValue
Cloud /16 ranges scanned28 (DO/Hetzner/Vultr)
Masscan hits on :300020,581
Open WebUI confirmed112
Authentication required111 (99.1%)
Public signup enabled (enable_signup: true)14
Branded deployments (custom name)5

Version distribution (top 10)

VersionCount
0.8.1222
0.9.219
0.8.108
0.7.28
0.8.87
0.9.16
0.6.185
0.6.364
0.7.13
0.6.413

The bulk of the surveyed population is on 0.7.x – 0.9.x, with a long tail going back to 0.3.x. Open WebUI’s release cadence is rapid; a meaningful fraction of operators are 6+ minor versions behind, exposing them to whatever security fixes have shipped in the interim.


Class A: Public-Signup Instances (HIGH: anyone-can-register)

enable_signup: true in /api/config means the chat UI’s login page exposes a “Sign up” button that creates a new user account from a public form. Combined with enable_login_form: true (also set on these), the registration flow is fully open to the internet. New accounts default to pending or user role depending on the version + operator config.

If the operator is paying for backend Ollama GPU compute or for OpenAI/Anthropic API quota that the chat UI proxies, every new external account drains that compute/quota.

HostBrand nameVersionHoster
116.202.111.2Aera IA (Open WebUI)0.8.12Hetzner
116.203.143.206TopicalBase AiChat (Open WebUI)0.6.15Hetzner
138.68.163.246Lexa3.0 (custom versioning)DigitalOcean
138.68.45.153Open WebUI0.9.2DigitalOcean
157.90.24.114Open WebUI0.3.32Hetzner
157.90.92.48Open WebUI0.9.1Hetzner
167.71.115.173Open WebUI0.7.1DigitalOcean
168.119.33.246Open WebUI0.8.11Hetzner
206.189.62.253Open WebUI0.6.18DigitalOcean
45.32.169.146Tuuci AI0.9.2Vultr
45.76.115.244CloudU3 AI Platform0.3.32Vultr
45.76.28.106Open WebUI0.6.5Vultr
65.109.131.165Open WebUI0.9.2Hetzner
65.109.162.107Open WebUI0.5.7Hetzner

Risk class: quota exhaustion / unauthorized usage. An attacker registers, uses the chat UI to query the operator’s models freely. For operator-attributed deploys (Aera IA, TopicalBase, Tuuci AI, CloudU3) the operator’s brand is also visible to the registering user, likely they think their tooling is more closed than it actually is.


Class B: Branded Deployments (HIGH informational: operator attribution)

Six instances expose a custom brand name in /api/config.name, identifying the operator’s commercial AI product even where the underlying tech is generic Open WebUI:

HostBrandNotes
116.202.111.2Aera IAHetzner; signup open
116.203.143.206TopicalBase AiChatHetzner; signup open
168.119.156.118ParticulateAIHetzner; signup closed
168.119.96.100Chatty AIHetzner; v4.0.1 (custom versioning, not Open WebUI native)
45.32.184.85OdionChatVultr; v0.8.7
135.181.96.47Marine AI KnowledgebaseHetzner; v0.6.2
108.61.213.116DJ AIVultr; v0.5.18
188.166.188.175 + 188.166.235.217InsightERA CorpGPT (2 instances)DO; v1.2.1 (likely fork)
45.32.169.146Tuuci AIVultr; signup open
45.76.115.244CloudU3 AI PlatformVultr; signup open
138.68.163.246LexaDO; v3.0 (likely fork)

The custom-named deploys with non-Open-WebUI version numbers (Lexa v3.0, Chatty AI v4.0.1, InsightERA CorpGPT v1.2.1) are likely forks of Open WebUI that have rebased the version string. Whoever maintains those forks may have re-pointed the security defaults too, worth tracking as separate operator entities.


Cross-Survey Pattern (updated)

TierPlatformSampleUnauthDefault
Vector DBQdrant61100%auth-off
Vector DBChromaDB48100%auth-off
Vector DBMilvus33100%RBAC-off
InferenceTriton2100%auth-off
InferencevLLM / OpenAI-compat44100%auth-off
OrchestrationFlowise430%auth-on (since CVE-2024-36420)
Orchestrationn8n1,0060%auth-on (since v0.166.0)
OrchestrationJupyter18 (univ)0%PAM/LDAP standard
Chat UIOpen WebUI1120.9% no-auth, 12.5% open-signupauth-on

The pattern crystallizes: the data and inference tiers ship unauthenticated and operators don’t fix it; the orchestration and chat-UI tiers ship authenticated and operators leave that default in place. The shift between layers is sharp. Open WebUI fits the orchestration/UI pattern, auth defaults are respected, but introduces a new failure mode (open-signup misconfiguration) that doesn’t exist for headless backend services.


Remediation

For Open WebUI operators with public signup unintentionally enabled:

# docker-compose.yml - environment variables to set
environment:
  - ENABLE_SIGNUP=False              # disable public registration
  - DEFAULT_USER_ROLE=pending        # new users require admin approval
  - WEBUI_AUTH=True                  # ensure auth is on (default)
  # optional: restrict signup by allowed-domain
  - WEBUI_SIGNUP_ALLOWED_DOMAINS=yourcompany.com

For operators on old Open WebUI versions (0.3.x – 0.6.x): upgrade to current 0.9.x. The release notes from 0.6 → 0.9 include several auth/permission improvements.

Branded-fork operators (Lexa, Chatty AI, InsightERA CorpGPT): cross-check that fork upstream has merged Open WebUI’s recent auth-related fixes.


NuClide Pipeline Artifacts

StageNotes
DiscoveryReused 20,581 port-3000 IPs from flowise-cloud-survey-2026-05
Fingerprintopenwebui-probe.py, /api/version shape + /api/config features
Findings ledgerTo be ingested into data/nuclide.db
What was NOT doneNo account registration attempted; no /api/v1/auths/signup POSTs; no usage of operator’s Ollama/OpenAI-compat backend

Cross-Referenced Survey: Marqo (port 8882): Zero Confirmed

A parallel masscan of port 8882 (Marqo’s default) across the same 28 cloud /16 ranges produced 2,952 hits, but /indexes probes against those hits returned zero confirmed Marqo instances. Sample-host inspection of the surface revealed:

  • ~80% of hits time out on TCP HTTP probes (TCP-open at masscan layer but RST/drop on actual HTTP)
  • Detected honeypot signatures on at least one (Server: 360 web server, TELDAT, A10WS, characteristic T-Pot vector-DB-honeypot fake)

Marqo as a self-hosted product is rare on cheap cloud VPSes, the vast majority of Marqo deployments are either Marqo Cloud (managed) or behind reverse proxies that hide port 8882 from the public internet. No Marqo findings to report.


References