Skip to main content

Wizarr CVE-2026-108264

| EUVDEUVD-2026-95995 CRITICAL
Improper Neutralization of Special Elements Used in a Template Engine (CWE-1336)
2026-10-09 GitHub_M
9.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as step-creating user or import bundle
  2. Delivery
    Store malicious Jinja2 in wizard step Markdown
  3. Exploit
    Victim/admin loads GET /wizard/{server}/{idx}
  4. Execution
    SSTI evaluates in non-sandboxed Jinja2
  5. Persist
    Execute OS commands as app user
  6. Impact
    Exfiltrate SECRET_KEY, credentials, and database

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V1 - Encoding and Sanitization Template injection prevention
Exploitation Conditions

Requires an account with privileges to create or edit wizard steps, OR administrator access to import an untrusted bundle through POST /settings/wizard/import - this is the concrete prerequisite, matching PR:H. The vulnerable sinks are the non-sandboxed Jinja2 rendering in app/blueprints/wizard/routes.py (_render), plus app/jinja_filters.py (render_jinja) and app/services/wizard_widgets.py. Execution triggers when a stored step is rendered at GET /wizard/{server}/{idx}; no victim user interaction beyond rendering is needed (UI:N). Exploitation is limited to Wizarr instances prior to 2026.9.1 and to attackers who already hold step-authoring or bundle-import privileges, which substantially narrows the realistic attacker population to trusted-but-malicious users or admins tricked into importing attacker-supplied bundles. Exploitation status: no public exploit identified at time of analysis.

Impact

This is a genuine high-priority vulnerability, not an inflated CVSS score. The CWE-1336 server-side template injection flaw lets stored Jinja2 content execute arbitrary Python in a non-sandboxed environment with application globals exposed, confirmed by the source-code diff (the fix replaces current_app.jinja_env.overlay/render_template_string with a locked-down render_wizard_template and adds nh3 HTML sanitization). The CVSS 3.1 vector (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H, 9.1) is internally consistent: network-reachable, low complexity, scope change reflecting the jump from the web template context to OS command execution, SECRET_KEY disclosure, and database/credential access. The limiting signal is PR:H - exploitation requires privileges to create wizard steps or administrator rights to import a bundle, so this is a privileged-insider or malicious-untrusted-bundle scenario rather than anonymous internet exploitation. No EPSS score, KEV listing, or POC was provided in the input; absence of these is not evidence of safety but means there is no confirmed active exploitation or published exploit. Note a PR nuance: the description distinguishes 'an authenticated user able to create steps' (potentially lower privilege) from 'an administrator importing an untrusted bundle' - the scored vector uses PR:H, but the lower-privilege step-creation path may warrant PR:L; verify role requirements against the Wizarr RBAC model.

Exploit ScenarioDerived

An authenticated Wizarr user with permission to create or edit wizard steps (or an administrator importing a malicious bundle via POST /settings/wizard/import) stores Markdown containing a Jinja2 payload. When GET /wizard/{server}/{idx} renders the step, the payload executes arbitrary Python as the application user, running OS commands, exfiltrating the Flask SECRET_KEY and connected media-server credentials, and reading the database. No public exploit code was identified in the provided data.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 09, 2026

Server-side template injection in Wizarr before 2026.9.1 allows an authenticated user with privileges to create or edit wizard steps - or an administrator who imports an attacker-supplied wizard bundle - to execute arbitrary Python in the context of the application process. Because the stored step Markdown is compiled by the application's non-sandboxed Jinja2 environment with application globals exposed, successful exploitation can run operating-system commands as the application user, disclose the Flask SECRET_KEY, reach connected media-server service credentials and the database, and inject stored cross-site scripting into pages rendered at GET /wizard/{server}/{idx}. The issue is rated 9.1 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) and is fixed in 2026.9.1; no public exploit code was identified at the time of analysis, and the PR:H prerequisite narrows the realistic attacker population to trusted-but-malicious insiders or admins socially engineered into importing a hostile bundle.

RemediationAI

Upgrade to Wizarr 2026.9.1 or later - the vendor-released patch - which replaces direct Jinja rendering of stored step content with an isolated template helper, tokens out widget placeholders so they are never parsed as templates, and runs rendered HTML through an nh3 sanitizer. Until the upgrade can be applied, restrict the ability to create or edit wizard steps to fully trusted administrators and never import wizard bundles from untrusted or third-party sources, since POST /settings/wizard/import is a direct path to the vulnerable renderer; disabling or removing the wizard feature entirely, if not needed, eliminates the attack surface. Treat these as compensating controls only - they reduce exposure but do not remove the code-execution sink, and locking down step authoring degrades the delegated workflows Wizarr is designed to provide. Because exploitation yields OS command execution as the application user and exposes the Flask SECRET_KEY plus connected media-server credentials and the database, any instance where an untrusted step or bundle was ever created or imported should be treated as compromised: rotate the SECRET_KEY (invalidating sessions), rotate Jellyfin/Plex/Emby and any database credentials stored in configuration, audit wizard steps for suspicious template syntax, and review the host for persistence. No public exploit code was identified at the time of analysis, which lowers the near-term urgency for airtight instances but does not reduce the impact if the PR:H prerequisite is met.

