Skip to main content
Blog
Blog Attacks

Sitios web gubernamentales y universitarios atacados en ataque del lado del cliente de ScriptAPI[.]dev

Ayer descubrimos otro ataque de JavaScript del lado del cliente dirigido a más de 500 sitios web, incluyendo gobiernos y universidades. Los scripts inyectados crean enlaces ocultos en el Modelo de Objetos del Documento (DOM), apuntando a sitios web externos, una interfaz de programación para documentos web.

Jan 21, 2025 5 min read
new-client-side-attack-image-cover

Resumen: inyección SEO black hat de enlaces ocultos en dominios .gov y .edu

  • No es robo de pagos: Todo el mundo enmarca los ataques del lado del cliente como robo de pagos. Este utilizó como arma la confianza de gobiernos y universidades para el posicionamiento en buscadores, lo cual es peor, porque nadie en seguridad prioriza un incidente que solo perjudica la posición en Google de un competidor turco de apuestas.
  • 500+ sitios afectados: Más de 500 sitios web contenían la inyección de scriptapi[.]dev, que usaba insertAdjacentHTML para ocultar enlaces de spam de apuestas y contenido para adultos mediante CSS inline, y ningún threat feed de VirusTotal marcó el dominio. Nuestro directorio de dominios detectó scriptapi[.]dev el 20 de enero de 2025, antes que cualquier proveedor.
  • Audita tu CMS ya: Si tu CMS combina WordPress, ASP.NET, vBulletin, CodeIgniter o 1C-Bitrix y no has auditado el JS de terceros en páginas de alta autoridad, hazlo esta semana. Los buscadores indexan lo que contiene el DOM, no lo que dice la plantilla de tu CMS.

¿Poco tiempo? Consulta el bloqueo de Magecart y skimmers en el navegador de cside. Cubre todo lo de abajo en un solo despliegue.

Ayer descubrimos otro ataque de JavaScript del lado del cliente dirigido a más de 500 sitios web, incluyendo gobiernos y universidades. Los scripts inyectados crean enlaces ocultos, apuntando a sitios web externos, dentro del Modelo de Objetos del Documento (DOM), la interfaz de programación para documentos web.

Hasta el momento, ningún threat feed ha detectado este ataque.

Creemos que se trata de una campaña de Optimización para Motores de Búsqueda (SEO) de sombrero negro. Los scripts inyectados crean enlaces ocultos que apuntan a sitios web externos. Estos enlaces están estilizados para ser invisibles a los usuarios mediante CSS:

style="overflow: auto; position: absolute; height: 0pt; width: 0pt;"

Enlaces de spam SEO ocultos inyectados en el sitio gubernamental de tráfico de Bahamas

Enlaces de spam SEO ocultos inyectados en el sitio web de la universidad SZABIST

Los scripts maliciosos están alojados en scriptapi[.]dev. Encontramos múltiples variantes del mismo script, alojadas en el mismo dominio:

  • scriptapi[.]dev/api/smacr[.]js
  • scriptapi[.]dev/api/en[.]tlu[.]js
  • scriptapi[.]dev/api/sie[.]tlu[.]js
  • scriptapi[.]dev/api/ppymca[.]js
  • scriptapi[.]dev/api/pbsgc[.]js
  • scriptapi[.]dev/api/adventum[.]js
  • scriptapi[.]dev/api/harvardpress[.]js
  • scriptapi[.]dev/api/krachelart[.]js
  • scriptapi[.]dev/api/malagaadventures[.]js

Nuestro directorio de dominios identificó el dominio malicioso el 20 de enero de 2025.

Entrada del directorio de dominios de cside para el malicioso scriptapi.dev

El mecanismo del script:

  1. Recuperar la etiqueta del script: Usando document.currentScript, el script malicioso identifica su ubicación en el DOM.
  2. Inyectar enlaces ocultos: Utiliza el método insertAdjacentHTML('beforebegin', linksHTML) para insertar los enlaces antes de la etiqueta del script en el DOM.

Una captura de pantalla tomada de un sitio web afectado, que muestra múltiples dominios ocultos visualmente:

Fragmento de código de la inyección de scriptapi.dev que oculta enlaces de spam en el DOM

