DEV Community

Fernando Peralta
Fernando Peralta

Posted on Originally published at fernandoperalta.xyz AI-assisted

Postulé a una vacante de WordPress y me respondieron con un ataque ClickFix

Postulé a una vacante de desarrollo WordPress. La respuesta agradecía mi portafolio y me pedía entrar a un supuesto Google Workspace para conocer los requisitos del proyecto. El enlace terminó llevándome a una página que preparaba un error de certificado falso y ofrecía comandos para ejecutar código externo.

Actualmente estudio Ingeniería en Ciberseguridad en la Universidad Virtual del Estado de Guanajuato (UVEG). En este caso pude aplicar el análisis de JavaScript, la inspección de tráfico HTTP y el manejo de evidencias a una situación que llegó por mi trabajo como desarrollador. Documenté el mecanismo y los límites de lo que podía comprobar sin ejecutar las cargas.

Respuesta breve: ClickFix es una técnica de ingeniería social que presenta un problema técnico falso para convencer a la víctima de copiar y ejecutar un comando. En este intento, una respuesta a mi postulación en WordPress Jobs llevó a un falso Google Workspace alojado en Google Sites. El HTML y la API revelaron instrucciones para Windows y macOS. Me detuve antes de introducir la clave de acceso; no descargué ni ejecuté las cargas y no observé evidencia de compromiso.

Fecha del análisis: 5 de noviembre de 2026.

Tipo de incidente: phishing de contratación, suplantación de Google Workspace y distribución de instrucciones de descarga y ejecución mediante ClickFix.

Severidad de la campaña: alta, por la posibilidad de ejecución de software externo bajo engaño. Es una valoración del riesgo de la campaña, no una afirmación de infección de mi equipo.

Estado del equipo investigado: sin compromiso observado; visité el sitio, introduje un correo ficticio y examiné el tráfico y el código.

Confianza del hallazgo principal: alta, según el código fuente, las capturas y la respuesta HTTP documentados en el reporte.

Atribución a personas, países, grupos o familias de malware: no determinada.

Aviso de seguridad: Los indicadores sospechosos aparecen neutralizados o defangueados (hxxps, [.]). No abras esas direcciones ni ejecutes los comandos de la campaña. Este artículo conserva el reporte completo en formato editorial; no distribuye ejecutables, scripts maliciosos ni el HTML original. Los hashes y los extractos técnicos proceden del análisis documentado, no de una nueva ejecución de las muestras.

En este artículo

Resumen ejecutivo

Durante una búsqueda de proyectos WordPress recibí un correo que parecía una respuesta legítima a mi postulación. El remitente agradecía el portafolio e invitaba a acceder a un supuesto entorno de colaboración en Google Workspace para consultar el alcance del proyecto. El texto visible mostraba https://workspace.google.com, pero el destino real era una página en Google Sites, bajo /view/loop-join/workspace.

La página reproducía la web comercial de Workspace. El botón «Join to Workspace» abría un formulario de correo electrónico y después pedía la clave de acceso enviada en el mensaje. Al revisar los event listeners y las peticiones HTTP con Chrome DevTools, identifiqué un iframe externo en lokolutikov[.]xyz y su API /api/commands?land_id=32.

La respuesta JSON contenía los campos exe, dmg, windows y mac, con enlaces a supuestos instaladores y comandos Base64. Su decodificación estática reveló instrucciones para descargar y ejecutar un script PowerShell desde racleet[.]top, o un binario para Unix/macOS desde 109.238.87[.]111. El supuesto «DMG» apuntaba a un archivo .scpt de AppleScript.

La copia del HTML del iframe utilizada en el análisis contenía una envoltura Base64 y unos 7,9 MB de HTML decodificado. Una clave aceptada por /api/verify activaría una animación de verificación, un fallo de autenticación programado deliberadamente y una pantalla de certificado caducado. Esa pantalla promovía descargar software o copiar un comando: un flujo consistente con ClickFix.

El código examinado intenta que la víctima ejecute manualmente el comando o instalador después del error falso. No identifiqué una llamada que ejecutara directamente PowerShell, Bash o AppleScript al pulsar Submit. Introducir la clave y ejecutar una carga son pasos distintos.

