Cross-Site Scripting (XSS) reflejado en tema Enfold < 4.8.4 para WordPress

Estrenamos blog y qué mejor manera de hacerlo que publicando nuestro primer CVE como equipo de seguridad ofensiva. Se trata de un Cross-Site Scripting (XSS) reflejado en el tema Enfold para WordPress, un tema de pago cuyo uso se encuentra bastante extendido. Tras unos meses de intenso trabajo e intercambio de correos con el desarrollador del tema, se liberó el día 20 de julio la versión Enfold 4.8.4 en la que se soluciona la vulnerabilidad detectada. Finalmente, en el día de hoy pudimos obtener el identificador CVE-2021-24719 para ella: https://wpscan.com/vulnerability/a53e213f-6011-47f8-93e6-aa5ad30e857e.

Antes de comenzar con la entrada, me gustaría mencionar también a los compañeros del equipo de Seguridad Ofensiva de Grupo CIES – Alisec Francisco Díaz-Pache y Sergio Corral que, junto a mí (David Álvarez), participaron durante todo el proceso de descubrimiento, notificación y publicación de la vulnerabilidad. Además, tenemos en la recámara algunas otras vulnerabilidades que hemos descubierto y que trataremos de publicar en sucesivas entradas de este blog, así que ya sabéis… ¡¡permaneced atentos a él regularmente!!

En cuanto a la vulnerabilidad, lo primero que se debe tener en cuenta es que esta solo ocurre cuando se utiliza el tema Enfold junto al constructor de páginas y entradas Avia Page Builder para WordPress. Cuando ambas opciones (tema y constructor) se emplean simultáneamente, aparece la vulnerabilidad. Es sencillo encontrar cuándo estos dos elementos se utilizan en un sitio web mediante búsquedas de Google y el siguiente dork:

"inurl:avia-element-paging"

La vulnerabilidad reside en el modo en que el tema gestiona y crea los botones asociados a los números de cada página. Para estas tareas, el tema coge directamente la URL y sus parámetros asociados, además de añadirle el parámetro anteriormente comentado (avia-element-paging). Por lo tanto, se puede ver cómo en los botones asociados a los números de página aparecen reflejados todos los datos que se pasen en la URL. En la siguiente imagen se opta por incluir un texto sencillo (“ProofOfConcept”), que se refleja en los botones de control de paginación creados por el tema.

Vista la posibilidad de obtener en la respuesta los parámetros de entrada que se especifiquen en la URL, el último paso es aprovecharse de ello para que el código deseado sea ejecutado. Para ello, a pesar de que el tema Enfold realizaba en sus versiones vulnerables una serie de comprobaciones, eran sencillas de evadir mediante el siguiente payload:

?%2527%253E%253Cscript%253Eeval%2528atob%2528%2522Y29uc29sZS5sb2coZG9jdW1lbnQuY29va2llKQ%253D%253D%2522%2529%2529%253C%252Fscript%253E

A simple vista, puede parecer un payload lioso, pero si se decodifica en dos sencillos pasos, se puede ver que únicamente trata de imprimir el contenido de las cookies por consola:

Payload doblemente decodificado:

'><script>eval(atob("Y29uc29sZS5sb2coZG9jdW1lbnQuY29va2llKQ=="))</script>

Parámetro pasado a atob() decodificado de Base64:

console.log(document.cookie);

Con todo ello, haciendo uso del payload codificado se puede ejecutar código JavaScript en el contexto del navegador de la víctima, obteniendo así un Cross-Site Scripting (XSS) reflejado. En la siguiente imagen se ve el resultado que, como era de esperar, únicamente obtiene las cookies del sitio web (aquellas que no estén marcadas con el atributo HttpOnly para ser más exactos).

En esta entrada nos ceñimos a publicar la vulnerabilidad que hemos encontrado y que ha sido ya solucionada por el fabricante (dando además tiempo de sobra para que se actualizase el tema). Desde el punto de vista de un atacante, las posibilidades son mucho más amplias, ya que ejecutar código JavaScript puede permitirle llevar a cabo ataques más sofisticados como el secuestro de navegador o inyección de código malicioso (como un minador de Bitcoins en JavaScript por ejemplo). No obstante, esta vulnerabilidad sigue dependiendo de la ingeniería social en cierto modo, ya que el enlace con el payload debe ser enviado a la víctima para que esta lo abra.

Para finalizar, desde AsturHackers recomendamos actualizar el tema Enfold para WordPress a su última versión estable (a día de escritura de esta entrada 4.8.6.2), ya que desde la versión 4.8.4 la vulnerabilidad se encuentra resuelta. Además, recordar que hay que mantener la prudencia cuando nos lleguen enlaces sospechosos, aunque el dominio sea legítimo como puede ser este caso, ya que el atacante puede haber aprovechado una vulnerabilidad de este tipo para dejarnos su “regalito”.

~km0xu95