const linksHTML = `
<div style="text-align: center; display: table-column">
<a href="https://fullfilmizle[.]net/" title="full film izle">full film izle</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://myremedyproducts[.]com" title="myremedyproducts[.]com">myremedyproducts[.]com</a>
<a href="https://albalondres[.]com" title="albalondres[.]com">albalondres[.]com</a>
<a href="https://kineticartstucson[.]com" title="kineticartstucson[.]com">kineticartstucson[.]com</a>
<a href="https://stolenbeauty[.]org" title="stolenbeauty[.]org">stolenbeauty[.]org</a>
<a href="https://www.bilgihocasi[.]com" title="www.bilgihocasi[.]com">www.bilgihocasi[.]com</a>
<a href="https://joinoilfield[.]com" title="joinoilfield[.]com">joinoilfield[.]com</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://betswot[.]com" title="starzbet">starzbet</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://alanyasmmm[.]com/" rel="dofollow">alanya escort</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://nevizadecafe[.]com/" title="deneme bonusu">deneme bonusu</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://alansh[.]com" title="tlcasino">tlcasino</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://pmtips[.]net/">crackstreams</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="http://lasip[.]net/" title="antalya escort bayan">antalya escort bayan</a>
<a href="http://www.niceescorts[.]com/" title="antalya escort">antalya escort</a>
<a href="https://www.shushescort[.]com/" title="istanbul escort bayan">istanbul escort bayan</a>
<a href="https://servissirinevler[.]com/" title="şirinevler escort bayan">şirinevler escort bayan</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://www.umraniyeti[p.]net/anadolu-yakasi/kadikoy-escort/">escort kadıköy</a>
<a href="http://www.doescorts[.]com/">www.doescorts[.]com</a>
<a href="http://www.umraniyeescorts[.]com/">ümraniye escort bayanlar</a>
<a href="http://www.maltepeescort[.]com/">escort maltepe</a>
<a href="https://pendikroyal[.]com/">pendik escort</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://www.xxxpornxxx[.]net/video/12776/nunziato-xxx-porn/" title="nunziato xxx porn">nunziato xxx porn</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://www.ipsnews[.]net/">streameast</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://yatirimbonusu[.]com/" title="deneme bonusu veren siteler">deneme bonusu veren siteler</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://justgpu[.]com/" title="deneme bonusu veren siteler">deneme bonusu veren siteler</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://sojienergy[.]com/" title="deneme bonusu veren siteler">deneme bonusu veren siteler</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://romabet.online" target="_blank" title="romabet giriş">romabet giriş</a>
<a href="https://betgargirisyap[.]com" target="_blank" title="betgar giriş">betgar giriş</a>
<a href="https://romabetgiris3[.]com" target="_blank" title="romabet giriş">romabet giriş</a>
<a href="https://roketbetgirisyap[.]com" target="_blank" title="roketbet giriş">roketbet giriş</a>
<a href="https://roketbet[.]net" target="_blank" title="roketbet giriş">roketbet giriş</a>
<a href="https://roketbetgiris[.]com" target="_blank" title="roketbet giriş">roketbet giriş</a>
<a href="https://ligobetbahis[.]com/" target="_blank" title="ligobet giriş">ligobet giriş</a>
<a href="http://ligobet1[.]net" target="_blank" title="ligobet giriş">ligobet giriş</a>
<a href="https://ligobetgiris[.]org/" target="_blank" title="ligobet giriş">ligobet giriş</a>
<a href="https://ligobetgirisi[.]com/" target="_blank" title="ligobet giriş">ligobet giriş</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://denemebonususiteleri[.]net/" title="deneme bonusu veren siteler">deneme bonusu veren siteler</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://princearthurherald[.]com/" title="deneme bonusu veren siteler">deneme bonusu veren siteler</a>
<a href="https://westpasco[.]com/" title="deneme bonusu veren siteler">deneme bonusu veren siteler</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://www.airstreamofchicago[.]com/" title="casino siteleri">casino siteleri</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://chrisspielman[.]com/" title="deneme bonusu" target="_blank">deneme bonusu</a>
<a href="https://www.bestwesterndesignerinn[.]com/" title="deneme bonusu veren siteler" target="_blank">deneme bonusu veren siteler</a>
<a href="https://www.catch25li[.]com/" title="Canlı casino siteleri" target="_blank">Canlı casino siteleri</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="http://1xbetm[.]info/" title="1xbet giriş">1xbet giriş</a>
<a href="https://xslotx[.]com/trx/" title="xslot giriş">xslot giriş</a>
<a href="https://zbahisz[.]com/zb/" title="zbahis">zbahis</a>
<a href="https://betturkeygiris[.]org/tur/" title="betturkey giriş">betturkey giriş</a>
<a href="https://www.trbetr[.]com/" title="trbet">trbet</a>
<a href="https://www.wiibet[.]com/tr10/" title="betist">betist</a>
<a href="https://babilonbeto[.]com/" title="babilonbet">babilonbet</a>
<a href="https://betrollere[.]com/" title="betroller">betroller</a>
<a href="https://bahisbudurtr[.]com/" title="bahisbudur">bahisbudur</a>
<a href="https://www.bahiscom[.]info/tr/" title="bahis[.]com">bahis[.]com</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://siliconvalleywineries[.]com/" title="deneme bonusu veren siteler" target="_blank">deneme bonusu veren siteler</a>
<a href="https://tapoutdrinks[.]com/" title="casino siteleri" target="_blank">casino siteleri</a>
<a href="https://www.qujapan1635[.]com/" title="bahis siteleri" target="_blank">bahis siteleri</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://buy.fans/" title="buy.fans">buy.fans</a>
</div>
<div style="overflow: auto; position: absolute; height: 0pt; width: 0pt;">
<a href="https://mobilbahisgir[.]net/" title="mobilbahis">mobilbahis</a>
<a href="https://rokubetgir[.]com/" title="rokubet">rokubet</a>
</div>
`;
const scriptTag = document.currentScript;
scriptTag.insertAdjacentHTML('beforebegin', linksHTML);