1. Contexto: la oferta de trabajo como señuelo

La vacante estaba publicada en WordPress Jobs como WordPress Developer (Project, Remote), con fecha 31 de octubre de 2026, empresa declarada NovenzaDigital, presupuesto USD 5.000 y contacto famewunozeno01@gmail[.]com. Pedía experiencia con WordPress, PHP, HTML, CSS, JavaScript, temas, plugins, integraciones y mantenimiento [1]. Ese presupuesto figuraba en el anuncio; no fue una oferta económica personal que recibiera después. La publicación tampoco acredita que WordPress validara la identidad del anunciante: la plataforma explica que sus ofertas son moderadas por voluntarios [2].

Yo había respondido a esa oportunidad. Después recibí un correo firmado como «Tegan» desde la misma dirección anunciada. El mensaje elogiaba mi experiencia, afirmaba haber revisado mi portafolio y posponía la descripción detallada hasta que entrara al supuesto espacio de trabajo.

La ingeniería social combinaba una candidatura real, una acción administrativa creíble y un requisito artificial: acceder con un código y después actualizar certificados. El texto del hipervínculo aprovechaba el reconocimiento de una plataforma conocida.

Correo firmado como Tegan que presenta el enlace como Google Workspace; los datos del destinatario y el código de acceso están ocultos.

Figura 1. El texto visible del enlace no correspondía al destino real. Difuminé y cubrí el código de acceso para su publicación.

2. Evidencias disponibles y alcance de la investigación

El reporte se basa en estos materiales obtenidos durante la investigación:

Identificador Evidencia Alcance de la observación
E-01 Captura del correo de reclutamiento Remitente, señuelo y código de acceso; sin encabezados SMTP completos.
E-02 URL copiada del enlace del correo Destino real en Google Sites.
E-03 Capturas del falso Workspace Apariencia y formularios de correo y clave.
E-04 Captura de DevTools / Network GET /api/commands?land_id=32, respuesta 200 OK, tipo JSON.
E-05 JSON copiado desde DevTools Enlaces de descarga y comandos por sistema operativo.
E-06 Captura del manejador de eventos El botón Submit pertenece al iframe externo workspace1.html.
E-07 Dos archivos de texto con el HTML codificado Copias idénticas; análisis del código decodificado sin ejecución.

El alcance excluyó análisis dinámico de instaladores, descarga de payloads, inspección del backend, ejecución en máquina virtual y correlación forense con registros internos del supuesto empleador. La evidencia permite identificar el mecanismo de engaño y las instrucciones de descarga y ejecución con alta confianza. No permite identificar con certeza el malware final, su autor ni el número de víctimas.

El reporte documenta que las dos copias del código son binariamente idénticas, con estos SHA-256:

Texto pegado(1).txt  SHA-256:
82d3cd5e14681670ce89c0d78f49e9621230a456fe5b09618c08ba85fab5512e

Texto pegado(2).txt  SHA-256:
82d3cd5e14681670ce89c0d78f49e9621230a456fe5b09618c08ba85fab5512e

HTML decodificado  SHA-256:
425ffcda4caa5fa4d09d256a306425296a77540e4a79bc309ec9d306a81b93de
Enter fullscreen mode Exit fullscreen mode

Los hashes corresponden al código de la página, no a los ejecutables ofrecidos. No hay hash del payload final porque no se descargó. Las copias originales no forman parte de los archivos públicos de este artículo.

3. Cadena de ataque reconstruida

[Vacante WordPress Jobs / correo de seguimiento]
                    |
[Texto visible: workspace.google.com]
                    |
[Destino: sites.google[.]com/view/loop-join/workspace]
                    |
[Iframe: lokolutikov[.]xyz/workspace1.html]
                    |
[Formulario de correo -> formulario Access key]
                    |
[POST /api/verify, land_id: 32]
                    |
[Si la respuesta indica success]
                    |
[Animación de validación + error fabricado]
                    |
[WORKSPACE_AUTH_CERT_EXPIRED]
                    |
[Falsa reparación]
          +---------+----------+
          |                    |
