Una vulnerabilidad de cross-site scripting (XSS) en el framework Krpano ha sido explotada para realizar una campaña masiva de spam manipulando los resultados de búsqueda.
Vulnerabilidad descubierta por Oleg Zaytsev
La vulnerabilidad fue descubierta por Oleg Zaytsev, investigador que encontró un anuncio de contenido pornográfico entre los resultados de búsqueda de Google cuya URL apuntaba a un subdominio del sitio web oficial de la Universidad de Yale.
La URL contenía un parámetro cuyo valor era otra URL de un sitio web legítimo, de la Asociación Scout de Reino Unido. El subdominio de esta segunda URL había sido secuestrado a través de una cuenta abandonada de Azure.
Explotación y mecanismo de la vulnerabilidad
Al peticionar a dicha URL, se obtiene un documento XML con una carga útil codificada en Base64. Al decodificar y ejecutarse, el anuncio se carga a un tercer sitio web legítimo.
La URL aparentemente legítima de la Universidad de Yale redirigía al contenido pornográfico. Si se elimina el parámetro xml, la redirección no ocurre y se accede al tour virtual.
Configuración del framework Krpano
Uno de los parámetros de configuración de los panoramas de Krpano es passQueryParameters, el cual permitía indicar si se permitía pasar parámetros de URL (query parameters) al visor panorámico.
Durante años, passQueryParameters estaba configurado por defecto a true, indicando que cualquier parámetro de la URL se pasará al visor. Sería a partir de la versión 1.20.10 de la librería que el valor por defecto se cambiaría a false.
Restricciones posteriores
Posteriormente, en la versión 1.22.4, se restringirían los valores de los parámetros que se permitiría pasar al visor: no se pasarán las URL que empiecen por data:// ni las URL externas.
Los valores del parámetro xml que se pasarán se restringen a aquellos dentro de la estructura de carpetas actual.
Campaña masiva y envenenamiento SEO
Usando técnicas de Google dorking, Zaytsev descubrió que éste no es el único caso de XSS que explota Krpano. Más de 350 sitios web han sido utilizados para realizar envenenamiento SEO (SEO poisoning) y distribuir spam y anuncios potencialmente maliciosos.
Los sitios afectados son muy populares y reciben millones de visitas al mes. Algunos de ellos mostraban distintos tipos de anuncios, no solo sobre pornografía, sino también sobre suplementos dietéticos, casinos en línea, sitios web de fake news, etc.
Impacto en sitios reconocidos
El sitio web del gobierno de Utah llegó a tener más de 100 resultados de spam indexados.
El sitio web de CNN no realizaba ninguna redirección, sino que utilizaba la estructura y estética del sitio web de la CNN para mostrar un artículo promocional sobre casinos, aprovechando la confianza de los usuarios.
Riesgos identificados
- Campaña masiva de spam manipulando los resultados de búsqueda.
- Envenenamiento SEO (SEO poisoning).
- Distribución de anuncios potencialmente maliciosos.
- Redirección a contenido no legítimo, como pornografía o sitios web de fake news.
- Falsificación de puntuaciones de reseñas y manipulación de resultados de búsqueda.
Mitigaciones recomendadas
- Actualizar todas las instancias de Krpano a la última versión.
- Configurar passQueryParameters a false (o indicar únicamente parámetros que no den lugar a la ejecución de código).
- Utilizar Google Search Console para identificar y eliminar las páginas infectadas de los resultados de búsqueda.