Editor WYSIWYG TinyMCE afectado por una vulnerabilidad XSS. 100 millones de sitios web afectados

Especialistas de un diplomado en seguridad informática reportan el hallazgo de una vulnerabilidad en la versión 5.2.1 de TinyMCE, el popular editor de texto What-You-See-Is-What-You-Get (WYSIWYG) para HTML de código abierto que funciona en JavaScript. Aunque esta es una herramienta presente en millones de sitios web alrededor del mundo, el impacto de esta vulnerabilidad no puede ser definido concretamente, pues depende de múltiples factores como el uso de los diferentes modos de edición, el control sobre el contenido inicial dentro del editor y las protecciones contra algunas variantes de ataque.

Identificada como CVE-2020-12648, La falla fue reportada por Chris Davis y George Steketee, de la firma de seguridad Bishop Fox Labs.

Según el reporte, las aplicaciones que usan el editor de texto TinyMCE y no implementan protecciones contra ataques de scripts entre sitios (XSS) pueden estar especialmente expuestos a esta vulnerabilidad. La explotación exitosa de esta falla permitiría la extracción de información confidencial, ataques de escalada de privilegios, compromiso de cuentas de administrador, entre otros riesgos.

La falla reside en los proceso de eliminación y desinfección de TinyMCE, pues los hackers pueden eludir algunas protecciones para desplegar un ataque XSS y ejecutar código JavaScript arbitrario (este código se ejecuta en el contexto de la aplicación donde se carga TinyMCE.

Al implementar el modo de edición clásico, la lógica de eliminación y desinfección en TinyMCE puede ser omitida empleando etiquetas HTML anidadas y no determinadas, lo que permitiría a los actores de amenazas inyectar una etiqueta <img> con valores src y onerror arbitrarios, lo que resulta en el ataque XSS, mencionan los especialistas del diplomado en seguridad informática.

Para demostrar la vulnerabilidad, los investigadores crearon una página HTML con una instancia del editor TinyMCE basada en la Guía de Inicio Rápido oficial de TinyMCE. El resultado se muestra a continuación:

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js" referrerpolicy="origin"></script>
  <script>
    tinymce.init({
      mode: "textareas"
    }); 
  </script>
 </head>
 <body>
 <h1>TinyMCE Quick Start Guide</h1>
  <form method="post">
    <textarea name="mytextarea" index="mytextarea">
          <?php echo htmlspecialchars($_POST['mytextarea']) ?>
    </textarea>
    <input type="submit" value="submit">
  </form>
 </body>
</html>

En este ejemplo se usó PHP para proporcionar contenido controlado por el usuario a TinyMCE para su procesamiento al cargar la página. La carga útil también podría suministrarse directamente a través de otras dos funciones de TinyMCE (setContent e insertContent). El ataque XSS es conseguido con éxito al emplear la siguiente carga útil:

<iframe><textarea></iframe><img src="" onerror="alert(document.domain)">


Un ejemplo de solicitud empleada para conseguir esto se muestra a continuación:

POST /tinymce.php HTTP/1.1
Host: localhost:8000
…omitted for brevity…

mytextarea=<iframe><textarea></iframe><img src="" onerror="alert(document.domain)">

Después de que se cargó la página, la carga útil se ejecuta:

De este modo, los especialistas del diplomado en seguridad informática demuestran que el riesgo de explotación real, por lo que recomiendan a los administradores de implementaciones afectadas actualizar a la brevedad. Las más recientes versiones de la aplicación son 4.9.11 y 5.4.1, lanzadas el 8 de julio de 2020.