[Descargar instalador]   [Copiar comando]
          |                    |
          +---------+----------+
                    |
[EJECUCIÓN POR EL USUARIO]
                    |
[Descarga / ejecución de código externo]
[Efectos posteriores no analizados]
Enter fullscreen mode Exit fullscreen mode

La transición de Submit al error requiere que la API acepte la clave. Si devuelve success: false, la función muestra «Invalid key» o el error recibido y permite otro intento. No confirmé qué claves reconoce el servidor. La fase posterior está reconstruida a partir del código; no la activé en el sitio real.

4. Suplantación de Google mediante una página incrustada

El enlace real llevaba a hxxps://sites.google[.]com/view/loop-join/workspace. Google Sites es un servicio legítimo donde terceros pueden publicar contenido. El dominio de alojamiento no garantiza que Google haya desarrollado o autorizado una página incrustada.

La interfaz imitaba el logotipo, la tipografía, los iconos de Gmail, Drive y Meet y el mensaje «The better way to work». El botón observado invocaba una función JavaScript local en lugar de redirigir al alta oficial:

<a onclick="event.preventDefault();openJoin(this)" class="button">
    <span class="button__content">Join to Workspace</span>
</a>
Enter fullscreen mode Exit fullscreen mode

Imitación de la página comercial de Google Workspace con una dirección de Google Sites visible en el navegador.

Figura 2. La apariencia de Workspace dentro de una página de Google Sites.

El botón abría el campo «Workspace mail». Introduje un correo ficticio y el formulario avanzó a «Access key». Ese avance solo demuestra una validación local del formato del correo, no una autenticación de identidad en el servidor.

Primera etapa del formulario falso: campo Workspace mail para introducir una dirección de correo.

Figura 3. Primera etapa del formulario.

Segunda etapa del formulario falso: solicita Access key y muestra el botón Submit.

Figura 4. Me detuve aquí, antes de introducir la clave o pulsar Submit.

5. Localización del iframe y del servidor externo

En Event Listeners de DevTools, el manejador click de button#submit-btn señalaba workspace1.html. Su ámbito (Window, document, location) apuntaba a hxxps://lokolutikov[.]xyz/workspace1.html. El botón pertenecía a un documento externo al formulario oficial de Google.

DevTools muestra el manejador onclick de Submit en workspace1.html dentro del dominio externo del iframe.

Figura 5. Ubicación del código responsable de Submit.

La página definía esta configuración, aquí neutralizada:

window.API_BASE = 'hxxps://lokolutikov[.]xyz/'; // Dominio neutralizado.
window.LAND_ID = 32;
Enter fullscreen mode Exit fullscreen mode
Ruta Método observado o identificado Uso en el código
/api/commands?land_id=32 GET Recuperar enlaces y comandos por plataforma.
/api/verify POST Validar el código y asignar identificadores de campaña.
/api/copy POST Registrar clics en «Copy».
/api/download POST Obtener una URL que después puede abrirse en otra pestaña.
/api/downloadmac POST Registrar la interacción con la descarga para Mac.

El código también contempla el parámetro v: si existe, guarda su valor en localStorage y envía una verificación con type: 'visited'. Ese comportamiento no se observó en mi prueba concreta.

La respuesta de la API capturada fue 200 OK, con Content-Type: application/json y Access-Control-Allow-Origin: *. CORS permite que otros orígenes consuman la API; ese permiso por sí solo no demuestra actividad maliciosa.

Panel Network de DevTools con la solicitud GET a api/commands?land_id=32 y la respuesta del servidor externo.

Figura 6. Solicitud de red hacia el dominio externo.

6. Desofuscación del HTML: Base64 como capa de ocultamiento

El archivo fuente comenzaba con este patrón. Es un fragmento conceptual; se omite el contenido Base64:

<script>
    document.write(decodeURIComponent(escape(atob('...'))));
</script>
Enter fullscreen mode Exit fullscreen mode

atob decodifica Base64 y document.write introduce el HTML resultante en el documento. Base64 es una codificación reversible sin clave secreta. En esta página dificultaba la inspección superficial del texto. decodeURIComponent(escape(...)) es una técnica heredada para convertir texto Unicode.

