{"id":104,"date":"2026-01-13T00:00:00","date_gmt":"2026-01-12T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/es\/malware-cloaking-googlebot-verificacion-ip-wordpress\/"},"modified":"2026-01-20T06:32:43","modified_gmt":"2026-01-20T05:32:43","slug":"malware-cloaking-googlebot-verificacion-ip-wordpress","status":"publish","type":"post","link":"https:\/\/helloblog.io\/es\/malware-cloaking-googlebot-verificacion-ip-wordpress\/","title":{"rendered":"Malware que \u201csaluda\u201d a Googlebot: cloaking avanzado en WordPress con verificaci\u00f3n real de IP"},"content":{"rendered":"\n<p>En seguridad web ya no basta con buscar redirecciones descaradas o un <code>eval()<\/code> perdido. Cada vez vemos m\u00e1s campa\u00f1as que juegan a ser invisibles: el sitio carga perfecto para humanos (y para el propietario), pero entrega contenido distinto a los rastreadores. El objetivo suele ser SEO spam, robo de reputaci\u00f3n o indexaci\u00f3n de p\u00e1ginas que en realidad no existen para el usuario normal.<\/p>\n\n\n\n<p>En una investigaci\u00f3n reciente se observ\u00f3 una variante especialmente cuidada: el malware no se conformaba con mirar el <code>User-Agent<\/code>. Validaba que la visita ven\u00eda <em>de verdad<\/em> desde la infraestructura de Google usando rangos de IP asociados a su ASN (Autonomous System Number) en formato CIDR, con comprobaciones bit a bit, incluyendo soporte s\u00f3lido para IPv6.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1360\" height=\"636\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/IP-Verified-Conditional-Logic.png\" alt=\"Diagrama de l\u00f3gica condicional con verificaci\u00f3n de IP para identificar a Googlebot\" class=\"wp-image-96\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/IP-Verified-Conditional-Logic.png 1360w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/IP-Verified-Conditional-Logic-300x140.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/IP-Verified-Conditional-Logic-1024x479.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/IP-Verified-Conditional-Logic-768x359.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/IP-Verified-Conditional-Logic-400x187.png 400w\" sizes=\"auto, (max-width: 1360px) 100vw, 1360px\" \/><figcaption class=\"wp-element-caption\">El malware decide qu\u00e9 contenido servir seg\u00fan User-Agent e IP verificada. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">El patr\u00f3n: index.php como portero del sitio<\/h2>\n\n\n\n<p>El hallazgo clave fue una modificaci\u00f3n en el <code>index.php<\/code> principal de WordPress. Ese archivo, que normalmente act\u00faa como entrada y termina cargando el flujo est\u00e1ndar (<code>wp-blog-header.php<\/code>), fue alterado para tomar una decisi\u00f3n antes de que WordPress hiciera su trabajo: o bien arrancaba WordPress con normalidad, o bien inyectaba contenido remoto de terceros.<\/p>\n\n\n\n<p>Esta t\u00e1ctica tiene una ventaja para el atacante: si el propietario revisa el frontend \u201ca mano\u201d, puede no ver nada. El contenido malicioso se reserva para ciertos visitantes (rastreadores y herramientas de Google), por lo que el incidente puede vivir m\u00e1s tiempo sin levantar sospechas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1270\" height=\"936\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/What-Google-sees.png\" alt=\"Comparativa de c\u00f3mo ve Google contenido spam mientras el usuario ve el sitio leg\u00edtimo\" class=\"wp-image-97\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/What-Google-sees.png 1270w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/What-Google-sees-300x221.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/What-Google-sees-1024x755.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/What-Google-sees-768x566.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/What-Google-sees-400x295.png 400w\" sizes=\"auto, (max-width: 1270px) 100vw, 1270px\" \/><figcaption class=\"wp-element-caption\">Ejemplo de discrepancia entre lo que indexa Google y lo que ve un visitante normal. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 hace diferente a este cloaking: verificaci\u00f3n real por ASN + CIDR<\/h2>\n\n\n\n<p>El cloaking (mostrar contenido distinto seg\u00fan el visitante) no es nuevo. Lo llamativo aqu\u00ed es el nivel de verificaci\u00f3n: en vez de fiarse del <code>HTTP_USER_AGENT<\/code> (f\u00e1cil de falsear), el script inclu\u00eda una lista extensa, hardcodeada, de rangos de IP de Google asociados a su ASN y definidos en CIDR. As\u00ed, aunque alguien intente hacerse pasar por Googlebot, si su IP no cae dentro de esos bloques, no recibe el payload.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 es un ASN en este contexto<\/h3>\n\n\n\n<p>Un ASN (Autonomous System Number) identifica una red en Internet: un conjunto de rangos IP operados por una entidad. Cuando el tr\u00e1fico entra desde rangos asociados al ASN de Google, es una se\u00f1al fuerte de que la petici\u00f3n viene de infraestructura leg\u00edtima de Google (Search, verificaci\u00f3n, herramientas, etc.), no de un bot cualquiera con <code>User-Agent<\/code> falso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 es CIDR y por qu\u00e9 se usa<\/h3>\n\n\n\n<p>CIDR es una notaci\u00f3n compacta para describir bloques de IP. En lugar de enumerar miles de direcciones, defines una red con un prefijo, por ejemplo <code>192.168.1.0\/24<\/code>, que cubre un rango completo. Para filtrados y validaciones automatizadas es muy pr\u00e1ctico, y en manos del atacante permite montar reglas \u201cprecisas\u201d y dif\u00edciles de detectar a simple vista.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1332\" height=\"620\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/CIDR-format.png\" alt=\"Ejemplo visual de notaci\u00f3n CIDR y rango de direcciones\" class=\"wp-image-98\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/CIDR-format.png 1332w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/CIDR-format-300x140.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/CIDR-format-1024x477.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/CIDR-format-768x357.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/CIDR-format-400x186.png 400w\" sizes=\"auto, (max-width: 1332px) 100vw, 1332px\" \/><figcaption class=\"wp-element-caption\">La notaci\u00f3n CIDR permite describir rangos completos de IP de forma compacta. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Impacto real: es un problema de SEO y reputaci\u00f3n (y de detecci\u00f3n)<\/h2>\n\n\n\n<p>En este tipo de infecci\u00f3n, el da\u00f1o principal suele concentrarse en el posicionamiento y la reputaci\u00f3n del dominio. Si Google rastrea e indexa contenido spam o manipulado que los usuarios no ven, el sitio puede acabar con se\u00f1ales de spam, p\u00e9rdida de confianza, y en el peor caso con desindexaci\u00f3n o bloqueos. Adem\u00e1s, como el propietario ve el sitio \u201cnormal\u201d, el tiempo hasta detectarlo se alarga.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Se\u00f1ales que suelen delatarlo<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Resultados extra\u00f1os en Google (t\u00edtulos, snippets o URLs que no te suenan).<\/li>\n\n\n<li>Archivos modificados recientemente sin un despliegue planificado (especialmente <code>index.php<\/code>).<\/li>\n\n\n<li>URLs o dominios sospechosos en el c\u00f3digo o en logs (peticiones salientes inesperadas).<\/li>\n\n\n<li>Registros (logs) con redirecciones o comportamientos an\u00f3malos solo para ciertos User-Agents.<\/li>\n\n<\/ul>\n\n\n\n<div class=\"wp-block-group callout callout-warning is-style-warning is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Indicador concreto observado<\/h4>\n\n\n<p>En el caso analizado se us\u00f3 un dominio remoto para cargar el contenido: <code>amp-samaresmanor[.]pages[.]dev<\/code>. Seg\u00fan el reporte, estaba bloqueado por algunos vendors en VirusTotal y se identificaron varios sitios afectados.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo funciona por dentro: 5 piezas t\u00edpicas del \u201ccrawlers-only payload\u201d<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Verificaci\u00f3n en capas: User-Agent primero, IP despu\u00e9s<\/h3>\n\n\n\n<p>El flujo empieza como muchas campa\u00f1as: b\u00fasqueda de patrones en <code>HTTP_USER_AGENT<\/code> para detectar Googlebot y otras cadenas relacionadas con herramientas de Google (inspecci\u00f3n, verificaci\u00f3n, crawlers de API, etc.). La diferencia es que esto solo es el primer filtro: despu\u00e9s llega la validaci\u00f3n fuerte por IP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1880\" height=\"498\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification.png\" alt=\"Esquema de verificaci\u00f3n de identidad por User-Agent e IP\" class=\"wp-image-99\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification.png 1880w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification-300x79.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification-1024x271.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification-768x203.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification-1536x407.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Multi-Layer-Identity-Verification-400x106.png 400w\" sizes=\"auto, (max-width: 1880px) 100vw, 1880px\" \/><figcaption class=\"wp-element-caption\">Primero filtra por User-Agent; luego valida el origen por IP para evitar spoofing. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2) Validaci\u00f3n de rangos con operaciones bit a bit<\/h3>\n\n\n\n<p>Para confirmar que una IP pertenece a un bloque CIDR, el script aplicaba operaciones bitwise (AND con la m\u00e1scara) en vez de comparaciones de texto. Es una forma cl\u00e1sica y eficiente de comprobar pertenencia a red, pero no es habitual verla integrada de forma tan extensa en scripts de cloaking, y menos a\u00fan con soporte cuidado para IPv6.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ L\u00f3gica t\u00edpica de pertenencia a red para IPv4\n\/\/ (ip &amp; mask) == (network &amp; mask)\nif ( ($ip_decimal &amp; $netmask_decimal) == ($range_decimal &amp; $netmask_decimal) ) {\n    \/\/ IP dentro del rango\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\">\/\/ L\u00f3gica t\u00edpica de pertenencia a red para IPv4<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ (ip &#x26; mask) == (network &#x26; mask)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">if<\/span><span style=\"color:#E1E4E8\"> ( ($ip_decimal <\/span><span style=\"color:#F97583\">&#x26;<\/span><span style=\"color:#E1E4E8\"> $netmask_decimal) <\/span><span style=\"color:#F97583\">==<\/span><span style=\"color:#E1E4E8\"> ($range_decimal <\/span><span style=\"color:#F97583\">&#x26;<\/span><span style=\"color:#E1E4E8\"> $netmask_decimal) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">    \/\/ IP dentro del rango<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1420\" height=\"734\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Bitwise-IP-Range-Validation.png\" alt=\"Diagrama de validaci\u00f3n bit a bit de IP contra rangos CIDR\" class=\"wp-image-100\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Bitwise-IP-Range-Validation.png 1420w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Bitwise-IP-Range-Validation-300x155.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Bitwise-IP-Range-Validation-1024x529.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Bitwise-IP-Range-Validation-768x397.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Bitwise-IP-Range-Validation-400x207.png 400w\" sizes=\"auto, (max-width: 1420px) 100vw, 1420px\" \/><figcaption class=\"wp-element-caption\">Comprobaci\u00f3n matem\u00e1tica para asegurar que la IP cae dentro del bloque esperado. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3) Carga del payload remoto con cURL e inyecci\u00f3n directa<\/h3>\n\n\n\n<p>Una vez que el visitante \u201cpasa\u201d como bot leg\u00edtimo, el malware usa <code>cURL<\/code> para descargar contenido desde un endpoint externo y lo imprime directamente en la respuesta. A ojos del crawler, ese contenido parece servirlo tu dominio, aunque realmente est\u00e9 alojado fuera.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ El reporte menciona carga remota desde:\n\/\/ hxxps:\/\/amp-samaresmanor[.]pages[.]dev\n\/\/ (dominio ofuscado aqu\u00ed por seguridad)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\">\/\/ El reporte menciona carga remota desde:<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ hxxps:\/\/amp-samaresmanor[.]pages[.]dev<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ (dominio ofuscado aqu\u00ed por seguridad)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1444\" height=\"836\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Remote-Payload-Execution-via-cURL.png\" alt=\"Flujo de ejecuci\u00f3n remota del payload v\u00eda cURL\" class=\"wp-image-101\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Remote-Payload-Execution-via-cURL.png 1444w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Remote-Payload-Execution-via-cURL-300x174.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Remote-Payload-Execution-via-cURL-1024x593.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Remote-Payload-Execution-via-cURL-768x445.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Remote-Payload-Execution-via-cURL-400x232.png 400w\" sizes=\"auto, (max-width: 1444px) 100vw, 1444px\" \/><figcaption class=\"wp-element-caption\">El contenido remoto se recupera y se sirve como si fuera parte de la web. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">4) Filtrado amplio de User-Agents relacionados con Google<\/h3>\n\n\n\n<p>No se limitaba a detectar el <code>User-Agent<\/code> de \u201cGooglebot\u201d. Inclu\u00eda cadenas asociadas a verificaci\u00f3n y herramientas de inspecci\u00f3n para maximizar la probabilidad de que el contenido spam se rastree, se valide y acabe index\u00e1ndose.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1682\" height=\"554\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering.png\" alt=\"Captura de filtrado por User-Agent con m\u00faltiples cadenas relacionadas con Google\" class=\"wp-image-102\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering.png 1682w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering-300x99.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering-1024x337.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering-768x253.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering-1536x506.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/User-Agent-Filtering-400x132.png 400w\" sizes=\"auto, (max-width: 1682px) 100vw, 1682px\" \/><figcaption class=\"wp-element-caption\">El script contempla varias firmas de Google para aumentar cobertura del ataque. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">5) L\u00f3gica condicional con logging y \u201cplan B\u201d para no romper el rastreo<\/h3>\n\n\n\n<p>La parte m\u00e1s reveladora es la l\u00f3gica de decisi\u00f3n y el manejo de errores. Si el bot es leg\u00edtimo pero el payload remoto falla, el script redirige (por ejemplo a <code>\/home\/<\/code>) para no ense\u00f1ar una p\u00e1gina rota a Google. Si alguien intenta suplantar a Googlebot con <code>User-Agent<\/code> falso, registra un evento tipo \u201cFake GoogleBot detected\u201d y redirige al contenido normal. Y para usuarios est\u00e1ndar, muestra el sitio limpio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1694\" height=\"680\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging.png\" alt=\"Diagrama de l\u00f3gica condicional y registro de errores en el malware\" class=\"wp-image-103\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging.png 1694w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging-300x120.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging-1024x411.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging-768x308.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging-1536x617.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/5\/2026\/01\/Conditional-Logic-and-Error-Logging-400x161.png 400w\" sizes=\"auto, (max-width: 1694px) 100vw, 1694px\" \/><figcaption class=\"wp-element-caption\">Decisiones: bot real, bot falso o usuario normal; con fallback para evitar se\u00f1ales de error. \u2014 <em>Forr\u00e1s: Sucuri Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Por qu\u00e9 tocar archivos core de WordPress es tan efectivo<\/h2>\n\n\n\n<p>Modificar un archivo core como <code>index.php<\/code> es una jugada potente porque intercepta el flujo antes de que WordPress renderice nada. En el caso descrito, el c\u00f3digo malicioso todav\u00eda pod\u00eda \u201carrancar\u201d WordPress cuando le interesaba usando <code>require_once __DIR__ . '\/wp-load.php'<\/code>, que inicializa el entorno (configuraci\u00f3n y acceso a base de datos). Y cuando quer\u00eda comportamiento normal, dejaba que el proceso siguiera hasta <code>wp-blog-header.php<\/code> como har\u00eda un <code>index.php<\/code> leg\u00edtimo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Remediaci\u00f3n: c\u00f3mo abordar un caso as\u00ed sin perderte<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>A\u00edsla y revisa cambios en archivos core: compara <code>index.php<\/code> y otros ficheros con versiones limpias (mismo WordPress).<\/li>\n\n\n<li>Elimina archivos\/directorios no reconocidos por ti o tu equipo. Si no sabes para qu\u00e9 est\u00e1, tr\u00e1talo como sospechoso hasta verificarlo.<\/li>\n\n\n<li>Audita usuarios: busca administradores inesperados (cuentas \u201cde soporte\u201d o creadas recientemente sin control).<\/li>\n\n\n<li>Resetea credenciales: WordPress (admins), FTP\/SFTP, panel de hosting y base de datos.<\/li>\n\n\n<li>Escanea tu m\u00e1quina local: si el equipo del admin est\u00e1 comprometido, volver\u00e1s a reinfectarte al subir archivos.<\/li>\n\n\n<li>Actualiza todo (core, plugins, temas) y elimina componentes abandonados o innecesarios.<\/li>\n\n\n<li>A\u00f1ade un WAF (Web Application Firewall): ayuda a bloquear comunicaci\u00f3n con infraestructura maliciosa y a frenar vectores de subida\/ejecuci\u00f3n de payloads.<\/li>\n\n<\/ol>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Defensa que encaja especialmente bien aqu\u00ed<\/h4>\n\n\n<p>La monitorizaci\u00f3n de integridad de archivos (File Integrity Monitoring) es clave para detectar modificaciones no autorizadas en ficheros core como <code>index.php<\/code>, donde este tipo de ataques se esconde con facilidad.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen para desarrolladores: qu\u00e9 aprender de este caso<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>El cloaking moderno no es solo <code>User-Agent<\/code>: validan origen con rangos ASN\/CIDR para asegurarse de que el payload solo lo ve infraestructura real de buscadores.<\/li>\n\n\n<li>El punto de entrada (<code>index.php<\/code>) es un objetivo de alto impacto: permite servir contenido alternativo antes de que WordPress \u201carranque\u201d.<\/li>\n\n\n<li>La combinaci\u00f3n de payload remoto + fallback + logging apunta a campa\u00f1as pensadas para durar y evitar se\u00f1ales visibles.<\/li>\n\n\n<li>Si Google indexa cosas que t\u00fa no ves, asume compromiso hasta demostrar lo contrario: revisa core, salidas (egress) y Search Console (p\u00e1ginas inesperadas).<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Referencias \/ Fuentes<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/blog.sucuri.net\/2026\/01\/malware-intercepts-googlebot-via-ip-verified-conditional-logic.html\" target=\"_blank\" rel=\"noopener noreferrer\">Malware Intercepts Googlebot via IP-Verified Conditional Logic<\/a><\/li><li><a href=\"https:\/\/blog.sucuri.net\/2026\/01\/google-sees-spam-you-see-your-site-a-cloaked-seo-spam-attack.html\" target=\"_blank\" rel=\"noopener noreferrer\">Google Sees Spam, You See Your Site: A Cloaked SEO Spam Attack<\/a><\/li><li><a href=\"https:\/\/www.virustotal.com\/gui\/url\/5a006beedf563c6215a31746d011d13fd4f2561a1bf3b557484c4532b13e1ec6?nocache=1\" target=\"_blank\" rel=\"noopener noreferrer\">VirusTotal URL report<\/a><\/li><li><a href=\"https:\/\/publicwww.com\/websites\/amp-samaresmanor.pages\/\" target=\"_blank\" rel=\"noopener noreferrer\">publicwww: amp-samaresmanor.pages<\/a><\/li><li><a href=\"https:\/\/sucuri.net\/website-firewall\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sucuri Website Firewall<\/a><\/li><li><a href=\"https:\/\/sucuri.net\/malware-detection-scanning\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sucuri Malware Detection &amp; Scanning (File Integrity Monitoring)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Si en tu navegador todo se ve normal, pero en Google aparecen p\u00e1ginas raras o spam, puede que no sea \u201cmala suerte\u201d de SEO: es cloaking selectivo. Este caso en WordPress usaba verificaci\u00f3n de IP por ASN y l\u00f3gica condicional para servir un payload solo a Googlebot.<\/p>\n","protected":false},"author":17,"featured_media":95,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[54,55,52,53,10],"class_list":["post-104","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seguridad","tag-cloaking","tag-googlebot","tag-malware","tag-seo","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/comments?post=104"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/posts\/104\/revisions\/149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/media\/95"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/es\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}