Especialistas de NIVEL4 descubren vulnerabilidad clasificada como Alta en complemento para WordPress

Tras liderar una investigación sobre diversos complementos de la popular plataforma WordPress, los especialistas Matías Schiappacasse y Lukas Gaete encontraron una vulnerabilidad en el plugin «My Reservation System», utilizado comercialmente para reservar automáticamente servicios o productos en línea. La falla fue reportada y recientemente catalogada como «CVE-2025-7022: Reflected XSS en el plugin My Reservation System para WordPress» en la lista de Vulnerabilidades y Exposiciones Comunes (CVE) mantenida por la Fundación MITRE.

Introducción

472 millones de sitios web a nivel global utilizan la plataforma WordPress, lo que representa alrededor del 43% de todas las páginas web del mundo. El éxito de esta plataforma se debe, en gran medida, a su versatilidad y la posibilidad del uso de complementos -conocidos como plugins-, los que permiten a muchas personas, incluso sin ser programadores, crear y disponibilizar un sitio web en poco tiempo.

Pero el éxito de la plataforma es precisamente el que revela una de sus mayores debilidades en términos de ciberseguridad. Los plugins, creados para facilitar y automatizar la experiencia de la navegación y recolección de datos, esconden fallas en su desarrollo, las que normalmente son utilizadas por actores de amenaza para vulnerar un sitio.

En el marco de una investigación orientada a la identificación temprana de vulnerabilidades en software de terceros, los especialistas Matías Schiappacasse y Lukas Gaete elaboraron una lista de plugins de WordPress con baja visibilidad y sin historial de auditorías de seguridad conocidas. Como resultado, lograron identificar una vulnerabilidad activa de Cross-Site Scripting (XSS) Reflejado en el plugin My Reservation System en versiones iguales o inferiores a la 2.3.

Esta vulnerabilidad fue recientemente reportada por lo especialistas y registrada por la Fundación MITRE -la cual mantiene la lista de Vulnerabilidades y Exposiciones Comunes (CVE)- y ha sido catalogada como CVE-2025-7022, con una puntuación de 7.1 de 10 (considerado como Alto) en el Sistema Común de Puntuación de Vulnerabilidades. De acuerdo a lo descrito por el mismo sitio, la vulnerabilidad permite a un atacante inyectar scripts maliciosos en el navegador de un usuario administrador, lo que podría comprometer la integridad y confidencialidad del sitio web afectado.

El plugin vulnerable, que es utilizado para facilitar la gestión de reservas de los usuarios en la prestación de servicios o de productos comerciales desde un sitio web, y que ofrece funcionalidades como calendarios de reservas, formularios personalizados, gestión de pagos y notificaciones por correo, podría ser utilizado por un atacante para apoderarse de datos sensibles de usuarios del sistema y eventualmente, ser utilizado en campañas de phishing.

A continuación, el equipo de NIVEL4 detalla el proceso técnico que condujo al descubrimiento de la vulnerabilidad, así como el procedimiento de reporte y sus conclusiones.

Metodología de investigación

Como parte de un enfoque orientado a la identificación temprana de vulnerabilidades en software de terceros, se elaboró una lista de plugins de WordPress con baja visibilidad y sin historial de auditorías de seguridad conocidas. El objetivo era detectar implementaciones inseguras relacionadas con el manejo de entradas del usuario, ejecución de funciones dinámicas y otras prácticas comunes en desarrollos con poca supervisión en seguridad.

Uno de los plugins seleccionados para análisis fue My Reservation System, debido a su limitada documentación, escasa actividad de mantenimiento y uso directo de entradas sin validación en el frontend.

Analisis del codigo fuente

El punto de partida de la investigación fue una revisión manual del código fuente del plugin. El análisis se centró en los endpoints o archivos que procesaban datos de entrada del usuario sin una validación o sanitización adecuada.

El archivo preview.php, ubicado en el directorio raíz del plugin, atrajo la atención de nuestros investigadores. Este script fue diseñado para recibir un parámetro GET llamado val. El análisis reveló la siguiente secuencia de operaciones:

  • Recepción de Datos: El script obtiene el valor del parámetro val directamente de la URL $_GET['val'].
  • Decodificación Insegura: El valor recibido es procesado por la función base64_decode(). Esta es una práctica común para ofuscar datos en tránsito, pero se convierte en un vector de ataque si la salida no es tratada correctamente.
  • Inyección Directa: El problema fundamental reside en que el resultado de la decodificación es impreso directamente en la respuesta HTML de la página, sin pasar por funciones de escape o sanitización como htmlspecialchars() o esc_attr().

El fragmento de código vulnerable, en esencia, operaba de la siguiente manera:

<!DOCTYPE html><html lang="en-US"><head><title></title><meta HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"></head><body>
<?php
echo urldecode(base64_decode($_GET['val']));

?>

</body></html>

