
Эксплойт для CVE-2022-1329, уязвимости удалённого выполнения кода в плагине Elementor для WordPress, позволяющей аутентифицированным пользователям загружать и выполнять произвольные PHP-файлы через специально сформированные ZIP-нагрузки.
Google Dork: none
Date: April 16 2022
Exploit Author: AkuCyberSec (https://github.com/AkuCyberSec)
Vendor Homepage: https://elementor.com/
Software Link: https://wordpress.org/plugins/elementor/advanced/ (scroll down to select the version)
Version: 3.6.0, 3.6.1, 3.62
Tested on: WordPress 5.9.3 (os-independent since this exploit does NOT provide the payload)
CVE : CVE-2022-1329
Плагин WordPress под названием Elementor (v. 3.6.0, 3.6.1, 3.6.2) имеет уязвимость, которая позволяет любому аутентифицированному пользователю загружать и выполнять любой PHP-файл.
Эта уязвимость, согласно OWASP TOP 10 2021, занимает первое место (Broken Access Control — нарушение контроля доступа).
Файл, содержащий эту уязвимость: elementor/core/app/modules/onboarding/module.php
В конце этого файла можно найти следующий код:
add_action( 'admin_init', function() {
if ( wp_doing_ajax() &&
isset( $_POST['action'] ) &&
isset( $_POST['_nonce'] ) &&
wp_verify_nonce( $_POST['_nonce'], Ajax::NONCE_KEY )
) {
$this->maybe_handle_ajax();
}
} );
Этот код срабатывает каждый раз, когда ЛЮБАЯ учётная запись пользователя заходит на /wp-admin.
Для его успешного выполнения необходимы следующие 4 условия:
Загружаемый файл должен иметь следующую структуру:
Этот файл будет вашей полезной нагрузкой (например, PHP Reverse Shell или что-то ещё).
ПРЕДУПРЕЖДЕНИЕ: Элементор активирует загруженный нами поддельный плагин, а это значит, что каждый раз при посещении любой страницы будет срабатывать наша полезная нагрузка.
Если она попытается, например, подключиться к недоступному хосту, это может привести к отказу в обслуживании (Denial of Service).
Чтобы этого избежать, рекомендую использовать какую-нибудь переменную для активации полезной нагрузки.
Нечто подобное (посетите anypage.php?activate=1, чтобы продолжить выполнение фактической нагрузки):
if (!isset($_GET['activate']))
return;