Cada copia de origen ocupaba unos 11 MB y producía el mismo HTML de aproximadamente 7,9 MB. Gran parte del volumen correspondía a imágenes y recursos incrustados. La desofuscación documentada se limitó a leer y decodificar bytes, sin evaluar el JavaScript resultante.

7. Análisis de submitKey(): qué hace el botón Submit

La función lee #access-key, desactiva temporalmente el botón y transmite JSON al backend. Este extracto está resumido y neutralizado; no es un ejemplo para ejecutar:

function submitKey() {
    const key = document.getElementById('access-key').value.trim();
    const landId = window.LAND_ID || 1;

    fetch(apiBase + '/api/verify', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ code: key, land_id: landId }),
    })
        .then((r) => r.json())
        .then((data) => {
            if (data.success) {
                showLoadingSequence();
            } else {
                // Muestra el error de validación del código.
            }
        });
}
Enter fullscreen mode Exit fullscreen mode

La función no contiene una llamada de ejecución nativa. Tras una respuesta aceptada aparece una simulación de autenticación: showLoadingSequence() programa los estados con setTimeout y marca expresamente como fallido el segundo paso. Una vez iniciada esa animación, el fallo está predefinido:

// Fragmentos de la secuencia de interfaz analizada.
setTimeout(function () {
    completeStep(1, false);
    title.textContent = 'Authentication failed';
    sub.textContent = 'Your account could not be verified';
}, 3600);

setTimeout(function () {
    showErrorPage();
}, 5200);
Enter fullscreen mode Exit fullscreen mode

El JavaScript fabrica el supuesto problema técnico del equipo. En el material analizado no hay una comprobación auténtica de la caducidad de certificados del sistema operativo.

8. La falsa avería del certificado y el engaño ClickFix

showErrorPage() afirma que no puede establecer una conexión segura y que el dispositivo necesita actualizar certificados. El error utilizado es:

WORKSPACE_AUTH_CERT_EXPIRED
Enter fullscreen mode Exit fullscreen mode

El código usa getOS() con navigator.userAgent y navigator.platform para elegir el flujo Windows o Mac/otros. En móviles detectados por userAgent, muestra «Device Not Supported» y pide continuar desde un ordenador.

La pantalla prepara dos vías:

  1. Instalación directa: enlaces con data-download-type="exe" o "dmg", reemplazables por las URL de la API.
  2. ClickFix: un botón Copy toma un comando de data-copy, lo escribe con navigator.clipboard.writeText() y muestra instrucciones para abrir PowerShell o Terminal y pegarlo. Hay un método alternativo de copia si falla la API del portapapeles.

Las FAQ de la página tranquilizan al visitante. En Windows incluso sugieren superar SmartScreen con «More info» y «Run anyway». Son instrucciones orientadas a conseguir ejecución manual bajo engaño.

El comportamiento encaja con T1204.004, User Execution: Malicious Copy and Paste, de MITRE ATT&CK [8], además del enlace de phishing inicial. El código prepara el intento; la evidencia no demuestra que la ejecución se completara.

9. Respuesta de /api/commands: instrucciones por plataforma

El JSON observado tenía cuatro claves. Estas son las ubicaciones neutralizadas y el comportamiento inferido, sin publicar cadenas completas directamente ejecutables:

Clave Indicador observado Comportamiento posible
exe hxxps://api.certificate[.]rest/installer/CertificateUpdate.application Extensión .application, compatible con instalación ClickOnce en Windows. No descargada ni inspeccionada.
dmg hxxps://api.certificate[.]rest/Installer%20GoogleCert.scpt Termina en .scpt de AppleScript, aunque la clave se llama dmg.
windows PowerShell Base64 / UTF-16LE Recupera un script remoto, lo interpreta y elimina la copia local.
mac Comando Bash/Unix en Base64 Descarga un archivo llamado chrome a /tmp, lo hace ejecutable y lo inicia en segundo plano.

9.1 Windows: etapas inferidas del comando decodificado