Affected VersionsENISA

wizarr < 2026.9.1

Affected Packages

euvd wizarr fix: 2026.9.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-1336 (improper neutralization of special elements used in a template engine), i.e. classic server-side template injection. Wizarr renders administrator- and author-supplied wizard step content - either entered through the step editor or carried inside an imported bundle - by passing it to the application's live Jinja2 environment. The patch diff shows that app/blueprints/wizard/routes.py previously built the template via current_app.jinja_env.overlay(autoescape=False) and called template.render(**render_ctx) on the stored Markdown, after a context copy that deliberately re-exposed the entire config dictionary as a top-level settings variable; app/jinja_filters.py's render_jinja filter called Flask's render_template_string(text) on arbitrary input, and app/services/wizard_widgets.py contained further evaluation sinks. Since the environment is not a jinja2.sandbox.SandboxedEnvironment and full application globals (including Flask's config and helper functions) were reachable, template syntax such as {{ config }} or Python object-traversal payloads yields code execution rather than mere data interpolation. The CPE cpe:2.3:a:wizarrrr:wizarr:*:*:*:*:*:*:*:* confirms the Wizarr application is the affected component. The fix (commit 6aa3c33c1b3d945e055ef116cc531028b3735bb7) introduces app/services/wizard_templates.py, which renders stored templates through a context-isolated helper with no access to the application environment, plus app/services/wizard_html.py, which uses the nh3 HTML sanitizer to strip scripts and application actions while permitting a constrained allowlist of display markup (including a single pinned discord.com/widget iframe that is force-sandboxed). The rewritten _render also extracts widget placeholders into opaque tokens before Jinja rendering and substitutes them afterwards, so widget syntax is no longer parsed as a template.

Know when Wizarr gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 9.1 CRITICAL
AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 9.1 CRITICAL

Network-rendered template requires step-authoring/bundle-import privileges (PR:H), low complexity; SSTI escapes the web context to OS command execution (S:C) with full C/I/A impact.

3.1 AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
High
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 09, 2026 - 22:17 EUVD
CVE Published
Oct 09, 2026 - 20:52 cve.org
CRITICAL 9.1

DescriptionCVE.org

Wizarr is an advanced user invitation and management system for Jellyfin, Plex, Emby, and other media servers. Prior to 2026.9.1, wizard step Markdown supplied through the editor or imported bundles was evaluated by app/blueprints/wizard/routes.py in the application's non-sandboxed Jinja2 environment with application globals exposed. An authenticated user able to create steps, or an administrator importing an untrusted bundle through POST /settings/wizard/import, could execute arbitrary Python when GET /wizard/{server}/{idx} rendered the stored step; app/jinja_filters.py and app/services/wizard_widgets.py contained additional evaluation sinks. This could execute operating-system commands as the application user, disclose the Flask SECRET_KEY, access connected service credentials and the database, and produce stored cross-site scripting. This issue is fixed in 2026.9.1.

Technical POC Analysis

CWE-1336: Improper Neutralization of Special Elements Used in a Template Engine.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Wizarr, the self-hosted wizard and invite-management front end for media servers such as Plex and Jellyfin, contains a critical template-injection flaw (CVE-2026-108264) that lets an already-privileged account turn ordinary wizard-step content into arbitrary code running as the Wizarr service account. Because those permissions are normally held by trusted staff or administrators, the realistic exposure is a malicious insider or an administrator tricked into importing a tampered wizard bundle, and successful abuse can expose the application's signing secret, connected media-server credentials, and database contents while also planting persistent browser-side scripts for end users. Leadership should treat this as a trusted-insider and supply-chain risk to the identity and credential material underpinning the media platform, not merely as an application bug.

Business Impact: High
Compensating Controls

No vendor-released patch is confirmed as available at time of analysis, though the advisory references a fix in 2026.9.1. Interim mitigations: restrict wizard-step create/edit and bundle-import permissions to a minimal set of trusted administrators, block import of externally supplied or untrusted wizard bundles, avoid internet exposure of the Wizarr interface, and rotate the Flask SECRET_KEY, connected media-server service credentials, and database credentials that could be disclosed. Note that the vulnerability requires PR:H, so an authenticated high-privilege account is needed; no public exploit code was identified at the time of analysis. Apply vendor patch (2026.9.1) as soon as it is obtainable.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
niche self-hosted media-server invitation tool, limited enterprise footprint
Social Media
5
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy