scripts habilite google enable deshabilitar desactivar como chrome abrir javascript security web-applications xss amazon-cloudfront

habilite - javascript en google



¿Por qué Cloudfront está cargando scripts en mi aplicación web?(No lo uso) (2)

Administro una aplicación web segura de PHP / MySQL con un amplio uso de jQuery. Hoy, un extraño error apareció en los registros de nuestra aplicación:

JS Error: Error loading script: https://d15gt9gwxw5wu0.cloudfront.net/js/_MY_WEB_APP_DOMAIN_/r.js

No estamos usando el CDN Cloudfront de Amazon en nuestra aplicación. Cuando voy a la URL que no se pudo cargar, estos son los únicos contenidos:

if(typeof _GPL.ri==''function''&&!_GPL.isIE6){_GPL.ri(''_GPL_r'')}_GPL.rl=true;

La cadena de agente de usuario del usuario es:

Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1

Tenga en cuenta : no soy el usuario que provocó este error. Fue uno de los miles de usuarios que lo activaron. No tengo control sobre la máquina cliente.

¿Alguien sabe lo que está pasando aquí? ¿Es esto algún tipo de ataque XSS?

** Actualización **

Parece que no soy el único que ha descubierto esta anomalía en su sitio web. Encontré este informe del mismo comportamiento exacto , que parece indicar que el código es inofensivo, pero aún no hay respuestas acerca de dónde provino.

Además, encontré este pastebin con código similar , que parece ser una especie de script publicitario. Una vez más, no es terriblemente útil.

** Actualización 2 **

Más contexto: la aplicación web utiliza varios complementos de jQuery de terceros, pero no analíticas de terceros de ningún tipo. Todos los scripts están alojados en nuestro propio servidor, y una auditoría de todo nuestro código no proporciona coincidencias para "cloudfront".

Esta aplicación ha estado en producción por aproximadamente 4 años, y esta es la primera y única instancia de cualquier actividad como esta. No ha sucedido antes ni después, por lo que dudo que pueda reproducirlo.

Lo que me interesa es si esto es algún tipo de ataque. Si es así, quiero saber cómo tapar el agujero que está intentando explotar si no está enchufado ya.


También encontré un iFrame en mi sitio web de drupal 7. Se cargó en el sitio habilitando el módulo de sharaholic.


Descargo de responsabilidad : no soy un analista / experto en seguridad, su problema simplemente despertó mi interés;)

Advertencia : si bien comparto la conclusión inicial de que el código en sí es probablemente inofensivo, la tecnología subyacente también puede (ab) usarse con propósitos maliciosos, así que tenga cuidado al investigar esto.

Análisis

Usted mismo ya encontró la evidencia relevante; al buscar más, encontré otra gota de pastebin , que es más legible, así que lo uso para la explicación (aunque a primera vista el otro también lo permitiría después del formateo).

El fragmento de código presenta fragmentos de JavaScript con la siguiente funcionalidad principal:

  • La línea 13 inicializa la variable _GPL con todo tipo de elementos para su uso posterior, por ejemplo, varias constantes, funciones de ayuda, compatibilidad con el navegador y cargas útiles reales, por ejemplo:

    • Line20 define un basdeCDN vacío, la línea 21 define un fCDN , que es el que está en cuestión ( d15gt9gwxw5wu0.cloudfront.net )

    • la línea 261 define una función removeScripts(), que a su vez usa findScript() de la línea 266, además de insertJS() en la línea 277; su intención respectiva es obvia

    • la línea 270 define la función loadDomainRules() , que parece ser la que genera la URL que ha encontrado en sus registros; consulte el apéndice a continuación para ver el fragmento de código

      • Deducción: incluso sin más pruebas recopiladas a continuación, la denominación y la funcionalidad sugieren que r.js es un archivo JavaScript que sirve JavaScript personalizado ensamblado / generado específicamente para el dominio en cuestión

    • la línea 100 define una función loadGeo() , que hace referencia a algún tipo de servidor de anuncios ( ads2srv.com ) - vea el apéndice a continuación para ver el fragmento de código

    • la línea 368 finalmente define una función i() , que proporciona las pistas más definidas con respecto al posible origen de todo esto, a saber, la noción de algunos clientes de Yontoo y API de Yontoo . Consulte el apéndice a continuación para ver el fragmento de código.

Corolario

¿De que trata todo esto?

Las pistas extraídas de Yontoo Client y Yontoo API conducen fácilmente a Yontoo , una plataforma de aplicaciones que le permite controlar los sitios web que visita todos los días , es decir, suena como una versión comercializada de Userscripts.org . Consulte ¿Qué es una aplicación de Yontoo? :

Yontoo es un complemento del navegador que personaliza y mejora el sitio web subyacente

¿Dónde puedo usarlo?

Yontoo funciona en cualquier sitio en la Web, aunque la funcionalidad proviene de aplicaciones separadas llamadas Yontoo Apps que proporcionan funcionalidades específicas según el sitio en el que se encuentre .

[énfasis mío]

