Hacking Ético

Auditoría de seguridad WordPress: pentesting y vulnerabilidades

Una auditoría de seguridad WordPress es el primer paso para identificar vulnerabilidades antes de que un atacante pueda explotarlas. Cuando diseñamos y lanzamos una tienda virtual en WordPress, lo último en lo que pensamos es en cómo podría ser vulnerada.

Sin embargo, precisamente esa omisión es el punto de partida de la mayoría de los incidentes de seguridad que afectan a sitios web en Colombia y el resto de Latinoamérica cada año. Con el objetivo de cerrar esa brecha y documentar hallazgos concretos, realizamos una auditoría completa sobre una tienda virtual propia, desplegada en Hostinger con WooCommerce, aplicando metodologías como OWASP Top 10, análisis DNS/WHOIS/SSL y reconocimiento OSINT.

Este artículo documenta paso a paso lo que encontramos: desde la infraestructura de red hasta vulnerabilidades reales que podrían comprometer datos de clientes, permitir ataques de fuerza bruta o exponer el código fuente del sitio.

Por Qué Necesitas un Contrato Antes de Hackear tu Propio Sitio

El término “hacking ético” no es un eufemismo; es una categoría jurídica con implicaciones legales muy concretas. En Colombia, la Ley 1273 de 2009 tipifica como delito el acceso no autorizado a sistemas informáticos, la intercepción de datos, el daño informático y el uso de software malicioso, con penas que van desde 48 meses hasta 8 años de prisión. La única diferencia entre un pentester legal y un ciberataque ilegal es, en palabras simples, un papel firmado: el contrato de autorización.

Marcos de referencia como el PTES (Penetration Testing Execution Standard), el NIST SP 800-115 y la OWASP Testing Guide son unánimes al respecto: antes de ejecutar cualquier

prueba, incluso sobre sistemas propios, es obligatorio documentar formalmente el alcance, las restricciones de tiempo, las herramientas autorizadas, las responsabilidades de cada parte y los procedimientos de escalamiento ante incidentes. Omitir este paso no solo infringe las buenas prácticas del sector, sino que puede anular la validez legal de cualquier hallazgo y exponer al auditor a responsabilidades civiles y penales.

Para esta auditoría, todas las pruebas se ejecutaron sobre un sitio web creado y administrado íntegramente por el equipo auditor, bajo un contrato de autorización firmado antes de iniciar cualquier actividad técnica. Ningún sistema de terceros fue vulnerado, ningún dato fue modificado ni eliminado, y todos los hallazgos se documentaron con el único propósito de aprender a identificarlos y corregirlos.

Cómo realizar una auditoría de seguridad WordPress paso a paso

El entorno auditado fue configurado como una tienda virtual funcional que replica fielmente el stack tecnológico que encontraría cualquier auditor al evaluar un e-commerce colombiano de mediana escala.

Esta combinación es la misma que encontraría cualquier analista al revisar miles de sitios activos en la región: un CMS popular, hosting compartido de bajo costo, CDN configurado automáticamente y un conjunto de plugins instalados sin revisión sistemática de seguridad. Lo que aquí documentamos aplica, con mínimas variaciones, a la gran mayoría de instalaciones WordPress en producción hoy.

Fase 1 — Reconocimiento de Red en una auditoría de seguridad WordPress

El reconocimiento es la primera y más determinante fase de cualquier proceso de auditoría de seguridad WordPress o de cualquier sistema web. Su objetivo no es vulnerar nada: es comprender. Un auditor que no conoce la topología de red de su objetivo, los servicios que expone y los posibles vectores de entrada está actuando a ciegas, lo que reduce dramáticamente la efectividad de las pruebas posteriores. Existen dos modalidades complementarias:

1.1 Prueba de Conectividad con Ping: La Primera Huella Digital del Servidor

El comando ping utiliza el protocolo ICMP (Internet Control Message Protocol, RFC 792, capa 3 del modelo OSI) para enviar mensajes Echo Request (tipo 8) y recibir Echo Reply (tipo 0) del servidor destino. En un contexto de pentesting, el ping cumple tres funciones simultáneas: confirma si el host está activo, mide la latencia de ida y vuelta (RTT) en milisegundos, y —crucialmente— revela la dirección IP que resuelve el dominio, que puede ser la del CDN y no la del servidor físico real.

Se ejecutaron tres pings sucesivos en momentos distintos sobre el dominio objetivo palevioletred-wildcat-394676.hostingersite.com. Cada ejecución resolvió a una IP diferente, confirmando el balanceo de carga activo en la infraestructura.

Primer Ping

