CVE-2026-33154 Overview
dynaconf is a popular configuration management tool for Python applications. Prior to version 3.2.13, Dynaconf is vulnerable to Server-Side Template Injection (SSTI) due to unsafe template evaluation in the @Jinja resolver. When the jinja2 package is installed, Dynaconf evaluates template expressions embedded in configuration values without a sandboxed environment, allowing attackers to execute arbitrary code on the server.
Critical Impact
Attackers can achieve remote code execution by injecting malicious Jinja2 template expressions into configuration values, potentially leading to complete system compromise.
Affected Products
- dynaconf versions prior to 3.2.13
- Python applications using dynaconf with jinja2 package installed
- Systems where configuration values can be influenced by untrusted input
Discovery Timeline
- 2026-03-20 - CVE CVE-2026-33154 published to NVD
- 2026-03-23 - Last updated in NVD database
Technical Details for CVE-2026-33154
Vulnerability Analysis
This vulnerability is classified under CWE-94 (Improper Control of Generation of Code), which encompasses code injection vulnerabilities. The flaw exists in dynaconf's @Jinja resolver functionality, which is designed to allow dynamic configuration value generation using Jinja2 templating.
The core issue stems from the absence of a sandboxed execution environment when processing Jinja2 templates. When an application loads configuration values that contain Jinja2 template syntax (prefixed with @jinja), dynaconf passes these expressions directly to the Jinja2 rendering engine without proper restrictions. This allows an attacker who can control or influence configuration values to inject arbitrary Python code through Jinja2's template expression syntax.
The attack requires the jinja2 package to be installed in the Python environment, which is a common dependency in many Python web frameworks. The network-accessible attack vector with high complexity suggests that exploitation requires specific conditions to be met, such as the attacker having the ability to modify configuration sources or inject values through application interfaces.
Root Cause
The root cause of this vulnerability is the lack of a sandboxed Jinja2 environment in dynaconf's template resolver. When processing configuration values prefixed with @jinja, the library renders templates using an unrestricted Jinja2 environment that provides access to Python's built-in functions and object model. This design allows template expressions to escape the intended configuration context and execute arbitrary Python code.
Attack Vector
The attack vector is network-based, requiring the attacker to have low-level privileges and the ability to influence configuration values processed by dynaconf. Exploitation scenarios include:
- Configuration file injection - If an attacker can modify configuration files (YAML, TOML, JSON, etc.) that dynaconf loads, they can embed malicious Jinja2 expressions
- Environment variable manipulation - Configuration values sourced from environment variables could be exploited if an attacker controls the environment
- External configuration sources - Applications loading configuration from external sources (Redis, Vault, etc.) may be vulnerable if those sources are compromised
A typical SSTI payload leverages Jinja2's object traversal capabilities to access Python's subprocess module or similar dangerous functions, enabling command execution on the underlying system.
For detailed technical information about exploitation methods, see the GitHub Security Advisory GHSA-pxrr-hq57-q35p.
Detection Methods for CVE-2026-33154
Indicators of Compromise
- Unusual Jinja2 template expressions in configuration files containing Python object references (e.g., __class__, __mro__, __subclasses__)
- Configuration values containing suspicious patterns like {{ config.__class__.__init__.__globals__ }} or similar object traversal attempts
- Unexpected subprocess executions or network connections originating from the Python application process
- Log entries showing template rendering errors with unusual payloads
Detection Strategies
- Implement file integrity monitoring on configuration files to detect unauthorized modifications
- Deploy application-level logging to capture configuration value parsing and template rendering operations
- Use network monitoring to identify unexpected outbound connections from application servers
- Configure endpoint detection to alert on suspicious Python subprocess spawning patterns
Monitoring Recommendations
- Audit all sources of configuration data that flow into dynaconf-powered applications
- Monitor for changes to environment variables used in application configuration
- Implement alerting for configuration reloads or dynamic configuration updates from external sources
- Review application logs for Jinja2 template errors or unusual rendering behavior
How to Mitigate CVE-2026-33154
Immediate Actions Required
- Upgrade dynaconf to version 3.2.13 or later immediately
- Audit all configuration sources for potentially malicious Jinja2 expressions
- Review application code to identify where dynaconf's @jinja resolver is used
- Restrict access to configuration files and external configuration sources
- Consider disabling Jinja2 template evaluation if not required for your use case
Patch Information
The vulnerability has been patched in dynaconf version 3.2.13. The fix implements proper sandboxing for Jinja2 template evaluation, restricting access to dangerous Python functionality.
Patch details are available in the GitHub Commit Update. Users should upgrade via pip:
pip install --upgrade dynaconf>=3.2.13
The official release is available at the GitHub Release 3.2.13 page.
Workarounds
- Remove the jinja2 package from your Python environment if Jinja2 templating in configuration is not required
- Implement strict input validation on all configuration sources to reject template-like patterns
- Use application-level access controls to prevent unauthorized modification of configuration files
- Consider migrating sensitive configuration values to secure secret management systems with proper access controls
# Check if jinja2 is installed and remove if not needed
pip list | grep -i jinja2
# If jinja2 is not required, uninstall it
pip uninstall jinja2
# Verify dynaconf version after upgrade
pip show dynaconf | grep Version
# Expected output: Version: 3.2.13 or higher
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