Ahora, mirar las listas actuales en su App Market demuestra fácilmente por qué esto podría usarse para publicidad no transparente cuestionable , por ejemplo, a pesar de todos los signos de confianza y sellos en su pie de página.

¿Cómo terminó en tus registros?

Otra cita proporciona más información sobre la funcionalidad y cómo podría haber generado el problema que ha encontrado:

Yontoo [...] es un complemento del navegador que crea capas virtuales que se pueden editar para crear la apariencia de haber realizado cambios en el sitio web subyacente. [...] Si ve la necesidad de una aplicación o herramienta en un sitio web, ¡entonces es libre de crear!

Al parecer, alguien ha visitado su sitio y ha creado algunas reglas de dominio personalizadas por medio del cliente Yontoo (si realmente lo permite para usuarios finales) o una de las aplicaciones disponibles (el fragmento de código utilizado para el análisis hace referencia a la aplicación Ofertas desplegables en línea 379, por ejemplo), que activó la creación de d15gt9gwxw5wu0.cloudfront.net/js/_MY_WEB_APP_DOMAIN_/r.js para almacenar estas reglas para su reutilización en la próxima visita al sitio.

Debido a algún error de seguridad en alguna parte (vea la conclusión a continuación), esta URL o un fragmento de código JavaScript respectivo debe haber sido inyectado en el código JavaScript de su aplicación (por ejemplo, por medio de secuencias de comandos en sitios cruzados (XSS) ), y activó el error de entrada de registro en algún punto a su vez.

Conclusión

Como ya se mencionó por adelantado, comparto la conclusión inicial de que el código en sí mismo es probablemente inofensivo, aunque la tecnología subyacente se puede (ab) usar para propósitos maliciosos también debido a su naturaleza de burla con el JavaScript del lado del cliente, es decir, un usuario permite que el código de un servicio de terceros interactúe con los sitios (y especialmente con los datos) que utiliza y confía todos los días; su caso es la evidencia aparente de que algo salió mal en este sentido.

No he investigado la arquitectura de seguridad (si existe) de Yontoo, pero tampoco pude encontrar información sobre este tema importante en su sitio web (por ejemplo, en su sección de Support ), lo cual es bastante inaceptable para una tecnología como En mi humilde opinión, a pesar de todos los signos de confianza y sellos en su pie de página.

Por otro lado, los usuarios instalan scripts de terceros desde, por ejemplo, Userscripts.org todo el tiempo, por supuesto, no solo por el ajuste fino de la experiencia del usuario en Stack Exchange ;)

Por favor haga su propio juicio en consecuencia!

Apéndice

A continuación puede encontrar los fragmentos de código a los que se hace referencia en el análisis (no he podido incluirlos en las listas sin romper el diseño o el resaltado de sintaxis):

loadDomainRules ()

function () { if (location.host != "") { var a = location.host.replace(RegExp(/^www/./i), ""); this.insertJS(this.proto + this.fCDN + "/js/" + a + "/r.js") } this.loaded_domain_rules = true }

loadGeo ()

function () { var cid = this.items.e6a00.get("geo.cid"); var updatetime = this.items.e6a00.get("geo.updatetime"); if (!cid || (cid && updatetime && (Math.floor((new Date()).getTime() / 1000) - parseInt(updatetime)) >= 259200)) { this.insertJS(((this.proto == ''https://'') ? ''https://s.'' : ''http://'') + ''ads2srv.com/tb/gc.php?json&cb=_GPL.setGeoAndGo'') } else { this.vars.cid = this.items.e6a00.get("geo.cid"); this.vars.rid = this.items.e6a00.get("geo.rid"); this.vars.ccid = this.items.e6a00.get("geo.ccid"); this.vars.ip = this.items.e6a00.get("geo.ip"); this.loadCC(); this.loadDomainRules() } }

yo()

function () { if (typeof YontooClient != ''undefined'') YontooClient = {}; if (typeof yontooAPI != ''undefined'') yontooAPI = {}; if (typeof DealPlyConfig != ''undefined'') { DealPlyConfig.getBaseUrl = function () { return "https://d3lvr7yuk4uaui.cloudfront.net/items/blank.js?" }; DealPlyConfig.getCrownUrl = function () { return "https://d3lvr7yuk4uaui.cloudfront.net/items/blank.js?" } } this.rm(this.ri, [''dropdowndeals'', ''Y2LeftFixedCurtain'', ''gbdho'', ''bdca'', ''dealply-toast-1'', ''pricegong_offers_iframe'', ''SF_VISUAL_SEARCH'', ''batAdRight'', ''batAdBottom'', ''batAdMiddle_0'', ''batAdMiddleExt1_0'', ''batAdRight2'', ''invisiblehand-iframe'', ''scTopOfPageRefinementLinks'', ''sf_coupon_obj'']); this.rm(this.rc, [''yontoolayerwidget'', ''dealply-toast'', ''imb-ad'']); this.rm(this.ric, [ [''productbox'', ''g''], [''related-searches'', ''related-searches-bing''] ]); this.rm(this.rtn, [''MIVA_AdLink'', ''itxtrst'', ''kLink'', ''FAAdLink'', ''IL_AD'', ''skimwords-link'']) }