En el primer ping, el dominio resolvió a 191.101.104.36 (alias free.cdn.hstgr.net), con tiempos de respuesta entre 84 ms y 210 ms. El pico atípico en el tercer paquete (210 ms) es completamente normal en redes CDN, donde la ruta puede variar ligeramente entre paquetes dependiendo del nodo que sirva la respuesta.

Auditoría de seguridad WordPress – segundo y tercer ping evidenciando rotación de IP por CDN Hostinger

El segundo ping resolvió a 212.1.212.250 con tiempos similares pero un pico en el quinto paquete (269 ms), y el tercer ping entregó una tercera IP diferente: 195.35.60.114. Este comportamiento de rotación de IPs entre ejecuciones es la confirmación más directa de que el sitio opera detrás de un sistema de balanceo de carga activo. Desde la perspectiva de seguridad, esto significa que no existe un único nodo que “derribar” para afectar la disponibilidad del sitio, lo que representa una ventaja defensiva importante frente a ataques DDoS.

La verificación adicional con curl ipinfo.io/[IP] confirmó que todas las IPs pertenecen a AS47583 Hostinger International Limited, datacenter de Asheville, North Carolina. Aunque el sitio es administrado desde Colombia, sus servidores físicos residen en territorio estadounidense, con implicaciones tanto de rendimiento (latencia transatlántica promedio ~85 ms desde Bogotá) como de jurisdicción legal en caso de incidentes de seguridad.

1.2 Traceroute: El Mapa de Red que la Infraestructura No Quiere que Veas

La herramienta traceroute (Linux) o tracert (Windows) mapea la ruta de los paquetes IP desde el equipo del auditor hasta el servidor destino, enviando paquetes con valores TTL (Time To Live) crecientes. Cuando el TTL expira en un router intermedio, ese dispositivo descarta el paquete y responde con un mensaje ICMP Time Exceeded, revelando su dirección IP y la latencia hasta ese punto. Salto a salto, se construye el mapa completo de la red entre origen y destino.

Auditoría de seguridad WordPress – traceroute con todos los saltos ocultos mostrando infraestructura CDN protegida

El resultado fue contundente: a partir del segundo salto, todos los routers intermedios respondieron con * * *, lo que indica que están configurados para ignorar las sondas ICMP/UDP usadas por traceroute. El único salto visible fue el primero, correspondiente al gateway de la máquina virtual (10.0.2.2). Esta respuesta no es un error; es exactamente el comportamiento esperado y deseado en infraestructuras CDN corporativas modernas: impide que un atacante externo conozca la topología interna de la red, el número de dispositivos intermedios o la ubicación física de los servidores.

Como alternativa, se intentó el traceroute con el flag -T -p 80 (TCP sobre puerto HTTP), que en ocasiones logra traversar firewalls que bloquean UDP. Este método reveló dos saltos: el gateway local y un nodo con IP pública 191.101.104.121 perteneciente al CDN de Hostinger. Sin embargo, la ruta completa hasta el servidor de origen permaneció opaca, confirmando que la arquitectura de red del objetivo cuenta con una protección perimetral robusta y bien configurada.

1.3 Escaneo de Puertos con Nmap: El Rayos X de la Infraestructura

Nmap (Network Mapper) es la herramienta de referencia mundial para el descubrimiento de hosts y servicios en red. Permite identificar puertos abiertos, detectar versiones exactas de software mediante service fingerprinting, inferir el sistema operativo del servidor y ejecutar scripts de detección de vulnerabilidades a través del motor NSE (Nmap Scripting Engine). Para esta auditoría de seguridad WordPress se ejecutaron tres variantes con profundidad creciente.

Escaneo Rápido — nmap -F

Auditoría de seguridad WordPress – nmap -F mostrando solo puertos 80 y 443 abiertos con 98 filtrados

El escaneo rápido con el flag -F analiza los 100 puertos TCP más comunes. El resultado fue claro y positivo desde el punto de vista defensivo: 98 puertos están filtrados (bloqueados por firewall, sin respuesta) y únicamente dos están abiertos: el puerto 80/tcp (HTTP) y el puerto 443/tcp (HTTPS). Esto significa que la superficie de ataque expuesta está reducida al mínimo estrictamente necesario para operar un sitio web. No hay puertos de gestión remota abiertos, como el 22 (SSH), 3306 (MySQL), 3389 (RDP) o 8080 (HTTP alternativo), lo que representa una buena práctica de seguridad: el acceso administrativo al servidor se realiza por canales seguros y no expuestos al internet público.

Detección de Versiones — nmap -sV

Auditoría de seguridad WordPress – nmap -sV revelando servidor nginx y CDN hcdn de Hostinger con service fingerprin