La cadena usaba -NoProfile -w Normal -e y Base64 en UTF-16LE. Su decodificación como texto mostró:

  • Creación del archivo temporal %TEMP%\sys.ps1.
  • Descarga desde hxxps://racleet[.]top/core con Start-BitsTransfer.
  • Alternativa con Invoke-WebRequest si BITS falla.
  • Lectura con Get-Content -Raw e interpretación con Invoke-Expression (alias iex).
  • Eliminación de la copia temporal con Remove-Item (alias ri).

El riesgo es la ejecución de código externo. Borrar el .ps1 después no revierte los efectos que haya producido.

9.2 Mac/Unix: etapas inferidas del comando decodificado

El valor de mac describía esta secuencia:

  1. Descargar un binario de hxxp://109.238.87[.]111/d/unix45351194 a /tmp/chrome.
  2. Aplicarle chmod +x.
  3. Iniciarlo en segundo plano, descartando salida estándar y errores, con disown al final.

El nombre chrome no acredita que el archivo sea Google Chrome. Puede dar una apariencia familiar al binario. Como no lo descargué, su arquitectura, hash, capacidades y familia de malware quedan sin determinar.

9.3 Qué información no puedo afirmar

Sin analizar los binarios no puedo atribuirles robo de contraseñas o criptomonedas, persistencia en LaunchDaemons ni exfiltración de cookies. Esas capacidades están documentadas en campañas comparables y en malware asociado a infraestructura relacionada, pero no se verificaron en el archivo concreto de esta URL.

10. Telemetría y comprobación de billeteras

El código contiene logCopy(), logDownload() y logDownloadMac(). La primera y la tercera envían eventos a una API; la segunda puede solicitar una URL al backend antes de abrirla. Un MutationObserver aplica comandos y enlaces a elementos añadidos dinámicamente al DOM.

La rutina detectWallets() comprueba propiedades expuestas por proveedores de billeteras como MetaMask, Rabby, Phantom, Coinbase Wallet y Exodus. Una vacante WordPress no necesita conocer las extensiones de criptomonedas del navegador.

No encontré una transmisión demostrada de esa lista a un servidor en el fragmento analizado. Podría ser código reutilizado o una capacidad preparada para otro momento. No afirmo acceso a billeteras ni robo de fondos.

11. Indicadores de compromiso (IOC) y observables

Los IOC sirven para investigación y bloqueo. Encontrarlos en un registro o consultar su reputación no basta para demostrar que un equipo está infectado. Son observables del análisis del 5 de noviembre de 2026, no una validación de su estado actual.

Tipo Indicador neutralizado Papel y confianza
Remitente famewunozeno01@gmail[.]com Remitente y contacto del anuncio (alta).
Entrada hxxps://sites.google[.]com/view/loop-join/workspace Señuelo en Sites (alta).
Iframe hxxps://lokolutikov[.]xyz/workspace1.html Código del formulario (alta).
API hxxps://lokolutikov[.]xyz/api/commands?land_id=32 Entrega de instrucciones por sistema (alta).
API /api/verify, /api/copy, /api/download, /api/downloadmac Control y registro (alta, código estático).
Identificador land_id=32 Configuración de la página (alta).
Windows hxxps://racleet[.]top/core Origen del script según el comando (alta, no descargado).
Windows hxxps://api.certificate[.]rest/installer/CertificateUpdate.application Descarga indicada en JSON (alta, no descargada).
macOS hxxps://api.certificate[.]rest/Installer%20GoogleCert.scpt Descarga indicada en JSON (alta, no descargada).
Unix/macOS 109.238.87[.]111 IP de descarga del binario (alta).
Unix/macOS hxxp://109.238.87[.]111/d/unix45351194 Ruta de entrega, contenido sin validar (alta).
Archivo previsto %TEMP%\sys.ps1 Script temporal si se ejecuta el comando Windows.
Archivo previsto /tmp/chrome Archivo local si se ejecuta el comando Unix.
Error WORKSPACE_AUTH_CERT_EXPIRED Texto estático del engaño (alta).

Correlación externa con la IP 109.238.87[.]111

El reporte recoge otras rutas de distribución de malware en URLhaus para esa IP desde septiembre de 2026 [4]. El artículo de VirusTotal del 13 de octubre de 2026 también documenta un infostealer macOS que usa la misma dirección como receptor de exfiltración [5].

