Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
pyrocms-ssti-fix — 针对 CVE-2023-29689 的即插即用修复 - PyroCMS 中的 SSTI,通过自定义 Twig Sandbox 实现 | Kitploit
工具/GitHubGitHub/ysaxon/pyrocms-ssti-fix
防御工具漏洞分析代码分析Web应用程序漏洞利用Web安全错误配置
GitHubysaxon/pyrocms-ssti-fix

pyrocms-ssti-fix

针对 CVE-2023-29689 的即插即用修复 - PyroCMS 中的 SSTI,通过自定义 Twig Sandbox 实现

查看仓库
7个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Packagist Version

🛡️ PyroCMS SSTI Fix

针对 CVE-2023-29689 的即装即用安全修复——修复 PyroCMS 3.9 中的服务器端模板注入(SSTI)漏洞,该漏洞可导致远程代码执行。

问题

PyroCMS 允许管理员用户编辑存储在数据库中的模板。在没有沙箱隔离的情况下,拥有管理员权限的攻击者可以注入恶意的 Twig 代码:

root@kitploit:~
{{['id']|map('system')|join}}

这会执行任意系统命令。上游维护者认为这“符合预期设计”,因为管理员用户是受信任的——但在多租户或企业环境中,“管理员”≠“可被信任授予 Shell 访问权限”。

解决方案

该软件包会自动对用户可编辑的模板进行沙箱隔离,同时不限制合法的主题/插件模板。它利用 Twig 的 SourcePolicyInterface(由本软件包作者向上游贡献)来选择性地应用限制。

安装

root@kitploit:~
composer require ysaxon/pyrocms-ssti-fix

遗憾的是,由于 PyroCMS 禁用了自动发现,您需要自行添加 serviceProvider。

您可以通过以下命令完成:

root@kitploit:~
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \        YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php

环境要求

  • PHP 7.4+ 或 8.0+
  • Twig 2.16+ 或 3.9+(支持 SourcePolicyInterface)
  • Laravel 6.0+ / PyroCMS 3.x

工作原理

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                     Twig Render Request                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    StorageSourcePolicy                       │
│                                                              │
│  Is template from storage path (database/user-editable)?     │
│                                                              │
│     YES ──────────────────►  Enable Sandbox                  │
│      │                       - Block: map, filter, reduce    │
│      │                       - Block: dangerous tags         │
│      │                       - Whitelist safe operations     │
│                                                              │
│     NO ───────────────────►  No Sandbox                      │
│                              (Theme/addon templates work     │
│                               normally)                      │
└─────────────────────────────────────────────────────────────┘

配置(可选)

默认设置是安全的,适用于大多数安装场景。如需自定义:

root@kitploit:~
php artisan vendor:publish --tag=pyrocms-ssti-fix-config

这将生成 config/pyrocms-ssti-fix.php:

root@kitploit:~
return [
    // Master switch
    'enabled' => env('PYROCMS_SSTI_FIX_ENABLED', true),

    // Override auto-detected storage path
    'storage_path' => env('PYROCMS_SSTI_FIX_STORAGE_PATH', null),

    // Customize allowed tags/filters/functions/methods/properties
    'policy' => [
        'tags' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        'filters' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        // ... see config file for full options
    ],
];

被阻止的内容

默认安全策略会阻止沙箱模板中使用以下危险特性:

过滤器(RCE 攻击向量)

  • map - {{['cmd']|map('system')}} 可执行 Shell 命令
  • filter - 可调用任意 PHP 函数
  • reduce - 可调用任意 PHP 函数

标签(包含攻击)

  • include、extends、block、macro、import、embed、use

函数

  • source - 读取任意文件内容
  • include - 包含其他模板
  • template_from_string - 从字符串创建模板

允许的内容

沙箱模板中仍可使用以下安全操作:

root@kitploit:~
{# Variables #}
{{ entry.title }}
{{ user.name|upper }}

{# Loops and conditionals #}
{% for item in items %}
    {% if item.active %}
        {{ item.name }}
    {% endif %}
{% endfor %}

{# Safe filters #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}

{# Safe functions #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}

扩展白名单

如果您的管理员模板确实需要额外功能:

root@kitploit:~
// config/pyrocms-ssti-fix.php
'policy' => [
    'filters' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'my_custom_filter',  // Add specific filter
    ],
    'methods' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'App\Models\Post' => ['getTitle', 'getSummary'],
    ],
],

测试修复

安装后,请验证漏洞利用已被阻止:

  1. 进入 PyroCMS 管理后台 → 用户 → 角色
  2. 编辑某个角色的描述字段
  3. 输入:{{['id']|map('system')|join}}
  4. 保存并查看

修复前: 显示 id 命令的输出(或崩溃) 修复后: 显示错误或 [rendering failed: Filter "map" is not allowed.]

故障排除

“在容器中找不到 Twig”

软件包无法找到 Twig。这通常意味着:

  • PyroCMS/streams-platform 尚未完全加载
  • 您当前未在 PyroCMS 环境中运行

启用调试模式以查看详细信息:

root@kitploit:~
PYROCMS_SSTI_FIX_DEBUG=true

合法模板报错

如果管理员可编辑的模板使用了现已被阻止的功能:

  1. 检查日志,确认哪个功能被阻止
  2. 在配置中将其添加到白名单(如果安全)
  3. 或重构模板以使用允许的功能

性能问题

该软件包会缓存所有路径检查以及方法/属性查找。在 auto 模式下,只有存储路径中的模板才会产生沙箱开销。

安全说明

  • 本软件包不会修复根本的架构问题(Twig 渲染用户输入)
  • 它通过限制沙箱模板所能执行的操作来缓解漏洞利用
  • 管理员用户仍可创建令人困扰的模板,只是无法实现 RCE
  • 建议考虑额外的加固措施(WAF 规则、CSP 等),以实现纵深防御

致谢

  • Yaakov Saxon - 软件包作者,Twig 的 SourcePolicyInterface 贡献者
  • Twig PR #3893 - 实现选择性沙箱的上游贡献

许可证

MIT 许可证 - 请参阅 LICENSE 文件。

相关链接

  • CVE-2023-29689 - NVD 条目
  • GHSA-w7vm-4v3j-vgpw - GitHub 安全公告
  • Twig 沙箱文档
下载工具