
Cross-Site Scripting (XSS) Almacenado Autenticado en el plugin Contact List
Aviso: Este repositorio se crea solo con fines educativos y divulgación ética. La vulnerabilidad ha sido reportada de forma responsable al proveedor y ha sido parcheada. No utilice esta información para explotar sistemas sin la debida autorización.
Se descubrió una vulnerabilidad de Cross-Site Scripting (XSS) Almacenado en el plugin Contact List - Online Staff Directory & Address Book para WordPress (versiones <= 3.0.17). Esta vulnerabilidad permite a usuarios autenticados con privilegios de Autor o superiores inyectar JavaScript malicioso en las tarjetas de contacto mediante un campo personalizado oculto.
Cuando la tarjeta de contacto se muestra en el directorio público, el payload inyectado se ejecuta en el navegador de cualquier visitante. Si un Administrador ve la página, esta falla puede escalar a una toma de control total de la cuenta (ATO) y al compromiso del sitio.
<= 3.0.17La vulnerabilidad se origina por una sanitización inadecuada y un manejo inseguro de la salida del campo personalizado _cl_map_iframe, diseñado para incrustar iframes de mapas.
1. Almacenamiento de Datos Inseguro:
En includes/class-contact-list-custom-fields.php (dentro de saveCustomFields()), el plugin procesa la entrada _cl_map_iframe mediante una expresión regular para extraer un bloque ```
6. Reenvíe la solicitud. El servidor almacena el iframe malicioso.
7. Disparador: Visite la página del directorio público donde está incrustado [contact_list]. La ventana de alerta se activará inmediatamente, confirmando la ejecución de código.
POST /wp-admin/post.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
post_title=Hacked+Contact&post_type=contact&action=editpost&_cl_map_iframe=
Para parchear esta vulnerabilidad, los desarrolladores del plugin deben:
wp_kses() con un arreglo estricto de etiquetas y atributos HTML permitidos al guardar _cl_map_iframe. No permitir atributos como onload, onerror o URIs javascript:.