La correlación respalda que la IP ha participado en actividad maliciosa. No demuestra que /d/unix45351194 pertenezca al mismo actor, familia u operación. Un servidor puede alojar campañas distintas; faltan hashes coincidentes, muestras analizadas u otros datos que permitan una atribución común.

12. Mapeo orientativo MITRE ATT&CK

Técnica Relación con el caso Estado
T1566.002: Spearphishing Link Enlace en el correo de reclutamiento. Observado.
T1036: Masquerading Marca e interfaz de Google y supuesto certificado. Observado en la página.
T1027: Obfuscated Files or Information HTML y comandos Base64. Observado.
T1204.004: Malicious Copy and Paste Instrucciones para copiar y ejecutar comandos. Intento preparado; ejecución no demostrada.
T1204.002: Malicious File Descargas de supuestos instaladores. Intento preparado; ejecución no demostrada.
T1059.001: PowerShell Comando Windows para ejecutar un script remoto. Entregado; ejecución no observada.
T1059.004: Unix Shell Comando mac para iniciar un archivo remoto. Entregado; ejecución no observada.
T1105: Ingress Tool Transfer Descarga de software externo. Intención inferida; descarga no observada en mi equipo.

Es una clasificación analítica, no una afirmación de que todas las técnicas se completaran [6][7][8].

13. Evaluación del impacto y de mi equipo

Estas fueron las acciones durante la investigación:

  • Abrí el sitio en una ventana de incógnito.
  • Introduje un correo ficticio.
  • Avancé hasta el formulario de clave y me detuve antes de introducirla o pulsar Submit.
  • Mantuve las cargas ofrecidas sin descargar ni ejecutar.
  • Usé DevTools para examinar el DOM, las solicitudes HTTP y el JavaScript.

Con ese alcance, no hay evidencia de ejecución de la carga maliciosa. La página sí pudo recibir datos normales de navegación: IP pública, navegador, idioma o la dirección ficticia si la recogió o transmitió. Eso no acredita control del equipo.

Conviene cerrar la página, revisar las descargas, actualizar el navegador y comprobar si se concedieron permisos imprevistos. Las acciones descritas no justifican afirmar una infección ni recomendar un formateo. Incógnito no es un sandbox de seguridad: limita el uso de las sesiones habituales, pero no aísla la ejecución de un comando.

Si otra persona sí ejecutó uno de los comandos o instaladores, el riesgo cambia. Debe suspender las tareas sensibles en ese sistema, aislarlo de la red cuando sea viable, conservar evidencias y consultar a un profesional de respuesta a incidentes. Las credenciales deben protegerse desde otro dispositivo confiable.

14. Recomendaciones defensivas para desarrolladores y candidatos

  1. Comprueba el destino real del hipervínculo, además de su texto visible.
  2. Desconfía de un onboarding que exija instalar «certificados» mediante PowerShell, Terminal o descargas no verificadas.
  3. Compara el dominio visible con el documento incrustado y los dominios de Network.
  4. Revisa con cautela que la descripción del proyecto quede condicionada a una actualización local.
  5. Identifica al empleador y su infraestructura antes de introducir credenciales o tokens en formularios externos.
  6. Para investigar, prioriza análisis estático o entornos aislados. No ejecutes los comandos decodificados ni las cargas.
  7. Conserva el mensaje original, las URL, capturas, fecha, código y hashes para un reporte de abuso.
  8. Protege credenciales, cookies, direcciones del candidato y datos sensibles de los encabezados antes de publicar evidencias.

Para equipos de seguridad, merece atención la combinación de Google Sites con iframes externos, APIs de configuración de cargas e instrucciones de copia de PowerShell o Unix. Eso no justifica bloquear todo Google Sites ni cualquier uso benigno de Base64.

15. Dónde reportar la campaña y qué enviar

Estos son canales de reporte, no una afirmación de que ya haya presentado denuncias o conseguido retiradas.

