CVE-2026-44845 Overview
CVE-2026-44845 is a server-side template injection vulnerability in JumpServer, an open source bastion host and operations security audit system. Versions prior to 4.10.17 allow an authenticated administrator with Applet Host management and deployment permissions to inject Jinja2 expressions into the IP/Host field or Core Service Address field. Ansible evaluates these expressions during Applet Host deployment, executing arbitrary commands on the JumpServer control node. The flaw is tracked under [CWE-1336] (Improper Neutralization of Special Elements Used in a Template Engine). It is fixed in JumpServer version 4.10.17.
Critical Impact
Authenticated administrators can achieve arbitrary command execution on the JumpServer control node, compromising the central bastion host that mediates access to downstream infrastructure.
Affected Products
- JumpServer versions prior to 4.10.17
- JumpServer Applet Host deployment component
- Ansible-driven inventory processing on the JumpServer control node
Discovery Timeline
- 2026-08-17 - CVE-2026-44845 published to NVD
- 2026-08-18 - Last updated in NVD database
- v4.10.17 - JumpServer releases patched version resolving the injection
Technical Details for CVE-2026-44845
Vulnerability Analysis
JumpServer uses Ansible playbooks to deploy Applet Host configurations. During deployment, administrator-supplied values for the IP/Host field and the Core Service Address field are inserted into the Ansible inventory and playbook variables without neutralizing template syntax.
Because Ansible processes inventory data through the Jinja2 template engine, any {{ ... }} expression embedded in these fields is evaluated at runtime. An attacker holding Applet Host management permissions can craft expressions that invoke Python callables reachable from the template context, resulting in command execution on the control node.
The impact extends beyond the JumpServer application itself. The control node holds credentials, SSH keys, and orchestration authority for every managed asset, so command execution here provides a pivot into the broader infrastructure the bastion protects.
Root Cause
The root cause is missing input validation and template-syntax neutralization on operator-controlled fields consumed by Ansible. The patch introduces a validate_account_username helper and standardized error-formatting helpers so that account identifiers and related payload fields are validated before being handed to Ansible tasks.
Attack Vector
Exploitation requires an authenticated session with administrator-level Applet Host management and deployment permissions. The attacker submits a Jinja2 payload through the IP/Host field or Core Service Address field, then triggers an Applet Host deployment. Ansible renders the malicious template on the control node during inventory expansion, executing the embedded expression under the JumpServer service account.
# Patch excerpt: apps/accounts/models/virtual.py
def get_manual_account(cls, input_username='', input_secret='', from_permed=True):
""" @INPUT 手动登录的账号(any) """
from .account import Account
from accounts.utils import validate_account_username
if from_permed:
username = AliasAccount.INPUT.value
secret = ''
else:
username = validate_account_username(input_username)
secret = input_secret
return Account(name=AliasAccount.INPUT.label, username=username, secret=secret)
Source: GitHub Commit cc57ba0
The patch routes the previously unchecked input_username through validate_account_username, blocking template metacharacters and other unsafe input before it reaches Ansible.
Detection Methods for CVE-2026-44845
Indicators of Compromise
- Applet Host records containing Jinja2 delimiters such as {{, }}, {%, or %} in the IP/Host or Core Service Address fields.
- Unexpected child processes (shells, python, curl, wget) spawned by the JumpServer Ansible worker on the control node.
- Ansible playbook runs referencing hostnames or addresses containing template syntax in inventory files.
- New or modified files under JumpServer service directories immediately following an Applet Host deployment.
Detection Strategies
- Audit the JumpServer database and configuration exports for Applet Host entries whose address fields contain Jinja2 syntax.
- Correlate JumpServer administrator activity logs with Ansible execution logs to identify deployments launched by low-frequency or newly privileged accounts.
- Monitor process ancestry on the control node for shell or interpreter processes descending from the JumpServer or Ansible service processes.
Monitoring Recommendations
- Forward JumpServer application logs, Ansible logs, and control-node process telemetry to a centralized SIEM for correlation.
- Alert on administrator role changes that grant Applet Host management or deployment permissions.
- Track outbound network connections from the JumpServer control node to non-managed destinations following Applet Host operations.
How to Mitigate CVE-2026-44845
Immediate Actions Required
- Upgrade JumpServer to version 4.10.17 or later on all control nodes.
- Review and revoke unnecessary Applet Host management and deployment permissions from administrator accounts.
- Inspect existing Applet Host configurations for Jinja2 syntax in address fields and remove any suspicious entries.
- Rotate credentials, SSH keys, and API tokens stored on the JumpServer control node if exploitation is suspected.
Patch Information
The fix is delivered in JumpServer v4.10.17. The relevant changes are captured in GitHub Commit cc57ba0, GitHub Pull Request #16749, and GitHub Pull Request #16886. The release notes are available at GitHub Release v4.10.17. Full context is provided in the GitHub Security Advisory GHSA-22h6.
Workarounds
- Restrict Applet Host management and deployment permissions to a minimal set of trusted administrators until patching completes.
- Enforce input validation at the network or reverse-proxy layer to reject requests containing Jinja2 delimiters in Applet Host fields.
- Isolate the JumpServer control node with strict egress controls to limit post-exploitation movement.
# Verify running JumpServer version and upgrade
docker exec jms_core bash -c "cat /opt/jumpserver/apps/jumpserver/const.py | grep VERSION"
# Upgrade to patched release
cd /opt/jumpserver-installer
./jmsctl.sh down
git checkout v4.10.17
./jmsctl.sh upgrade v4.10.17
./jmsctl.sh start
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