El escaneo de versiones con el flag -sV aplica técnicas de service fingerprinting para determinar exactamente qué software corre detrás de cada puerto abierto. El resultado identifica el servicio en ambos puertos como hcdn (el CDN propietario de Hostinger), y dentro del bloque Service Fingerprint se puede leer claramente la cadena <center>nginx</center>, confirmando que el servidor web subyacente es nginx. Las versiones HTTP soportadas son HTTP/1.0, HTTP/1.1 y HTTP/3.

Este hallazgo tiene implicaciones de seguridad directas. Exponer el nombre del software del servidor en las cabeceras HTTP (Server: hcdn) y en las páginas de error internas le entrega a cualquier atacante un vector de investigación: basta con buscar en bases de datos de vulnerabilidades como el NVD del NIST los CVE asociados a la versión de nginx detectada para identificar exploits aplicables. La recomendación inmediata es ocultar la cabecera Server mediante la directiva server_tokens off; en la configuración de nginx.

Escaneo Agresivo — nmap -A

Auditoría de seguridad WordPress – nmap -A con scripts NSE revelando robots.txt redireccionamiento HTTP a HTTPS y múltiples IPs

El escaneo agresivo con el flag -A activa simultáneamente la detección de versiones, el traceroute integrado y la ejecución de scripts NSE. Los hallazgos más relevantes fueron tres: primero, la redirección automática de HTTP a HTTPS mediante un código 302 Moved, que confirma que ningún contenido se sirve en texto plano. Segundo, la detección de que el archivo robots.txt contiene al menos una entrada disallowed; paradójicamente, este archivo actúa como un mapa de directorios sensibles para cualquier auditor, ya que si algo aparece allí es porque el administrador considera que no debe indexarse. Tercero, la confirmación de múltiples direcciones IPv4 e IPv6 asociadas al dominio, que refuerza el modelo de balanceo de carga identificado previamente.

Fase 2 — DNS, WHOIS y SSL en una auditoría de seguridad WordPress

Una de las fases más subestimadas de una auditoría de seguridad WordPress es el análisis de la información pública disponible sobre el dominio. Los registros DNS, las bases de datos WHOIS y los certificados SSL son fuentes abiertas que cualquier persona puede consultar sin generar un solo paquete de tráfico hacia el servidor objetivo. La cantidad de información estratégica que revelan sobre la infraestructura, las herramientas utilizadas y los posibles vectores de ingeniería social es, en muchos casos, sorprendente.

2.1 Registros DNS con nslookup: Tres Capas de Información Crítica

Registro A — La IP que Está Detrás del Dominio

Auditoría de seguridad WordPress – nslookup registro tipo A mostrando alias free.cdn.hstgr.net con IPs del CDN Hostinger

La consulta nslookup -type=A [dominio] devolvió una respuesta no autoritativa que reveló el hallazgo más importante de esta fase: el dominio auditado no apunta directamente al servidor de origen. En cambio, es un alias (CNAME) que redirige el tráfico hacia free.cdn.hstgr.net, devolviendo simultáneamente dos direcciones IP: 191.101.104.113 y 191.96.144.240. Esto confirma que el sitio opera detrás de la CDN de Hostinger, lo que oculta la IP real del servidor físico y distribuye la carga entre múltiples nodos.

Desde la perspectiva del pentester, este hallazgo es fundamental: cualquier escaneo o ataque dirigido a estas IPs impactará sobre los nodos del CDN, no sobre el servidor de origen real. Esta arquitectura es una de las defensas más efectivas contra ataques DDoS directos y dificulta significativamente el rastreo de la infraestructura física subyacente.

Registro MX — Qué Dice (y Qué Oculta) Sobre el Correo Corporativo

Auditoría de seguridad WordPress – nslookup registro MX mostrando SOA de Cloudflare sin servidores de correo expuestos

La consulta del Registro MX (nslookup -type=MX hostingersite.com) no devolvió servidores de correo convencionales como Outlook o Google Workspace. En su lugar, la consola arrojó los datos del registro de Autoridad Principal (SOA), revelando que la gestión completa de DNS está delegada a la plataforma Cloudflare mediante los name servers emily.ns.cloudflare.com y dns.cloudflare.com.

Este resultado tiene dos lecturas desde la perspectiva de seguridad. Por un lado, la ausencia de servidores de correo expuestos es positiva: impide que un atacante determine qué herramientas ofimáticas usan internamente los empleados (dato valioso para ataques de ingeniería social dirigida). Por otro lado, la delegación total a Cloudflare confirma que toda la seguridad DNS depende de la solidez de esa plataforma, lo que hace crítico mantener las credenciales de esa cuenta extremadamente protegidas.

Registro TXT — La Política de Correo que Elimina el Email Spoofing

Auditoría de seguridad WordPress – nslookup registro TXT mostrando política SPF v=spf1 -all configuración estricta

