CVE-2026-70489: Open WebUI: automation rule parsing freezes server
GHSA-73cq-mcgh-379c MEDIUM PoC AVAILABLE CISA: TRACK*Open WebUI's automation scheduler computes recurrence rules by walking forward from a hardcoded year-2000 anchor, so a simple FREQ=MINUTELY rule forces roughly 25 years of occurrences to be enumerated synchronously on the same event loop that serves chat, API and WebSocket traffic — one evaluation takes 18.9 seconds of blocking CPU, and a slightly more elaborate rule takes over a minute. Any user who can create an automation can trigger this: by default that's admin-only, since USER_PERMISSIONS_FEATURES_AUTOMATIONS defaults to false, but any deployment that has enabled automations for regular users — the normal way to make the feature usable — exposes this to every one of them, and because the default deployment runs a single Uvicorn worker there's no second worker to absorb the stall. Worse, the automation doesn't have to fire to cause damage: once stored, the scheduler re-runs the same expensive walk on every 10-second poll, so the instance stays wedged rather than recovering. A working PoC with measured timings is public in the GHSA advisory, though EPSS (top 78th percentile) and CISA's SSVC TRACK_STAR rating both suggest this isn't being mass-exploited or KEV-listed today. Patch to open-webui 0.11.0, or in the interim keep automation creation restricted to trusted admins and consider raising UVICORN_WORKERS to limit blast radius.
What is the risk?
Medium severity (CVSS 6.5, AV:N/AC:L/PR:L/UI:N/A:H) — network-reachable, low attack complexity, requires only low privileges (an authenticated user who can create automations), no user interaction, and impacts availability alone with no confidentiality or integrity loss. Exploitability is trivial: no exotic syntax is needed, just FREQ=MINUTELY. The gating factor is USER_PERMISSIONS_FEATURES_AUTOMATIONS — on default deployments only an admin can trigger it, making it closer to a self-DoS/misconfiguration risk, but any deployment that enables automations for ordinary users (the feature's intended use case) turns this into an authenticated-user DoS against every other tenant on that instance. EPSS is low (0.00295), it's not in CISA KEV, and SSVC rates it TRACK_STAR (monitor, not act-now) — consistent with a DoS bug rather than an actively weaponized RCE or data-exposure flaw. Overall: low-to-moderate real-world exploitation likelihood today, but high blast radius per successful trigger given the single-worker default and the self-perpetuating scheduler re-poll.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Open WebUI | pip | >= 0.9.0, < 0.11.0 | 0.11.0 |
Do you use Open WebUI? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step-
1) Patch: upgrade to open-webui >= 0.11.0, which anchors sub-daily recurrence rules to the current clock instead of year 2000 and bounds caller-supplied DTSTART values — the same rules that took 18.9s/64.2s now run in under 1ms. 2) Workaround until patched: keep USER_PERMISSIONS_FEATURES_AUTOMATIONS=false (default) so only trusted admins can create automations, and audit existing automations for FREQ=MINUTELY/HOURLY rules with no or ancient DTSTART. 3) Reduce single-point exposure: set UVICORN_WORKERS > 1 so one wedged worker doesn't take down the whole instance (limits blast radius, does not fix the underlying cost). 4) Detection: monitor for automation create/update/toggle events followed by sustained high CPU and event-loop latency spikes recurring roughly every 10 seconds (the scheduler poll interval) — that recurrence signature is distinctive to this bug. 5) After patching, review automation logs for any pre-existing minutely/hourly rules created before the fix.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-70489?
Open WebUI's automation scheduler computes recurrence rules by walking forward from a hardcoded year-2000 anchor, so a simple FREQ=MINUTELY rule forces roughly 25 years of occurrences to be enumerated synchronously on the same event loop that serves chat, API and WebSocket traffic — one evaluation takes 18.9 seconds of blocking CPU, and a slightly more elaborate rule takes over a minute. Any user who can create an automation can trigger this: by default that's admin-only, since USER_PERMISSIONS_FEATURES_AUTOMATIONS defaults to false, but any deployment that has enabled automations for regular users — the normal way to make the feature usable — exposes this to every one of them, and because the default deployment runs a single Uvicorn worker there's no second worker to absorb the stall. Worse, the automation doesn't have to fire to cause damage: once stored, the scheduler re-runs the same expensive walk on every 10-second poll, so the instance stays wedged rather than recovering. A working PoC with measured timings is public in the GHSA advisory, though EPSS (top 78th percentile) and CISA's SSVC TRACK_STAR rating both suggest this isn't being mass-exploited or KEV-listed today. Patch to open-webui 0.11.0, or in the interim keep automation creation restricted to trusted admins and consider raising UVICORN_WORKERS to limit blast radius.
Is CVE-2026-70489 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2026-70489, increasing the risk of exploitation.
How to fix CVE-2026-70489?
1) Patch: upgrade to open-webui >= 0.11.0, which anchors sub-daily recurrence rules to the current clock instead of year 2000 and bounds caller-supplied DTSTART values — the same rules that took 18.9s/64.2s now run in under 1ms. 2) Workaround until patched: keep USER_PERMISSIONS_FEATURES_AUTOMATIONS=false (default) so only trusted admins can create automations, and audit existing automations for FREQ=MINUTELY/HOURLY rules with no or ancient DTSTART. 3) Reduce single-point exposure: set UVICORN_WORKERS > 1 so one wedged worker doesn't take down the whole instance (limits blast radius, does not fix the underlying cost). 4) Detection: monitor for automation create/update/toggle events followed by sustained high CPU and event-loop latency spikes recurring roughly every 10 seconds (the scheduler poll interval) — that recurrence signature is distinctive to this bug. 5) After patching, review automation logs for any pre-existing minutely/hourly rules created before the fix.
What systems are affected by CVE-2026-70489?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, model serving, automation/scheduling pipelines.
What is the CVSS score for CVE-2026-70489?
CVE-2026-70489 has a CVSS v3.1 base score of 6.5 (MEDIUM). The EPSS exploitation probability is 0.37%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0029 Denial of AI Service AML.T0034.001 Resource-Intensive Queries AML.T0049 Exploit Public-Facing Application Compliance Controls Affected
What are the technical details?
Original Advisory
## Summary In every affected release, automation recurrence parsing anchors minutely and hourly rules at a fixed date of 2000-01-01 and then walks forward one interval at a time to find the next run. A single `FREQ=MINUTELY` rule therefore enumerates roughly a quarter-century of occurrences, synchronously, on the event loop that also serves the scheduler, HTTP and WebSocket traffic. Nothing bounds the walk, and nothing moves it off the loop. ## Preconditions Any user who can create an automation. `USER_PERMISSIONS_FEATURES_AUTOMATIONS` defaults to `false`, so on a default deployment only an admin can reach the create path; it becomes reachable by ordinary users on any deployment that has granted the automations feature, which is the normal way to make the feature usable. `UVICORN_WORKERS` defaults to 1, so there is no second worker to absorb the stall. The rule needs no unusual syntax: `FREQ=MINUTELY` with no `DTSTART`, or with a `DTSTART` set well in the past, is enough. ## Impact Availability, against every other user of the instance. One evaluation of `RRULE:FREQ=MINUTELY` takes 18.9 s of blocking CPU; adding a ten-value `BYSECOND` list multiplies the walk and takes 64.2 s. `FREQ=HOURLY` costs 0.34 s and is not materially exploitable on its own. The cost does not stop at creation: once the automation is stored, the scheduler recomputes the next run for every claimed row on each poll, so the same walk repeats on a default 10 s interval and the instance stays wedged rather than recovering. Instances that have not enabled the automations feature for non-admin users are exposed only to an admin doing this. ## Fix Fixed in 0.11.0. Sub-daily rules are now anchored to the current clock instead of the year-2000 date, so the walk starts at the next occurrence rather than a quarter-century behind it. A caller-supplied `DTSTART` is honoured only when the number of occurrences it implies stays under a fixed bound, and is otherwise replaced by the clock-aligned anchor. The same rules that cost 18.9 s and 64.2 s now cost under a millisecond. Upgrading fully resolves the issue, no configuration change is required. ## Root cause Affected component: `backend/open_webui/utils/automations.py`, `_parse_rule`, reached from the automation create, update and toggle handlers in `backend/open_webui/routers/automations.py` and from the scheduler's claim path in `backend/open_webui/models/automations.py`. Affected setup: every build from 0.9.0 onward, since that is when the automations feature shipped. The fixed anchor existed to make sub-daily intervals snap to clock boundaries, so that "every 5 minutes" lands on :00, :05, :10 rather than drifting from whenever the automation happened to be created. Snapping only needs a reference point of the right phase, but the implementation used a literal far-past date as that reference and left the recurrence library to walk forward from it. The distance between the anchor and the present is therefore attacker-influenced work that grows with real time, and it was never treated as a cost that needed a bound or a thread. ## Proof of concept Measured cost of a single next-run computation against the shipped 0.10.2 parser: | rule | cost | | --- | --- | | `RRULE:FREQ=MINUTELY` | 18,880 ms | | `RRULE:FREQ=MINUTELY;BYSECOND=0,1,2,3,4,5,6,7,8,9` | 64,236 ms | | `DTSTART:20000101T000000` + `RRULE:FREQ=MINUTELY` | 26,237 ms | | `RRULE:FREQ=HOURLY` | 339 ms | Measured at function level deliberately. Persisting such an automation has the scheduler repeat the walk on every poll and wedge the instance indefinitely, which is the actual impact but makes a live end-to-end run destructive to the test instance. ## Credits Reported by @Classic298.
Exploitation Scenario
An attacker who holds (or compromises) a standard user account on an Open WebUI instance where the automations feature has been enabled for non-admins — the normal configuration for teams that actually use the feature — opens the automation creation UI or hits the create endpoint directly and submits a recurrence rule of RRULE:FREQ=MINUTELY, optionally adding a BYSECOND list to push the cost to 64+ seconds. The single Uvicorn worker that also serves every other user's chat requests, the inference API and WebSocket connections blocks for tens of seconds computing the next occurrence. Because the automation persists, the scheduler recomputes the same expensive walk on every subsequent poll (default every 10 seconds), so the instance never recovers — effectively a one-shot, no-interaction, authenticated DoS that denies AI chat service to every other user of the shared instance until an admin manually deletes the automation or the process is restarted on a patched build.
Weaknesses (CWE)
CWE-1333 Inefficient Regular Expression Complexity
Primary
CWE-400 Uncontrolled Resource Consumption
Primary
CWE-1333 Inefficient Regular Expression Complexity CWE-400 Uncontrolled Resource Consumption CWE-1333 — Inefficient Regular Expression Complexity: The product uses a regular expression with a worst-case computational complexity that is inefficient and possibly exponential.
- [Architecture and Design] Use regular expressions that do not support backtracking, e.g. by removing nested quantifiers.
- [System Configuration] Set backtracking limits in the configuration of the regular expression implementation, such as PHP's pcre.backtrack_limit. Also consider limits on execution time for the process.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H References
Timeline
Related Vulnerabilities
CVE-2026-44551 9.1 open-webui: LDAP auth bypass — full account takeover
Same package: open-webui CVE-2026-45672 8.8 open-webui: code exec gate bypass via API endpoint
Same package: open-webui CVE-2025-64495 8.7 Open WebUI: XSS-to-RCE via malicious prompt injection
Same package: open-webui CVE-2026-44552 8.7 open-webui: Redis cache poisoning enables cross-instance tool hijack
Same package: open-webui CVE-2026-45315 8.7 open-webui: stored XSS → JWT theft and admin takeover
Same package: open-webui