Prioridad A. Google Safe Browsing y Google Sites

  • Google Safe Browsing: phishing. Aporta la URL de Sites y la del iframe. Describe la suplantación y las falsas instrucciones de seguridad [3].
  • Google Safe Browsing: malware. Explica que la página distribuidora conduce a instrucciones de descarga y ejecución.
  • Google Sites: Report abuse. El procedimiento documentado usa el menú de tres puntos y «Report abuse» [9]. No exige completar el formulario. Evita volver a abrir el sitio sospechoso únicamente para probar su flujo.

Prioridad B. WordPress Jobs

  • Formulario oficial de WordPress Jobs. Adjunta título, URL exacta del anuncio, remitente, correo de seguimiento y evidencia del enlace engañoso. Solicita una revisión y, si procede, su retirada [1][2].

Prioridad C. Redes de detección y distribución de malware

  • Microsoft Defender SmartScreen. Selecciona phishing o malware y aporta las URL de entrada e iframe con un resumen [10].
  • URLhaus. Recibe URL que sirven directamente cargas de malware, no cualquier página de phishing. Requiere autenticación; revisa su política y si ya existe un reporte antes de enviar una ruta [11].
  • IC3 / FBI. Es otra vía para fraude cibernético, especialmente si hubo impacto o víctimas. Describe observaciones y evita atribuciones especulativas [12].

También puede avisarse al alojamiento o registrador cuando tenga un canal de abuso verificable. Alojar el contenido no demuestra participación consciente del proveedor.

Lista de evidencias para adjuntar

  • Correo original, preferiblemente .eml con encabezados. No lo publiques íntegro si contiene datos personales.
  • Captura del enlace visible y su destino real.
  • Capturas del formulario y de GET /api/commands?land_id=32.
  • JSON con sus cuatro campos, tratado como evidencia potencialmente peligrosa.
  • HTML/JavaScript ofuscado y SHA-256. Compártelo de forma privada con el equipo de abuso, en lugar de publicarlo como archivo ejecutable.
  • IOC, explicación de la falsa actualización y límites del análisis.

Plantilla de reporte de abuso en inglés

Los indicadores de esta versión pública también están neutralizados. Un equipo de abuso puede necesitar los originales, enviados por su canal privado.

Subject: Phishing / ClickFix malware distribution impersonating Google Workspace via a WordPress job offer

I received a follow-up email from famewunozeno01@gmail[.]com concerning the public WordPress Jobs listing “WordPress Developer (Project, Remote)” (NovenzaDigital, posted October 31, 2026). The email displayed workspace.google.com, but the actual hyperlink pointed to sites.google[.]com/view/loop-join/workspace. The page embeds lokolutikov[.]xyz/workspace1.html, which impersonates Google Workspace, asks for an email and an access key, and contacts /api/commands?land_id=32. The API response supplies platform-specific download links and Base64-encoded commands. Static analysis of the page shows that, after successful key verification, it deliberately displays a fake authentication/certificate error and prompts users to download software or paste commands into PowerShell/Terminal. I did not execute the payloads. Please investigate the URLs and associated content. Screenshots, source hashes and the observed JSON are available as evidence.

16. Limitaciones, atribución y cuestiones pendientes

  • El análisis no incluyó encabezados SMTP completos: SPF, DKIM, DMARC y la cadena de servidores quedaron sin verificar.
  • Desconozco quién controla la cuenta de Gmail, la vacante o los dominios. La coincidencia de correo vincula el anuncio con el mensaje, pero no identifica a una persona física.
  • La reacción a data.success procede del HTML. No activé esa fase en el sitio real.
  • El backend /api/verify y las descargas no se auditaron internamente. El código puede haber cambiado después de la captura.
  • Al no descargar ni ejecutar las cargas, no hay hash de esos archivos ni diagnóstico de su familia de malware.
  • La coincidencia de IP con VirusTotal es una correlación de infraestructura. No prueba que ambas campañas sean una misma operación.
  • La evidencia no permite vincular el caso con operaciones norcoreanas, grupos APT, una nacionalidad o los remitentes de otros correos sospechosos mencionados durante la investigación.

17. Conclusión

La cadena documentada empieza en una candidatura real y continúa por un correo de seguimiento, una interfaz que suplanta Google, un iframe externo y una verificación de clave. Después, según el código, aparece el certificado caducado ficticio y se ofrecen instaladores o comandos para que el usuario los ejecute.