La consulta del Registro TXT (nslookup -type=TXT hostingersite.com) reveló la cadena v=spf1 -all. Este es el estándar SPF (Sender Policy Framework), un protocolo de autenticación de correo electrónico que define qué servidores están autorizados a enviar correos a nombre de un dominio. El parámetro -all, conocido como Hard Fail, indica que ninguna dirección IP está autorizada a enviar correos usando @hostingersite.com. Cualquier mensaje que intente hacerse pasar por ese dominio será rechazado directamente por los servidores de destino. Esta configuración elimina prácticamente por completo el riesgo de email spoofing contra este dominio, lo que representa una excelente práctica de higiene criptográfica.

2.2 WHOIS: Qué Sabe el Mundo sobre el Propietario de tu Dominio

Auditoría de seguridad WordPress – resultado WHOIS mostrando Hostinger operations UAB clientTransferProhibited y nameservers Cloudflare

La búsqueda WHOIS sobre hostingersite.com mediante la herramienta Sysinternals Whois v1.21 reveló la siguiente información de interés para la auditoría:

El dato más relevante desde la perspectiva defensiva es el estado clientTransferProhibited. Este mecanismo de seguridad bloquea el dominio a nivel de registro, impidiendo que sea transferido a otro registrar sin autorización explícita del propietario. Esto previene el Domain Hijacking, una técnica de ataque en la que un actor malicioso intenta tomar el control del dominio mediante ingeniería social dirigida al registrar o mediante el aprovechamiento de credenciales comprometidas. Al tener este bloqueo activo, incluso si un atacante obtiene las credenciales de la cuenta de Hostinger, no podría transferir el dominio sin un proceso de validación adicional.

Por otro lado, el registro WHOIS no expone ningún dato personal del propietario real del sitio web (nombre, teléfono, correo), lo que cumple con los estándares actuales de privacidad en internet y dificulta las tareas de reconocimiento para ataques de ingeniería social. El único punto de mejora identificado es la ausencia de DNSSEC activo (unsigned), una capa adicional de autenticación DNS que protege contra ataques de envenenamiento de caché.

2.3 Certificado SSL/TLS: Una Criptografía de Grado Bancario

Auditoría de seguridad WordPress – análisis openssl s_client mostrando TLS 1.3 certificado DigiCert RapidSSL cadena de confianza válida

El análisis del certificado SSL con el comando openssl s_client -showcerts -connect [dominio]:443 arrojó los resultados más positivos de toda la auditoría desde el punto de vista criptográfico. El handshake TLS fue exitoso y reveló la siguiente cadena de confianza:

DigiCert Inc es una de las Autoridades Certificadoras comerciales de mayor reconocimiento a nivel mundial, lo que garantiza que todos los navegadores modernos confíen en el certificado sin mostrar advertencias de seguridad. La negociación bajo TLS 1.3 con el cifrador TLS_AES_256_GCM_SHA384 significa que toda la comunicación entre el navegador del cliente y el servidor está protegida con cifrado de 256 bits, el mismo estándar que utilizan las instituciones financieras y los organismos gubernamentales para proteger transacciones sensibles.

El certificado de tipo Wildcard (*.hostingersite.com) es práctico desde el punto de vista operativo, ya que cubre automáticamente cualquier subdominio sin necesidad de emitir certificados individuales. Sin embargo, conviene monitorear periódicamente los registros de Transparencia de Certificados (CT Logs) de este dominio, ya que cualquier certificado emitido para un subdominio de hostingersite.com aparecerá en esos registros públicos y podría revelar subdominios internos no intencionados.

También se identificó, mediante el comando nslookup -type=NS hostingersite.com, que los name servers autoritativos son emily.ns.cloudflare.com y terin.ns.cloudflare.com, con soporte completo para IPv4 e IPv6, lo que confirma la infraestructura dual-stack y la delegación total de la autoridad DNS a Cloudflare.

Video Recomendado: Introducción al Pentesting Web con OWASP

Para complementar los conceptos técnicos de esta auditoría, te recomendamos el siguiente recurso audiovisual oficial del proyecto OWASP, que explica de forma visual las categorías del Top 10 y cómo afectan a aplicaciones web reales como WordPress:

Video: OWASP Top 10 2021 — Explicación Completa para Desarrolladores Web (YouTube, OWASP Foundation)

Fase 3 — OWASP Top 10 en una auditoría de seguridad WordPress

El OWASP Top 10 es el estándar de referencia más utilizado en el mundo para evaluar la seguridad de aplicaciones web. Publicado y mantenido por la Open Web Application Security Project Foundation, clasifica las diez categorías de riesgo más críticas basándose en datos reales de miles de organizaciones a nivel global. A continuación documentamos los hallazgos para cada categoría aplicada durante esta auditoría de seguridad WordPress.

