Vulnerabilidad XSS en Prontus CMS

Prontus es un administrador de contenidos web flexible, fácil de usar, robusto y eficiente, con una trayectoria de más de 12 años en el mercado y utilizado por cientos de clientes que lo han aplicado en sus portales corporativos, servicios editoriales y sitios web transaccionales.

Este CMS tiene una vulnerabilidad Cross-Site Scripting que afecta a la mayoría de sus clientes.
Cuando vas a desarrollar un CMS y esperar que muchos usuarios/clientes lo usen, hay que tener cuidado con la seguridad ya que cualquier fallo (bug) o vulnerabilidad puede afectar a todos los que lo utilizan.

Entre los sitios afectados por esta vulnerabilidad estan el sitio web del Senado de la República de Chile, y Fonasa, entre otros.

La vulnerabilidad afecta a todos los sitios creados con Prontus CMS que tengan activo/habilitado el archivo html “antialone.html”

En este archivo encontramos el siguiente codigo javascript:

if (makefs) {
    var ULT_LINK = new Array(); // Usado para volver a portada.
    page = page + '?' + Math.random();
    document.write('<frameset rows="122,1*" frameborder="NO" border="0" framespacing="0">');
    document.write('  <frame name="head" scrolling="NO" noresize src="/prontus_senado/site/edic/base/port/head.html" marginwidth="0" marginheight="0" frameborder="NO">');
    document.write('  <frame name="cont" src="' + page + '" marginwidth="0" marginheight="0">');
    document.write('</frameset>');
  };

Si se fijan, en la linea 6 crea un frame con src=page, y en la linea 3 page=page+?+Math.random(). Por lo tanto, si le pasamos la variable “page” por url con el contenido “javsript:algo…” el navegador lo debería interpretar.

El problema es que en la línea 3 le agrega “?numero aleatorio”, por lo que si le pasamos el valor “javascript:alert(1)” lo que cargara el frame será “javascript:alert(1)?45454554.0” lo que provocará un error de sintaxis y el navegador no hará nada.
Como el sistema no filtra ni escapa caracteres, lo que debemos hacer es hacer que todo lo que esté despues de lo que le queremos inyectar, sea un comentario, es decir: //.

No podemos poner directamente la url “https://www.algo.com” ya que en otro lado del javscript aparece un tipo de filtro que si encuentra “://” nos manda a la raíz del sitio:

 if (page.indexOf('://') >= 0) {
    if (page.indexOf(window.location.protocol + '//' + document.domain + '/') != 0) {
      makefs = false;
      document.location.pathname = '/';
    };
  };

Para explotar la vulnerabilidad usaré “javascript:alert(/XSS/);//“, de esta forma el valor de la variable page será “javascript:alert(/XSS/);//?45454554.0” dejando lo último como comentario.

Pruebas de Concepto:

Sitio web del Senado

Sitio web del Fondo Nacional de Salud (FONASA)

Universidad Catolica de Valparaiso

Los sitios afectados son:

https://www.mercuriovalpo.cl
https://www.estrellaiquique.cl
https://www.australvaldivia.cl
https://www.ucv.cl
https://www.estrellavalpo.cl
https://www.senador.cl
https://www.diariollanquihue.cl
https://www.lidersanantonio.cl
https://www.australtemuco.cl
https://www.diariolaestrella.cl
https://www.estrellaloa.cl
https://www.estrellaarica.cl
https://www.laestrellachiloe.cl
https://www.australlosrios.cl
https://mercuriocalama.cl
https://www.australosorno.cl
https://www.diarioatacama.cl
https://www.diarioaustral.cl
https://www.renacerdeangol.cl
https://www.fonasa.cl
https://www.mercurioantofagasta.cl
https://www.prensatocopilla.cl
https://www.ellanquihue.cl
https://www.elaustral.cl
https://www.hernanlarrain.cl
https://www.estrellanorte.cl

No se descarta que existan más sitios afectados.

Actualizado (12 de Julio del 2011):
La vulnerabilidad fue reportada y se está solucionando. Se informó que corresponde a una version antigua del sistema y que los clientes o usuarios afectados son quienes no han actualizado la version.

1 comentario

  1. Muchas gracias por el aviso. Excelente trabajo !

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.