El objetivo de este ataque

Estos enlaces invisibles son indexados por los motores de búsqueda. Estos motores de búsqueda detectan los enlaces en sitios web de buena reputación y les atribuyen valor SEO. Estos enlaces están ocultos, por lo que no interrumpen la experiencia del usuario ni son detectados fácilmente por los propietarios del sitio web.

Enfoques como este suelen llamarse técnicas de SEO de sombrero negro.

Encontramos más de 500 sitios web afectados por esta campaña, incluyendo importantes dominios gubernamentales y universitarios. Los sitios afectados utilizaban una amplia variedad de frameworks, lo que indica el amplio alcance del ataque:

  • WordPress 6.7.1
  • MS ASP.NET
  • vBulletin
  • PHP CodeIgniter
  • 1C-Bitrix

La mayoría de estos sitios web son públicos aquí:

https://publicwww.com/websites/scriptapi.dev/ https://urlscan.io/search/#scriptapi.dev

Implicaciones más amplias

Este ataque pone de relieve el creciente riesgo de ataques a la cadena de suministro en el desarrollo web. Los scripts de terceros suelen ser un punto débil debido a su acceso directo al DOM. Esto les permite realizar prácticamente cualquier acción en el navegador del usuario, el punto final de la cadena de suministro web.

Mitigación y protección

Como primer paso, actualiza tus plugins de WordPress, evalúa su uso y elimina los que no utilices. Encuentra el malware y elimínalo. Los atacantes dejan una puerta trasera la mayoría de las veces. Encuéntrala y elimínala.

cside puede detectar, alertar y bloquear ataques del lado del cliente como este gracias a nuestro motor de detección avanzado y a nuestro motor de análisis.

Si no eres cliente de cside, estos son otros pasos que puedes tomar:

  1. Implementar una Política de Seguridad de Contenido (CSP): Restringe la inclusión de scripts de terceros a dominios de confianza.
  2. Usar Integridad de Subrecursos (SRI): Valida la integridad de los scripts alojados externamente comparando hashes.
  3. Monitorizar los cambios en el DOM: Usa herramientas o scripts para detectar modificaciones no autorizadas del DOM, especialmente la inyección de elementos ocultos.
  4. Auditar regularmente los scripts de terceros: Revisa periódicamente las dependencias y asegúrate de que no se hayan realizado cambios no autorizados.
  5. Usar Firewalls de Aplicaciones Web (WAF): Protege tu sitio web del tráfico sospechoso y de las inclusiones de scripts no autorizadas.

Empieza gratis hoy o contáctanos para mitigar riesgos

Himanshu Anand
Software Engineer

I'm a software engineer and security analyst.

FAQ

Frequently Asked Questions

Un script inyectado desde scriptapi.dev añadía enlaces ocultos estilizados con CSS en páginas de gobiernos y universidades para manipular el posicionamiento en buscadores, una campaña de SEO black-hat ejecutada del lado del cliente sobre dominios .gov y .edu de confianza.

Los escáneres estáticos no ven las inyecciones en tiempo de ejecución. La monitorización del lado del cliente, como la de cside, vigila el DOM y avisa de nuevas fuentes de script o bloques de enlaces ocultos en el momento en que aparecen en la página.

Monitoriza y protege tus scripts de terceros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Empieza gratis o prueba Business con una versión de prueba de 14 días.

Interfaz del panel de cside que muestra la monitorización de scripts y el análisis de seguridad
Related Articles
Reservar una demo

¿Quieres verlo en detalle con un ingeniero?

Treinta minutos, sobre tu propio sitio. Nada de diapositivas.

Te enseñaremos:

Qué scripts de terceros se están ejecutando ahora mismo en tu sitio
En qué punto estás con los requisitos 6.4.3 y 11.6.1 de PCI DSS
Qué parte de tu tráfico son bots y agentes de IA

¿Prefieres mandarnos una pregunta?

Buscando huecos libres…

Solo humanos de verdad. Nos daríamos cuenta.

¿Problemas para reservar? Abrir el calendario en una pestaña nueva

¿Qué quieres resolver?

Cuéntanoslo en una línea y te responderemos con algo útil, no con un discurso genérico.

Solemos ayudar con:

Ver qué scripts de terceros se ejecutan en tu sitio
Evidencias para PCI DSS 6.4.3 y 11.6.1
Bots, agentes de IA y robo de cuentas

¿Prefieres reservar una hora? Elegir un hueco