A01 — Control de Acceso Roto (Broken Access Control)

Esta categoría evalúa si un usuario puede acceder a páginas, archivos o funciones a las que no debería tener acceso. Las pruebas se realizaron sobre tres rutas críticas de WordPress:

Auditoría de seguridad WordPress – curl wp-admin mostrando HTTP 301 sin exposición de contenido con content-security-policy activo

/wp-admin (Panel de Administración): el acceso al panel de administración mediante curl -I https://[dominio]/wp-admin devolvió un código HTTP/2 301 que redirige correctamente hacia /wp-admin/ sin exponer ningún contenido sin autenticación. Adicionalmente, la cabecera content-security-policy: upgrade-insecure-requests confirma que hay una política de seguridad de contenido activa. Resultado: sin vulnerabilidad en este vector.

Auditoría de seguridad WordPress – curl wp-config.php devolviendo HTTP 200 exponiendo PHP 8.3.30 vulnerabilidad crítica

/wp-config.php (Archivo de Configuración): aquí se identificó la primera vulnerabilidad concreta de la auditoría. El acceso a /wp-config.php devolvió un HTTP/2 200, lo que significa que el archivo es accesible públicamente y que la cabecera x-powered-by: PHP/8.3.30 queda expuesta a cualquier visitante. Si bien el contenido del archivo en sí no se sirve directamente gracias a la configuración de PHP, la respuesta 200 confirma su existencia e indica la versión exacta del intérprete, información que puede usarse para buscar CVE específicos de esa versión. Resultado: vulnerabilidad media — exposición de información técnica.

Recomendación: añadir la siguiente regla en el archivo .htaccess de la raíz del sitio para devolver un error 403 y ocultar la cabecera x-powered-by:

<Files wp-config.php>
  order allow,deny
  deny from all
</Files>

Auditoría de seguridad WordPress – curl wp-content devolviendo HTTP 301 sin vulnerabilidad de broken access control

/wp-content (Directorio de Contenido): la respuesta fue HTTP/2 301 con redirección correcta y content-security-policy activo, sin exposición de contenido sin autenticación. Resultado: sin vulnerabilidad.

A02 — Fallos Criptográficos (Cryptographic Failures SSL/TLS)

Auditoría de seguridad WordPress – nmap ssl-enum-ciphers mostrando TLS 1.2 y TLS 1.3 con todos los cifradores calificados grado A

El escaneo con el script NSE de Nmap --script ssl-enum-ciphers -p 443 enumeró todas las suites criptográficas disponibles en el servidor. El análisis confirmó que solo están habilitados cifradores calificados como grado A tanto en TLS 1.2 como en TLS 1.3:

No se detectaron cifradores obsoletos como RC4, DES, 3DES o EXPORT, lo que significa que el sitio no es vulnerable a ataques de downgrade criptográfico conocidos como POODLE, BEAST o DROWN. Resultado: sin vulnerabilidad significativa.

A03 — Inyección SQL (SQL Injection)

Auditoría de seguridad WordPress – formulario de login con payload OR 1=1 mostrando mensaje de error genérico sin exposición de base de datos

La inyección SQL ocurre cuando un atacante inserta código SQL malicioso en campos de formularios web para manipular directamente la base de datos subyacente. La prueba clásica OR '1'='1 fue ejecutada manualmente en el formulario de inicio de sesión. El sistema respondió con un mensaje de error genérico que simplemente indica que el usuario no existe, sin revelar información sobre el esquema de base de datos, la versión de MySQL/MariaDB ni el contenido de ninguna tabla. Este comportamiento indica el uso de consultas parametrizadas o prepared statements en el backend de WordPress.

Auditoría de seguridad WordPress – resultado de sqlmap bloqueado con HTTP 403 por WAF activo en el sitio

Adicionalmente, la herramienta automatizada sqlmap fue ejecutada contra el formulario de PQR del sitio. El servidor respondió con un HTTP 403 bloqueando el escaneo automático desde el primer intento, y la herramienta reportó que no encontró formularios en la URL objetivo porque el formulario utiliza renderizado JavaScript dinámico, lo que lo hace invisible para sqlmap sin una configuración avanzada con Selenium. Resultado: sin vulnerabilidad confirmada.

A04 — Diseño Inseguro (Insecure Design): La Vulnerabilidad que Nadie Ve hasta que Es Tarde

Las vulnerabilidades de diseño inseguro no son errores de código: son decisiones arquitectónicas tomadas desde el principio del desarrollo que crean brechas de seguridad estructurales. A diferencia de un bug que puede parchearse con una actualización, el diseño inseguro requiere cambios en la lógica funcional del sistema.