El HTML y el JSON permiten clasificar el intento como ingeniería social consistente con ClickFix. Sobre mi equipo, la conclusión es más acotada: no observé evidencia de ejecución y me detuve antes de introducir la clave o descargar archivos.

El caso me permitió aplicar conocimientos de desarrollo web a mi formación en ciberseguridad: seguir un evento hasta su iframe, revisar una API, interpretar JavaScript ofuscado y separar observaciones de inferencias. La legitimidad del alojamiento no se transmite automáticamente a su contenido incrustado.

Mi trabajo habitual como desarrollador WordPress explica por qué recibí ese señuelo. En mi portafolio y formación puedes consultar mi experiencia y mis estudios de Ingeniería en Ciberseguridad en UVEG.

Preguntas frecuentes sobre este intento de ClickFix

¿Qué es un ataque ClickFix?

Es un engaño que presenta un error técnico falso para que la persona copie y ejecute un comando como supuesta reparación. En este caso el pretexto era WORKSPACE_AUTH_CERT_EXPIRED, generado por el propio JavaScript de la página.

¿Me infecté si solo abrí el enlace de una oferta de trabajo?

Abrir un enlace, por sí solo, no demuestra una infección. En este caso no encontré evidencia de ejecución de la carga con las acciones descritas. Eso no garantiza la seguridad de cualquier página ni descarta otras vulnerabilidades. Si ejecutaste un comando o instalador, requiere una evaluación diferente.

¿Un sitio en Google Sites puede suplantar Google Workspace?

Sí. Google Sites permite publicar contenido de terceros y esta página incrustaba un formulario de otro dominio. El dominio legítimo del alojamiento no autentica la organización que publicó el contenido.

¿Pulsar Submit ejecutaba PowerShell automáticamente?

En el código analizado, Submit verificaba la clave con la API. Una respuesta aceptada iniciaba la secuencia del error falso. No identifiqué una llamada de ejecución nativa desde ese botón; el flujo posterior pedía intervención manual.

¿El modo incógnito me protege de ClickFix?

Incógnito limita la persistencia local de la sesión del navegador. No aísla PowerShell, Terminal ni un instalador que ejecutes. Para el análisis conviene usar métodos estáticos o un entorno aislado preparado para investigación.

Referencias y fuentes verificables

  1. WordPress Jobs: WordPress Developer (Project, Remote). Oferta, fecha, empresa declarada y correo de aplicación documentados en el reporte del 5 de noviembre de 2026. El anuncio puede cambiar o retirarse.
  2. WordPress Jobs: FAQ. Moderación y contacto.
  3. Google Search Central: Report Spam, Phishing, or Malware. Mecanismos de reporte.
  4. URLhaus: host 109.238.87[.]111. Historial de otras URL asociadas a malware; enlace a la plataforma de análisis, no al servidor sospechoso.
  5. VirusTotal: Introducing macOS Mirage, 13 de octubre de 2026. Cita la misma IP como receptor de exfiltración en otro caso. No analiza el archivo de esta campaña.
  6. MITRE ATT&CK: T1566.002. Phishing mediante enlace.
  7. MITRE ATT&CK: T1027. Ofuscación y codificación.
  8. MITRE ATT&CK: T1204.004. Copia y pega malicioso.
  9. Google Sites: Report abuse. Procedimiento de denuncia.
  10. Microsoft Defender: Report unsafe site. Reportes de phishing o malware.
  11. URLhaus: política y API. Criterios de envío y autenticación.
  12. FBI: Spoofing and Phishing. Modalidades y portal IC3.

Nota editorial: Las seis capturas proceden de la investigación descrita. Los datos personales del destinatario se ocultaron en la captura original; para este artículo también difuminé y cubrí el código de acceso del correo. El remitente se conserva como observable, sin atribuir su identidad a una persona concreta. Las limitaciones del reporte se mantienen y los indicadores sospechosos se presentan sin enlaces activos.

https://fernandoperalta.xyz/es/blog/vacante-wordpress-falsa-ataque-clickfix/

Top comments (0)