Este código fuente toma un valor del parámetro val en la URL, lo decodifica de Base64 con base64_decode() y luego de formato URL con urldecode(). Finalmente, imprime el resultado directamente en la página con echo. Su vulnerabilidad es un Reflected Cross-Site Scripting (XSS) porque no sanitiza ni escapa la salida antes de mostrarla. Esto permite que un atacante envíe un payload de JavaScript codificado en la URL, el cual será decodificado y ejecutado en el navegador de la víctima, posibilitando el robo de cookies de sesión o la ejecución de acciones no deseadas.

Explotación

La validación práctica de la vulnerabilidad se realizó en un entorno de laboratorio controlado. Se configuró una instancia de WordPress con una versión vulnerable del plugin «My Reservation System» para replicar las condiciones del hallazgo y demostrar la explotación de manera segura.

El objetivo de la Prueba de Concepto (PoC) es lograr la ejecución de código JavaScript arbitrario en el contexto del navegador de la víctima. Para ello, se definió el siguiente payload:

<script>alert("testn4")</script>

Para que el script vulnerable procesara este payload a través de la función base64_decode(), fue necesario codificarlo en formato Base64, resultando en la siguiente cadena:

PHNjcmlwdD5hbGVydCgidGVzdG40Iik8L3NjcmlwdD4=

Este payload codificado se integró en el parámetro val del endpoint vulnerable, conformando el vector de ataque final. Al solicitar la siguiente URL, se activa la vulnerabilidad:

/wp-content/plugins/my-reservation-system/preview.php?val=PHNjcmlwdD5hbGVydCgidGVzdG40Iik8L3NjcmlwdD4=

Al procesar esta petición, el script preview.php decodifica el valor del parámetro val y lo refleja directamente en la respuesta HTML sin ninguna sanitización. Como resultado, el navegador de la víctima interpreta y ejecuta el payload de JavaScript inyectado, confirmando la existencia de la falla de Cross-Site Scripting Reflejado.

Proceso de reporte y divulgación responsable

Siguiendo un estricto protocolo de divulgación responsable, el equipo de NIVEL4 procedió a reportar el hallazgo para asegurar que la comunidad de usuarios fuera notificada y se pudieran tomar las medidas de mitigación correspondientes. La vulnerabilidad fue comunicada formalmente a WPScan (una entidad de Automattic/Jetpack), reconocida como una de las principales autoridades en materia de seguridad para el ecosistema de WordPress y que opera como CVE Numbering Authority (CNA).

Tras verificar la validez y el impacto del reporte, el equipo de WPScan asignó oficialmente el identificador CVE-2025-7022 para esta vulnerabilidad. Actualmente, este identificador ha sido remitido a MITRE Corporation y se encuentra en proceso de ser indexado en su base de datos global, donde se consolidarán los detalles técnicos para su consulta pública.

El proceso desde el descubrimiento hasta la publicación siguió una secuencia de eventos coordinada para garantizar una correcta gestión de la vulnerabilidad.

  • 2025-07-01: Descubrimiento de la vulnerabilidad de XSS Reflejado en el archivo preview.php durante la auditoría de seguridad del plugin «My Reservation System» por parte de los investigadores de NIVEL4.
  • 2025-07-02: Se elabora el informe técnico detallado, incluyendo la Prueba de Concepto (PoC), y se envía formalmente a WPScan para su análisis y validación.
  • 2025-07-04: El equipo de WPScan valida el reporte, confirma el hallazgo y procede a reservar y asignar el identificador CVE-2025-7022.
  • : Se publica este análisis técnico para la comunidad como parte del proceso de divulgación y se inicia la monitorización de la publicación final del CVE en las bases de datos públicas.

Conclusión

La investigación llevada a cabo por los consultores permitió identificar una vulnerabilidad de tipo Reflected Cross-Site Scripting (XSS) en el plugin de WordPress My Reservation System, registrada bajo el identificador CVE-2025-7022. A pesar de que el plugin no cuenta con una alta adopción, el hallazgo pone de manifiesto cómo errores de desarrollo pueden introducir riesgos significativos incluso en componentes de baja visibilidad dentro del ecosistema de WordPress.

Mediante un análisis técnico riguroso del código fuente y pruebas controladas, se demostró que la falta de validación y escape de los parámetros proporcionados por el usuario permite la ejecución de código malicioso en el navegador de las víctimas. Esta clase de vulnerabilidad representa un riesgo considerable en contextos donde el plugin se encuentra instalado en sitios con usuarios autenticados, particularmente con privilegios administrativos.

La divulgación responsable de este hallazgo reafirma el compromiso del equipo de NIVEL4 con la mejora continua de la seguridad en el desarrollo de software. Además, subraya la importancia de realizar auditorías periódicas, incluso en componentes de bajo perfil, para reducir la superficie de ataque y fortalecer la protección de los entornos web.