Auditoría de seguridad WordPress – formulario de login con más de 5 intentos fallidos sin bloqueo vulnerabilidad fuerza bruta

La prueba ejecutada fue directa: se realizaron más de cinco intentos de inicio de sesión con credenciales incorrectas sobre el panel /wp-login.php, usando nombres de usuario y contraseñas distintas en cada intento. El sistema nunca activó ningún mecanismo de bloqueo temporal, no mostró ningún CAPTCHA adicional después del tercer intento, no incrementó el tiempo de espera entre intentos y no bloqueó la dirección IP de origen. Este comportamiento expone el sitio a ataques de fuerza bruta automatizados, en los que herramientas como Hydra o Burp Suite Intruder pueden probar miles de combinaciones de contraseñas por minuto sin interrupción.

⚠ Vulnerabilidad crítica — Riesgo alto. Esta es, sin duda, la vulnerabilidad más peligrosa identificada durante toda la auditoría, porque un atacante que obtenga acceso al panel de administración puede comprometer completamente el sitio, instalar backdoors, robar datos de clientes o redirigir el tráfico a sitios maliciosos.

Recomendación: instalar el plugin Limit Login Attempts Reloaded (gratuito, más de dos millones de instalaciones activas) y configurarlo para bloquear al usuario y la IP tras exactamente tres intentos fallidos, con un período de bloqueo progresivo. Adicionalmente, se recomienda implementar autenticación de dos factores (2FA) mediante plugins como WP 2FA o Google Authenticator for WordPress.

A05 — Mala Configuración de Seguridad (Security Misconfiguration)

Auditoría de seguridad WordPress – nikto escaneando el sitio mostrando múltiples cabeceras de seguridad faltantes PHP expuesto y vulnerabilidades

El análisis con nikto v2.5.0, la herramienta de escaneo de servidores web de referencia en el sector, identificó cuatro vulnerabilidades activas relacionadas con la configuración de cabeceras HTTP de seguridad. Esta es la categoría con más hallazgos de toda la auditoría, y la más representativa de lo que ocurre en la mayoría de las instalaciones WordPress en producción que no han pasado por una revisión de seguridad especializada:

1. Vulnerable a Clickjacking:

la cabecera X-Frame-Options no está presente. Esta cabecera le indica al navegador si una página puede ser incrustada dentro de un <iframe> en otro sitio. Sin ella, un atacante podría crear una página maliciosa que incruste el checkout de la tienda dentro de un iframe invisible, solapado sobre un botón de clic inocente. Cuando el cliente hace clic en lo que cree que es un botón legítimo, en realidad está interactuando con el formulario de pago del sitio real debajo (técnica conocida como UI Redressing).

Auditoría de seguridad WordPress – nikto identificando ausencia de X-Frame-Options y X-Content-Type-Options vulnerabilidades clickjacking MIME sniffing

2. Vulnerable a MIME Sniffing:

la cabecera X-Content-Type-Options: nosniff no está configurada. Esto permite que los navegadores más antiguos o en modos específicos “adivinen” el tipo MIME de un archivo, lo que puede llevar a que un archivo aparentemente inofensivo (como un .txt subido por un usuario) sea interpretado y ejecutado como HTML o JavaScript por el navegador.

Auditoría de seguridad WordPress – nikto identificando ausencia HSTS y Content-Encoding deflate vulnerabilidad MIME Sniffing

3. Vulnerable a MITM (Man-in-the-Middle):

la cabecera Strict-Transport-Security (HSTS) no está definida. Sin HSTS, el navegador no tiene instrucciones explícitas de usar siempre HTTPS en visitas futuras al sitio. Esto deja abierta una ventana temporal de ataque: en el momento en que un usuario accede por primera vez a la URL HTTP antes del redireccionamiento automático a HTTPS, un atacante posicionado en la misma red (por ejemplo, en una red Wi-Fi pública) podría interceptar esa primera solicitud y realizar un ataque de degradación de protocolo.

Auditoría de seguridad WordPress – nikto identificando ausencia HSTS y Content-Encoding deflate vulnerabilidades MITM

4. Vulnerable a BREACH Attack:

La cabecera Content-Encoding: deflate indica que el servidor comprime las respuestas HTTP con el algoritmo DEFLATE. Cuando la compresión HTTP se combina con HTTPS y el contenido comprimido incluye secretos predecibles (como tokens CSRF), un atacante con capacidad de observar el tráfico cifrado puede inferir el valor del secreto mediante el ataque BREACH (Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext), que explota la correlación entre la longitud del texto cifrado comprimido y el contenido del secreto.

Auditoría de seguridad WordPress – nikto identificando ausencia HSTS y Content-Encoding deflate vulnerabilidade BREACH Attack

Corrección para todas las vulnerabilidades de cabeceras: añadir las siguientes directivas en el archivo .htaccess o en la configuración del servidor web:

Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"

A06 — Componentes Vulnerables (Vulnerable and Outdated Components)

Auditoría de seguridad WordPress – WPScan identificando tema flash-pro con versión CSS 6.9.4 y enumeración de plugins en proceso

La herramienta WPScan (WordPress Security Scanner, v3.8.25) fue ejecutada con el flag --enumerate p para identificar los plugins activos y sus versiones. El escaneo confirmó que el tema activo es Flash Pro, detectado mediante la URL del archivo CSS (style.css?ver=6.9.4), aunque la versión exacta del tema no pudo determinarse definitivamente por métodos pasivos.

El WAF bloqueó la enumeración agresiva de plugins tras 754 solicitudes procesadas, lo que impidió obtener el listado completo de los 19 plugins activos. Este comportamiento del WAF es, en sí mismo, un indicador positivo: el sistema está activamente monitoreando y limitando el reconocimiento automatizado. Sin embargo, el hecho de que la versión del core de WordPress (6.9.4) y del tema sean detectables mediante métodos pasivos sigue siendo un vector de información que debe gestionarse.

Recomendación: mantener WordPress core, todos los temas y plugins actualizados a la última versión estable mediante actualizaciones automáticas. Eliminar temas y plugins inactivos que no se utilicen. Ocultar la versión de WordPress de los metadatos del HTML y del archivo readme.html.

A07 — Fallos de Identificación y Autenticación (xmlrpc.php Expuesto)

Auditoría de seguridad WordPress – xmlrpc.php accesible mostrando XML-RPC server accepts POST requests only vector de ataque

La verificación de accesibilidad al archivo xmlrpc.php confirmó que el endpoint está activo y responde con el mensaje “XML-RPC server accepts POST requests only”. Este archivo, incluido en WordPress para permitir la publicación remota desde aplicaciones móviles y clientes de terceros, es un vector de ataque conocido por tres razones principales:

Resultado: vector de ataque activo — riesgo medio. Recomendación: si no se utilizan aplicaciones móviles ni integración con herramientas externas que requieran XML-RPC, deshabilitar completamente el endpoint mediante la siguiente regla en .htaccess:

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Auditoría de seguridad WordPress – curl .git/config devolviendo HTTP 403 confirmando protección de repositorio de código fuente

Esta vulnerabilidad ocurre cuando la infraestructura expone accidentalmente el directorio .git al internet público, lo que permite a cualquier persona descargar el historial completo del código fuente del sitio, incluyendo configuraciones sensibles, credenciales hardcodeadas y la lógica de negocio interna. La prueba consistió en solicitar el archivo /.git/config mediante curl -I -s.

El servidor respondió con HTTP/1.1 403 Forbidden, lo que confirma que la infraestructura protege proactivamente los directorios sensibles y que el sitio no es vulnerable a la exposición de repositorios de código. Resultado: sin vulnerabilidad.

A09 — Fallos de Registro y Monitoreo (WAF Activo Verificado)

Esta categoría evalúa si el sistema detecta y responde activamente ante ataques en curso. El análisis se apoya directamente en los resultados del punto A03: cuando sqlmap intentó escanear el sitio, el servidor respondió con un HTTP 403 automático desde el primer intento, bloqueando completamente la herramienta antes de que pudiera completar su reconocimiento inicial.

Este comportamiento es evidencia directa de que el Web Application Firewall (WAF) está activo, monitorea los patrones de tráfico HTTP en tiempo real y responde automáticamente ante herramientas de reconocimiento conocidas. La misma respuesta de bloqueo fue observada durante el escaneo de WPScan. Resultado: aprueba satisfactoriamente.

A10 — SSRF (Server-Side Request Forgery): El Ataque Que el Servidor Rechazó

Auditoría de seguridad WordPress – resultado SSRF pingback con faultCode 0 XML-RPC módulo pingback sanitizado sin vulnerabilidad

Aprovechando que xmlrpc.php está accesible (hallazgo del punto A07), se diseñó una prueba de Server-Side Request Forgery mediante un payload XML de tipo pingback. La idea es forzar al servidor WordPress a realizar una solicitud HTTP saliente hacia un dominio externo controlado por el atacante. En una inyección SSRF exitosa, el servidor contactaría http://www.google.com y el atacante recibiría esa respuesta, lo que le permitiría explorar la red interna del servidor o exfiltrar metadatos de la instancia cloud.

El servidor respondió con una estructura XML de error completamente vacía: <faultCode>0</faultCode> y <faultString></faultString>. A diferencia de una inyección SSRF exitosa (que devuelve un código de estado numérico mayor que cero), el faultCode 0 indica que el módulo pingback está internamente sanitizado o deshabilitado para peticiones salientes. Resultado: sin vulnerabilidad por este vector.

Lo Que Esta Auditoría de Seguridad WordPress Reveló

Tras aplicar las tres fases metodológicas completas de la auditoría de seguridad WordPress, el balance es el siguiente: la infraestructura perimetral del sitio es sólida y bien configurada, con un WAF activo, CDN de Hostinger, delegación DNS en Cloudflare y criptografía TLS 1.3 de grado bancario. Sin embargo, la capa de aplicación presenta vulnerabilidades concretas y corregibles que deben abordarse antes de exponer el sitio a tráfico real de clientes.

SeveridadCategoría OWASPHallazgoAcción requerida
 AltaA04 — Insecure DesignSin límite de intentos de login (fuerza bruta)Instalar Limit Login Attempts + 2FA
MediaA01 — Broken Access Controlwp-config.php accesible (HTTP 200)Regla 403 en .htaccess
MediaA05 — Security MisconfigurationAusencia de X-Frame-Options, HSTS, X-Content-TypeConfigurar Security Headers en servidor
 MediaA07 — Auth Failuresxmlrpc.php accesible (amplificación de fuerza bruta)Deshabilitar xmlrpc.php si no es necesario
 BajaA05 — Security MisconfigurationVersión PHP 8.3.30 expuesta en cabeceraexpose_php = Off en php.ini
 BajaA05 — Security MisconfigurationBREACH Attack — Content-Encoding: deflateTokens CSRF únicos por solicitud
 CorrectoA02, A03, A08, A09, A10TLS 1.3, WAF activo, sin SQLi, sin SSRF, .git protegidoMantener y auditar periódicamente

Para más información sobre cómo implementar medidas de hardening en WordPress, puedes consultar nuestra guía completa de hardening para WordPress, nuestro artículo sobre cómo configurar cabeceras de seguridad en WordPress, y la sección de plugins de seguridad recomendados para WordPress. Si deseas entender mejor el contexto de las amenazas modernas, también te recomendamos revisar nuestro artículo sobre cómo prevenir ataques de fuerza bruta en WordPress y nuestra guía de aplicación del OWASP Top 10 en entornos WordPress.

Vídeo explicativo Punto a Punto del Laboratorio de Pentesting

Conclusiones: Lo Que Esta Auditoría Nos Enseña sobre la Seguridad en WordPress

La conclusión más importante de esta auditoría de seguridad WordPress no es técnica: es metodológica. La diferencia entre un sitio comprometido y uno protegido rara vez está en si se usó un CDN o un certificado TLS de última generación. Está en si alguien se tomó el tiempo de mirar el sitio con los ojos de un atacante, documentar lo que encontró y corregirlo sistemáticamente. Los hallazgos de esta auditoría son representativos de la mayoría de instalaciones WordPress en producción en Colombia y Latinoamérica: una infraestructura perimetral razonablemente sólida, combinada con vulnerabilidades de capa de aplicación que son triviales de explotar pero igualmente triviales de corregir.

La realización de auditorías de seguridad periódicas —al menos una por trimestre o tras cada actualización mayor de WordPress, plugins o temas— es la práctica más efectiva para mantenerse por delante de las amenazas. Las herramientas utilizadas en esta auditoría (Nmap, Nikto, WPScan, sqlmap, openssl, nslookup, curl) son todas de código abierto y gratuitas. Lo que se requiere es el conocimiento para interpretarlas y la disciplina para actuar sobre sus hallazgos.


Créditos

Autores: Luis Alberto Diuche Peña David Eduardo Martínez MoyaElizabeth Pérez González – Sergio Numael Linares

Editor / Docente evaluador: MG. Ingeniero Carlos Iván Pinzón Romero

Código del curso: UCHEG1-8

Universidad: Universidad Central

Congreso de Colombia. (2009). Ley 1273 de 2009 — De la protección de la información y de los datos. Diario Oficial No. 47.223. https://www.funcionpublica.gov.co/eva/gestornormativo/norma.php?i=34492
Lyon, G. F. (2009). Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning. Insecure.com LLC. https://nmap.org/book/
NIST. (2008). Technical Guide to Information Security Testing and Assessment — SP 800-115. National Institute of Standards and Technology. https://csrc.nist.gov/publications/detail/sp/800-115/final
OWASP Foundation. (2021). OWASP Top Ten 2021. Open Web Application Security Project. https://owasp.org/www-project-top-ten/
PTES Technical Guidelines. (2014). Penetration Testing Execution Standard. http://www.pentest-standard.org/index.php/Main_Page