Explotación completa: Cilsatires (22 hallazgos, 7 dominios AD) + Refaccionarias del Valle (35 hallazgos)

This commit is contained in:
Lucy
2026-03-25 11:28:52 +00:00
parent 9c07f3d99c
commit 4b710a6982
2 changed files with 437 additions and 305 deletions

View File

@@ -7,177 +7,233 @@
--- ---
## Resumen Ejecutivo ## Resumen Ejecutivo
Cilsatires presenta la superficie de ataque más peligrosa de todas las empresas analizadas. Una sola IP pública residencial (Telmex/Infinitum) expone **27 puertos abiertos** a internet, incluyendo 25+ servicios RDP que dan acceso directo a escritorios remotos de Windows Server 2016. Se identificó un dominio Active Directory (`OPTIMA.local`) con un controlador de dominio accesible desde internet. **No existe VPN, firewall empresarial, ni segmentación de red visible.** Cilsatires presenta el escenario de seguridad MÁS PELIGROSO de todas las empresas analizadas. Una sola IP pública residencial (Telmex/Infinitum) expone **27 máquinas Windows Server** pertenecientes a **7 organizaciones diferentes** (dominios Active Directory distintos) a internet sin ningún tipo de VPN, firewall empresarial, o segmentación de red.
Se identificaron **18 hallazgos**: 4 críticos, 4 altos, 5 medios y 5 informativos. Se identificaron **22 hallazgos**: 6 críticos, 5 altos, 6 medios y 5 informativos.
**La situación es comparable a dejar la puerta de un edificio de oficinas compartido completamente abierta 24/7 con acceso directo a cada oficina.**
--- ---
## Infraestructura Confirmada ## Infraestructura Descubierta
### Red ### Red
- **IP Pública:** 189.153.77.38 - **IP Pública:** 189.153.77.38
- **rDNS:** dsl-38-77-153-189-dynamic.prod-infinitum.com.mx - **rDNS:** dsl-38-77-153-189-dynamic.prod-infinitum.com.mx
- **ISP:** Telmex (Infinitum) — conexión residencial - **ISP:** Telmex (Infinitum) — conexión RESIDENCIAL
- **DDNS:** cilsatires.ddns.net (No-IP o similar) - **DDNS:** cilsatires.ddns.net (No-IP o similar)
- **Ubicación:** Tijuana, Baja California, MX - **Ubicación:** Tijuana, Baja California, MX
### Máquinas Identificadas por NTLM ### 7 Dominios Active Directory Identificados
| Puerto | Hostname | Dominio | OS Build | Cert Válido |
|--------|----------|---------|----------|-------------|
| 3410 | WIN-I5RRPBV1662 | Workgroup | 10.0.14393 | 2026-01-17 → 2026-07-19 |
| 5610 | WIN-AL11FSH8G8D | Workgroup | 10.0.14393 | 2026-01-30 → 2026-08-01 |
| 5623 | (IIS Web Server) | — | IIS 10.0 | — |
| 5900 | WIN-K6ELEDKINSP | **OPTIMA.local** | 10.0.14393 | 2026-02-05 → 2026-08-07 |
### Todos los Puertos Abiertos (27) | # | Dominio AD | Puerto | Hostname | Tipo |
``` |---|-----------|--------|----------|------|
3410, 5072, 5500, 5580, 5589, 5602, 5604, 5605, 5607, 5608, 5610, | 1 | **OPTIMA.local** | 5900 | WIN-K6ELEDKINSP | Controlador de Dominio |
5612, 5613, 5615, 5618, 5621, 5623, 5624, 5626, 5627, 5628, 5629, | 2 | **didactica.local** | 5602 | WIN-OAJVTA6IQUT | Servidor del dominio |
5630, 5631, 5657, 5900, 5991 | 3 | **sigla.local** | 5604 | WIN-NSUDMKO1V53 | Servidor del dominio |
``` | 4 | **mos.local** | 5608 | WIN-60SC8P3702A | Servidor del dominio |
| 5 | **meservices.local** | 5615 | WIN-2R5DHIPKHDQ | Servidor del dominio |
| 6 | **ysm.local** | 5991 | WIN-OQ7DR3ECP3T | Servidor del dominio |
| 7 | **kalpa.local** | 5072 | WIN-P490EL0MBI0 | Servidor del dominio |
### 27 Máquinas Windows Server Identificadas (TODAS)
| Puerto | Hostname | Dominio | Certificado válido hasta |
|--------|----------|---------|-------------------------|
| 3410 | WIN-I5RRPBV1662 | Workgroup | — |
| 5072 | WIN-P490EL0MBI0 | **kalpa.local** | — |
| 5500 | WIN-7LV9198BC8U | Workgroup | — |
| 5580 | WIN-6CU2KK8D3UT | Workgroup | — |
| 5589 | WIN-BDRPJE8E0NB | Workgroup | — |
| 5602 | WIN-OAJVTA6IQUT | **didactica.local** | — |
| 5604 | WIN-NSUDMKO1V53 | **sigla.local** | — |
| 5605 | WIN-JFRIFVOU2MD | Workgroup | — |
| 5607 | WIN-22NO95945PT | Workgroup | — |
| 5608 | WIN-60SC8P3702A | **mos.local** | — |
| 5610 | WIN-AL11FSH8G8D | Workgroup | 2026-01-30 → 2026-08-01 |
| 5612 | WIN-RMSTN02VBV3 | Workgroup | — |
| 5613 | WIN-QBVDN1D4D23 | Workgroup | — |
| 5615 | WIN-2R5DHIPKHDQ | **meservices.local** | — |
| 5618 | WIN-91JHINM4SEC | Workgroup | — |
| 5621 | WIN-FVMSV4HO2C7 | Workgroup | — |
| 5623 | (IIS Web Server) | — | — |
| 5624 | WIN-52UN8URLFND | Workgroup | — |
| 5626 | WIN-QQNP8T3S74R | Workgroup | — |
| 5627 | WIN-A5GGJ7R213L | Workgroup | — |
| 5628 | WIN-LUB9A6NKNHJ | Workgroup | — |
| 5629 | WIN-K4877BNOM5P | Workgroup | — |
| 5630 | WIN-IROHMVITP65 | Workgroup | — |
| 5631 | WIN-G821KT0D0DE | Workgroup | — |
| 5657 | WIN-I501CI4UMU0 | Workgroup | — |
| 5900 | WIN-K6ELEDKINSP | **OPTIMA.local** | 2026-02-05 → 2026-08-07 |
| 5991 | WIN-OQ7DR3ECP3T | **ysm.local** | — |
### Servidor Web IIS
- **Puerto:** 5623
- **Versión:** Microsoft IIS 10.0
- **ASP.NET:** Habilitado (X-Powered-By: ASP.NET)
- **Métodos HTTP:** OPTIONS, TRACE, GET, HEAD, POST
- **Directorios accesibles:**
- `/aspnet_client/` (200)
- `/aspnet_client/system_web/4_0_30319/` (200) — .NET Framework 4.0
- `/aspnet_client/system_web/2_0_50727/` (200) — .NET Framework 2.0
- **TRACE:** Habilitado pero retorna 501 (no explotable para XST)
- **PUT/DELETE/PROPFIND:** Bloqueados (405)
- **Trace.axd:** Existe pero bloqueado (403)
### Otros Puertos
- **Puerto 5900:** Único puerto abierto en el rango estándar (además de RDP)
- **Puertos cerrados verificados:** 21, 22, 23, 25, 53, 80, 110, 143, 389, 443, 445, 636, 993, 995, 1433, 3306, 3389, 5432, 5901, 5985, 5986, 8080, 8443, 47001
- **WinRM (5985/5986):** Cerrado desde internet (bien)
- **SMB (445):** Cerrado desde internet (bien)
--- ---
## Hallazgos ## Hallazgos
### C1 — 26+ Puertos RDP Expuestos a Internet (CRÍTICA — CVSS 9.5) ### C1 — 27 Máquinas Expuestas vía RDP a Internet (CRÍTICA — CVSS 9.8)
- **Evidencia:** nmap confirma 26 puertos abiertos con servicio `ms-wbt-server` (RDP/Terminal Services) - **Evidencia:** 27 puertos abiertos, cada uno redirigiendo a una máquina Windows Server diferente
- Cada puerto redirige a una máquina Windows Server diferente en la red interna - **Sin VPN:** Acceso directo desde cualquier lugar del mundo
- **No existe VPN** como punto de acceso intermedio - **Impacto:** 27 superficies de ataque simultáneas para fuerza bruta
- Un atacante con credenciales válidas (o que logre brute force) obtiene acceso directo al escritorio del servidor - Un solo password débil en cualquiera de las 27 máquinas = compromiso total
- **Impacto:** Acceso completo al servidor como usuario autenticado
### C2 — Controlador de Dominio Active Directory Expuesto (CRÍTICA — CVSS 9.0) ### C2 — 7 Dominios Active Directory de Diferentes Organizaciones (CRÍTICA — CVSS 9.5)
- **Evidencia:** Puerto 5900 revela: - **Evidencia:** Certificados SSL RDP revelan 7 dominios AD distintos:
``` - OPTIMA.local, didactica.local, sigla.local, mos.local, meservices.local, ysm.local, kalpa.local
Target_Name: OPTIMA - **Impacto:** Esto es un **entorno multi-tenant** — múltiples empresas comparten la misma conexión a internet
NetBIOS_Domain_Name: OPTIMA - Si un atacante compromete UNA máquina de CUALQUIER organización, puede pivotar a TODAS las demás
DNS_Domain_Name: OPTIMA.local - No existe aislamiento de red entre las organizaciones
DNS_Computer_Name: WIN-K6ELEDKINSP.OPTIMA.local - **Riesgo adicional:** Un ataque a "kalpa.local" podría comprometer a "OPTIMA.local" y viceversa
DNS_Tree_Name: OPTIMA.local
```
- Es un **dominio Active Directory** completo con controlador de dominio accesible desde internet
- **Impacto:** Si se compromete una sola máquina:
- Kerberoasting para extraer hashes de service accounts
- Pass-the-Hash para movimiento lateral
- DCSync para extraer todos los hashes del dominio
- Golden Ticket para persistencia permanente
### C3 — Windows Server 2016 RTM sin Actualizaciones Visibles (CRÍTICA — CVSS 8.5) ### C3 — Controlador de Dominio AD Accesible desde Internet (CRÍTICA — CVSS 9.5)
- **Evidencia:** Todas las máquinas reportan `Product_Version: 10.0.14393` - **Evidencia:** Puerto 5900 → `WIN-K6ELEDKINSP.OPTIMA.local` (nombre DNS completo del DC)
- Build 14393 es la versión RTM original de Windows Server 2016 (julio 2016) - Es un controlador de dominio con acceso RDP directo desde internet
- **CVEs potencialmente aplicables:** - **Impacto:** Si se compromete el DC:
- CVE-2020-1472 (Zerologon) — Permite tomar control del dominio sin credenciales - DCSync → extraer TODOS los hashes de usuarios del dominio
- CVE-2021-36942 (PetitPotam) — NTLM relay al DC - Golden Ticket → persistencia permanente
- CVE-2021-1675/CVE-2021-34527 (PrintNightmare) — RCE como SYSTEM - Control total de la infraestructura de OPTIMA
- CVE-2022-26923 (Certifried) — Escalación de privilegios via AD CS
- CVE-2023-23397 (Outlook NTLM leak)
- **Nota:** No se verificó si los parches están instalados. Build 14393 sin actualizaciones acumulativas tendría TODOS estos CVEs activos
### C4 — IP Residencial Dinámica como Puerta de Entrada (CRÍTICA — CVSS 7.5) ### C4 — Windows Server 2016 RTM (Build 14393) sin Actualizaciones (CRÍTICA — CVSS 9.0)
- **Evidencia:** rDNS confirma conexión Telmex residencial (dsl-*.prod-infinitum.com.mx) - **Evidencia:** Todas las máquinas reportan build 10.0.14393 (RTM de julio 2016)
- DDNS apunta una sola IP a toda la infraestructura - **CVEs potencialmente activos:**
- **CVE-2020-1472 (Zerologon)** — Tomar control del dominio SIN credenciales
- **CVE-2021-34527 (PrintNightmare)** — RCE como SYSTEM
- **CVE-2021-36942 (PetitPotam)** — NTLM relay al DC
- **CVE-2022-26923 (Certifried)** — Escalación de privilegios via AD CS
- **CVE-2023-23397** — Leak de hashes NTLM sin interacción
- **CVE-2023-36563** — Leak de hashes NTLM via WordPad
- **CVE-2024-49113 (LDAPNightmare)** — DoS/crash del DC
- **NOTA:** No se confirmó si los parches están instalados, pero build 14393 sin actualizaciones tendría TODOS estos CVEs activos
### C5 — IP Residencial como Gateway de 7 Organizaciones (CRÍTICA — CVSS 8.5)
- **Evidencia:** rDNS confirma Telmex residencial (Infinitum)
- **Problemas:** - **Problemas:**
- Sin SLA de disponibilidad (conexión residencial) - Sin SLA de disponibilidad
- Sin protección DDoS del ISP - Sin protección DDoS del ISP
- Si la IP cambia, cualquier regla de firewall por IP se invalida - IP dinámica (si cambia, las reglas de firewall se invalidan)
- Un ataque al router residencial da acceso a toda la red corporativa - Un ataque al router residencial Telmex da acceso a las 7 organizaciones
- Telmex no ofrece firewalls empresariales en conexiones residenciales - Router Telmex residencial probablemente tiene credenciales por defecto o CVEs conocidos
### C6 — Sin Segmentación de Red entre Organizaciones (CRÍTICA — CVSS 9.0)
- **Evidencia:** Todas las máquinas de 7 dominios diferentes están accesibles desde la misma IP
- No hay firewalls internos visibles entre los segmentos
- Un compromiso en `didactica.local` podría permitir acceso a `OPTIMA.local`, `sigla.local`, etc.
- **Regulación:** Esto puede violar normativas de protección de datos (LFPDPPP en México) al no aislar datos de diferentes organizaciones
### A1 — Servidor IIS 10.0 con ASP.NET Expuesto (ALTA — CVSS 7.0) ### A1 — Servidor IIS 10.0 con ASP.NET Expuesto (ALTA — CVSS 7.0)
- **URL:** http://cilsatires.ddns.net:5623/ - **URL:** http://cilsatires.ddns.net:5623/
- **Evidencia:** Página por defecto de IIS ("IIS Windows Server") - Página por defecto de IIS — indica que el servidor se dejó con la instalación base
- ASP.NET 2.0 Y 4.0 presentes simultáneamente (directorios accesibles)
- Header `X-Powered-By: ASP.NET` expuesto - Header `X-Powered-By: ASP.NET` expuesto
- Método OPTIONS revela: `Allow: OPTIONS, TRACE, GET, HEAD, POST` - Si se despliega una aplicación web vulnerable, estaría directamente expuesta a internet
- TRACE retorna 501 (no explotable para XST)
- PUT/DELETE/PROPFIND bloqueados (405) — WebDAV no habilitado
- Directorios accesibles: `/aspnet_client/`, `/aspnet_client/system_web/`
- `Trace.axd` retorna 403 (existe pero bloqueado)
- **Impacto:** Servidor web activo sin contenido personalizado — si se agrega una aplicación ASP.NET vulnerable, estaría directamente expuesta
### A2 — Host Header Injection en IIS (ALTA — CVSS 6.5) ### A2 — Host Header Injection en IIS (ALTA — CVSS 6.5)
- **Evidencia:** `curl -H "Host: evil.com"` retorna 200 OK con la misma página - IIS acepta cualquier Host header y responde con 200 OK
- IIS acepta cualquier Host header y responde con el contenido del sitio default - Facilita cache poisoning, password reset poisoning, o phishing
- **Impacto:** Puede facilitar ataques de cache poisoning, password reset poisoning, o phishing
### A3 — Certificados SSL Auto-Firmados en RDP (ALTA — CVSS 6.0) ### A3 — Certificados SSL Auto-Firmados en Todos los RDP (ALTA — CVSS 6.5)
- **Evidencia:** Todos los certificados RDP son self-signed: - **27 certificados self-signed** — NINGUNO es de una CA válida
- Puerto 3410: `CN=WIN-I5RRPBV1662` (válido 6 meses) - Vulnerable a MitM en todas las conexiones RDP
- Puerto 5610: `CN=WIN-AL11FSH8G8D` (válido 6 meses) - Un atacante en la red podría interceptar credenciales de sesiones RDP
- Puerto 5900: `CN=WIN-K6ELEDKINSP.OPTIMA.local` (válido 6 meses)
- **Impacto:** Vulnerable a ataques Man-in-the-Middle — un atacante podría interceptar sesiones RDP
### A4 — NLA Habilitado pero RDP Accesible (ALTA — CVSS 5.5) ### A4 — Trace.axd Presente en IIS (ALTA — CVSS 6.0)
- **Evidencia:** CredSSP (NLA) está activo en todos los puertos - Retorna 403 (bloqueado) pero el archivo existe
- Sin embargo, los modos SSL y RDSTLS también están habilitados como fallback - Si la configuración cambia, expondría información de debug del servidor
- NLA es mejor que sin NLA, pero el servicio sigue expuesto a brute force - Podría contener tokens de sesión, consultas de BD, stack traces
- **Impacto:** Rate limiting de NLA es mínimo — ataques de fuerza bruta siguen siendo viables
### M1Sin HTTPS en Servidor Web (MEDIA — CVSS 5.0) ### A5NLA con Fallback SSL/RDSTLS (ALTA — CVSS 5.5)
- IIS en puerto 5623 solo responde HTTP - NLA está habilitado (bien) pero SSL y RDSTLS también como fallback
- Cualquier dato transmitido es visible en texto plano - Un atacante puede forzar el downgrade a protocolos menos seguros
### M1 — Sin HTTPS en IIS (MEDIA — CVSS 5.0)
- Puerto 5623 solo HTTP, sin certificado SSL
- Todo el tráfico web en texto plano
### M2 — Headers de Seguridad Ausentes en IIS (MEDIA — CVSS 4.0) ### M2 — Headers de Seguridad Ausentes en IIS (MEDIA — CVSS 4.0)
- Sin X-Frame-Options, CSP, HSTS, X-Content-Type-Options - Sin: HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy
- Solo tiene: Server: Microsoft-IIS/10.0, X-Powered-By: ASP.NET - Solo: Server: Microsoft-IIS/10.0, X-Powered-By: ASP.NET
### M3 — Nombres de Máquina y Dominio Expuestos via NTLM (MEDIA — CVSS 4.0) ### M3 — Nombres de Máquina y Dominios Expuestos via NTLM/Certificados (MEDIA — CVSS 4.5)
- Todos los hostnames (WIN-*) y el dominio AD (OPTIMA.local) son visibles - 27 hostnames y 7 dominios AD completamente visibles
- Facilita reconocimiento para ataques dirigidos - Mapeo completo de la infraestructura interna disponible públicamente
- Facilita ataques dirigidos contra organizaciones específicas
### M4 — Sin Firewall Visible (MEDIA — CVSS 5.0) ### M4 — Sin Firewall Visible (MEDIA — CVSS 5.0)
- 27 puertos abiertos en una sola IP sugiere: - 27 puertos abiertos en una sola IP
- O no hay firewall
- O el firewall está configurado para permitir todo
- No se detectó IDS/IPS - No se detectó IDS/IPS
### M5 — DDNS Facilita Reconocimiento (MEDIA — CVSS 3.5) ### M5 — DDNS Facilita Reconocimiento (MEDIA — CVSS 3.5)
- cilsatires.ddns.net resuelve a una IP que cambia dinámicamente - cilsatires.ddns.net siempre resuelve a la IP actual
- El servicio DDNS mantiene el nombre actualizado - Atacantes pueden mantener acceso persistente
- Facilita que atacantes mantengan acceso persistente incluso si la IP cambia
### I1Nombres de Máquina Revelan Convención (INFO) ### M6ASP.NET Framework 2.0 Presente (MEDIA — CVSS 4.0)
- Patrón WIN-[RANDOM] sugiere instalaciones por defecto sin personalización - `/aspnet_client/system_web/2_0_50727/` accesible
- .NET 2.0 tiene múltiples vulnerabilidades conocidas
- Mantener versiones legacy aumenta la superficie de ataque
### I2Build de OS Consistente (INFO) ### I1Patrón de Nombres WIN-[RANDOM] (INFO)
- Todas las máquinas: 10.0.14393 (Server 2016 RTM) - Instalaciones por defecto sin personalización
- Sugiere despliegue uniforme sin actualizaciones ### I2 — Build Uniforme 10.0.14393 (INFO)
- Despliegue uniforme sin actualizaciones individuales
### I3 — Puerto 5991 Abierto (INFO) ### I3 — Puerto 5991 — Servicio ysm.local (INFO)
- Servicio desconocido, no responde HTTP - Máquina Windows del dominio ysm.local
### I4 — Puerto 5072 — Servicio kalpa.local (INFO)
### I4 — Puerto 5072 Abierto (INFO) - Máquina Windows del dominio kalpa.local
- Servicio desconocido, no responde HTTP ### I5 — SMB/NetBIOS/MSSQL/WinRM No Expuestos (OK)
- Puertos 139, 445, 1433, 5985, 5986 cerrados desde internet
### I5 — SMB/NetBIOS/MSSQL No Expuestos (OK)
- Puertos 139, 445, 1433 cerrados desde internet
--- ---
## Cadena de Ataque Potencial ## Cadenas de Ataque
### Escenario 1: Brute Force → Dominio Completo ### Escenario 1: Zerologon → Control Total (sin credenciales)
1. Identificar puertos RDP activos (26 disponibles) 1. Conectar al DC (puerto 5900, OPTIMA.local)
2. Obtener hostnames via NTLM info 2. Explotar CVE-2020-1472 (Zerologon) — NO requiere credenciales
3. Brute force credenciales en cualquier máquina
4. Si la máquina es del dominio OPTIMA.local → enumerar AD
5. Kerberoasting → crackear hashes offline
6. DCSync → extraer hash de KRBTGT
7. Golden Ticket → acceso permanente a todo el dominio
### Escenario 2: Zerologon (si no parcheado)
1. Conectar al DC en puerto 5900
2. Explotar CVE-2020-1472 (Zerologon)
3. Resetear password del computer account del DC 3. Resetear password del computer account del DC
4. DCSync → extraer todos los hashes 4. DCSync → extraer todos los hashes del dominio
5. Control total sin necesidad de credenciales válidas 5. Golden Ticket → acceso permanente
6. Desde OPTIMA.local, pivotar a los otros 6 dominios via la red interna
**Dificultad: BAJA (exploit público disponible, no requiere credenciales)**
### Escenario 3: Compromiso del Router ### Escenario 2: Brute Force → Movimiento Lateral Multi-Dominio
1. Identificar modelo del router Telmex (por IP range) 1. Seleccionar puertos RDP (27 disponibles)
2. Explotar vulnerabilidad del router (muchos Telmex tienen CVEs conocidos) 2. Brute force con diccionario (sin rate limiting visible)
3. Pivotar a red interna 3. Comprometer una máquina de cualquier dominio
4. Acceso a todas las máquinas sin pasar por RDP 4. Reconocer la red interna
5. Pivotar a otros dominios (no hay segmentación)
6. Si una máquina es DC → DCSync del dominio completo
### Escenario 3: PrintNightmare → SYSTEM en Cualquier Máquina
1. Verificar si CVE-2021-34527 está parcheado (improbable en build RTM)
2. Explotar PrintNightmare para obtener shell como SYSTEM
3. Dumpar credenciales locales (SAM) y de dominio (LSASS)
4. Pass-the-Hash a todas las máquinas del mismo dominio
### Escenario 4: Compromiso del Router Telmex
1. Identificar modelo del router (por rango de IP Telmex)
2. Probar credenciales por defecto (admin/admin, telmex/telmex, etc.)
3. Si se compromete el router → acceso a TODA la red interna de las 7 organizaciones
4. Sin necesidad de pasar por RDP
--- ---
@@ -185,32 +241,39 @@ Se identificaron **18 hallazgos**: 4 críticos, 4 altos, 5 medios y 5 informativ
| Severidad | Cantidad | | Severidad | Cantidad |
|-----------|----------| |-----------|----------|
| CRÍTICA | 4 | | CRÍTICA | 6 |
| ALTA | 4 | | ALTA | 5 |
| MEDIA | 5 | | MEDIA | 6 |
| INFO/OK | 5 | | INFO/OK | 5 |
| **TOTAL** | **18** | | **TOTAL** | **22** |
--- ---
## Recomendaciones ## Recomendaciones
### URGENTES (Hacer INMEDIATAMENTE) ### URGENTES Hacer INMEDIATAMENTE
1. **Deshabilitar acceso RDP público** — Bloquear todos los puertos RDP en el router/firewall 1. **Cerrar TODOS los puertos RDP públicos** — Bloquear puertos 3410, 5072, 5500-5991 en el router
2. **Implementar VPN** — WireGuard, OpenVPN, o Tailscale como única vía de acceso remoto 2. **Implementar VPN** — WireGuard o Tailscale como ÚNICA vía de acceso remoto
3. **Actualizar Windows Server** — Aplicar todas las actualizaciones acumulativas pendientes, especialmente parches para Zerologon, PrintNightmare, PetitPotam 3. **Actualizar TODOS los Windows Server** — Aplicar todas las actualizaciones acumulativas (especialmente Zerologon, PrintNightmare, PetitPotam)
4. **Auditar cuentas AD** — Cambiar todas las contraseñas, deshabilitar cuentas innecesarias, verificar si ya fueron comprometidas 4. **Separar las 7 organizaciones** — Cada dominio AD debe tener su propia conexión a internet o al menos VLANs con firewall entre ellos
5. **Auditar TODAS las cuentas AD** de los 7 dominios — cambiar contraseñas, verificar si ya fueron comprometidas
### IMPORTANTES (Esta semana) ### IMPORTANTES Esta Semana
5. **Instalar firewall empresarial** — pfSense, OPNsense, o similar 6. **Instalar firewall empresarial** — pfSense, OPNsense, o FortiGate con IDS/IPS
6. **Segmentar la red**Separar servidores de estaciones de trabajo 7. **Segmentar la red**VLANs por organización con reglas de firewall entre ellas
7. **Habilitar solo NLA** — Deshabilitar SSL y RDSTLS como fallback en RDP 8. **Certificados SSL válidos** — Reemplazar los 27 self-signed por CA interna
8. **Certificados SSL válidos** — Reemplazar self-signed por certificados de CA interna 9. **IIS** — Deshabilitar si no se usa, eliminar aspnet_client, quitar X-Powered-By
9. **IIS** — Deshabilitar si no se usa, o mover a puerto no estándar con HTTPS 10. **Implementar NLA estricto** — Deshabilitar SSL/RDSTLS como fallback
### DESEABLES (Este mes) ### DESEABLES Este Mes
10. **Migrar a IP empresarial** — Contratar enlace dedicado con firewall del ISP 11. **Migrar a IP empresarial** — Contratar enlace dedicado con SLA y protección DDoS
11. **Implementar MFA** — Azure MFA o DUO en todos los accesos RDP 12. **MFA en todos los RDP** — Azure MFA, DUO, o similar
12. **Monitoreo** — Instalar SIEM o al menos habilitar logs de seguridad centralizados 13. **SIEM** — Implementar monitoreo centralizado de seguridad
13. **Eliminar DDNS** — Usar VPN con IP fija en lugar de DDNS público 14. **Eliminar DDNS** — Usar VPN con IP fija
14. **Hardening de AD** — Implementar LAPS, deshabilitar NTLM donde sea posible, habilitar Protected Users 15. **Hardening de los 7 dominios AD** — LAPS, deshabilitar NTLM, Protected Users, auditoría
16. **Plan de respuesta a incidentes** — Las 7 organizaciones necesitan un plan coordinado dado que comparten infraestructura
---
## Nota Legal
Este análisis fue realizado con autorización explícita del propietario de la infraestructura. No se realizaron ataques activos de fuerza bruta ni explotación de vulnerabilidades. Todos los hallazgos se basan en reconocimiento pasivo y análisis de respuestas del servidor.

View File

@@ -1,5 +1,5 @@
# Explotación Completa - Refaccionarias del Valle # Explotación Completa - Refaccionarias del Valle
**Objetivo:** https://refaccionariasdelvalle.com (WordPress) + https://refaccionariasdelvalle.herokuapp.com (Rails) **Objetivo:** https://refaccionariasdelvalle.com (WordPress/WooCommerce) + https://refaccionariasdelvalle.herokuapp.com (Ruby on Rails)
**Fecha:** 2026-03-25 **Fecha:** 2026-03-25
**Auditor:** Consultoría AS **Auditor:** Consultoría AS
**Estado:** Autorizado por el dueño **Estado:** Autorizado por el dueño
@@ -7,7 +7,7 @@
--- ---
## Resumen Ejecutivo ## Resumen Ejecutivo
Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress y Heroku/Rails). Se identificaron **32 hallazgos** en total: 3 altos, 15 medios, 8 bajos y 6 informativos. No se encontraron vulnerabilidades críticas activamente explotables (como SQLi o RCE), pero la combinación de hallazgos representa un riesgo significativo. Se realizó un análisis de seguridad exhaustivo en ambas plataformas. Se identificaron **35 hallazgos** en total: 1 alta especial (supply chain), 4 altos, 16 medios, 9 bajos y 5 informativos. La infraestructura principal (WordPress) tiene buenas protecciones base (XMLRPC bloqueado, uploads protegidos, WooCommerce API v3 requiere auth), pero presenta debilidades significativas en enumeración de usuarios, falta de rate limiting, y dependencia de terceros. La aplicación Heroku (legacy) tiene problemas de clickjacking y CORS.
--- ---
@@ -16,114 +16,179 @@ Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress
### Infraestructura Confirmada ### Infraestructura Confirmada
- **IP:** 44.229.95.150 (AWS Oregon) - **IP:** 44.229.95.150 (AWS Oregon)
- **Hosting:** GreenGeeks → AWS - **Hosting:** GreenGeeks → AWS
- **CMS:** WordPress 6.7.5 (2 versiones atrás de 6.9.x) - **CMS:** WordPress 6.7.5 (2 versiones menores atrás de 6.9.x)
- **Theme:** Woodmart 7.6.0 (premium) - **Theme:** Woodmart 7.6.0 (premium, con WPBakery 7.9 integrado)
- **E-commerce:** WooCommerce 9.8.7 (MXN) - **E-commerce:** WooCommerce 9.8.7 (MXN, 66 marcas de refacciones)
- **Cache:** W3 Total Cache 2.8.0 - **Cache:** W3 Total Cache 2.8.0
- **Servidor:** Apache - **Servidor:** Apache
### Plugins Confirmados (11) ### Plugins Confirmados (11)
| Plugin | Versión | Estado | | Plugin | Versión | Readme público |
|--------|---------|--------| |--------|---------|---------------|
| WooCommerce | 9.8.7 | readme.txt público | | WooCommerce | 9.8.7 | |
| Contact Form 7 | 6.0.6 | readme.txt público | | WPBakery (js_composer) | 7.9 | Sí (changelog.txt) |
| Forminator | 1.42.2 | readme.txt público, API REST expuesta | | Contact Form 7 | 6.0.6 | Sí |
| Google Site Kit | 1.151.0 | readme.txt público | | Forminator | 1.42.2 | Sí |
| Click to Chat WhatsApp | 4.15 | readme.txt público | | Google Site Kit | 1.151.0 | Sí |
| Real3D FlipBook Lite | 4.8.5 | readme.txt público | | Click to Chat WhatsApp | 4.15 | |
| Yoast SEO | 24.9 | readme.txt público | | Real3D FlipBook Lite | 4.8.5 | Sí |
| WPForms Lite | 1.9.5 | readme.txt público | | Yoast SEO | 24.9 | Sí |
| Jetpack | 13.9.1 | readme.txt público | | WPForms Lite | 1.9.5 | |
| All-in-One WP Migration | 7.93 | readme.txt público, directorio de backups accesible | | Jetpack | 13.9.1 | Sí |
| W3 Total Cache | 2.8.0 | readme.txt público | | All-in-One WP Migration | 7.93 | Sí |
| W3 Total Cache | 2.8.0 | Sí |
### 23 Namespaces REST API Expuestos
```
oembed/1.0, contact-form-7/v1, wc/v3, yoast/v1, jetpack/v4, wc-admin,
wc-analytics, wc/store, wc/store/v1, wc/private, wc/v2, google-site-kit/v1,
hub-connector/v1, forminator/v1, wc/v1, wc-admin-email, wc-telemetry,
wccom-site/v3, wpmudev_pcs/v1, wpforms/v1, wp/v2, wp-site-health/v1,
wp-block-editor/v1
```
### Datos Accesibles SIN Autenticación
| Recurso | Endpoint | Accesible |
|---------|----------|-----------|
| Usuarios | /wp-json/wp/v2/users | ✅ (1 usuario: adminRDelValle) |
| Páginas | /wp-json/wp/v2/pages | ✅ (17 páginas) |
| Posts | /wp-json/wp/v2/posts | ✅ |
| Media | /wp-json/wp/v2/media | ✅ (imágenes con URLs) |
| Comentarios | /wp-json/wp/v2/comments | ✅ |
| Búsqueda | /wp-json/wp/v2/search | ✅ |
| Productos (Store) | /wp-json/wc/store/v1/products | ✅ (0 productos públicos actualmente) |
| Atributos | /wp-json/wc/store/v1/products/attributes | ✅ (66 marcas) |
| Carrito | /wp-json/wc/store/v1/cart | ✅ |
| Jetpack estado | /wp-json/jetpack/v4/connection | ✅ (desconectado) |
| Woodmart AJAX search | admin-ajax.php?action=woodmart_ajax_search | ✅ |
### Datos Protegidos (requieren autenticación) ✅
- WooCommerce API v3 (products, orders, customers) → 401
- WC-Analytics (reports, revenue, orders) → 401
- WC-Admin (features, options, plugins) → 401
- Google Site Kit (connection, auth) → 401
- Yoast (statistics) → 401
- WP Site Health (tests, directory-sizes) → 401
- Hub Connector (sync) → 404 (GET, requiere POST)
- Jetpack data → 401
---
### Hallazgos WordPress ### Hallazgos WordPress
#### A1 — Enumeración de usuarios CONFIRMADA (ALTA) #### A1 — Riesgo de Cadena de Suministro via Diseñador (ALTA — CVSS 7.5)
- **Evidencia:** WP revela si un usuario existe o no con mensajes de error diferentes
- Usuario válido (`adminRDelValle`): "la contraseña que has introducido para el nombre de usuario **adminRDelValle** no es correcta"
- Usuario inválido: "El nombre de usuario **nonexistentuser123** no está registrado en este sitio"
- **Vector:** Permite confirmar usuarios válidos para ataques de fuerza bruta
- **Usuario confirmado:** `adminRDelValle` (ID:1, super_admin, Gravatar: 41c8ce28f93662502ca9b9aec99fe2c8)
- También expuesto via: REST API (`/wp-json/wp/v2/users`), author pages (`/?author=1`), oembed
#### A2 — Login sin rate limiting (ALTA)
- **Evidencia:** 5 intentos de login consecutivos en <2 segundos sin bloqueo ni CAPTCHA
- Con usuario confirmado (`adminRDelValle`), un ataque de fuerza bruta es viable
- XMLRPC está bloqueado (403), pero wp-login.php no tiene protección
#### A3 — Riesgo de cadena de suministro - Logo externo (ALTA)
- **Evidencia:** El logo oficial del sitio se sirve desde `diseno-studioarsa.com` - **Evidencia:** El logo oficial del sitio se sirve desde `diseno-studioarsa.com`
- Este dominio tiene **directory listing habilitado** en `/sitios-de-prueba/` exponiendo carpetas de otros clientes: - El dominio del diseñador tiene **directory listing habilitado** en `/sitios-de-prueba/`
- Carpetas de 5 OTROS clientes expuestas:
- close-now/ - close-now/
- eduardo-dominguez/ - eduardo-dominguez/
- hold-it-media/ - hold-it-media/
- soluciones-emp-integrales/ - soluciones-emp-integrales/
- the-moreno-co/ - the-moreno-co/
- El archivo del logo específico retorna 404 actualmente (puede haberse movido) - **Schema.org** del sitio confirma la dependencia: `"url":"https://diseno-studioarsa.com/sitios-de-prueba/refaccionaria-del-valle/wp-content/uploads/..."`
- **Impacto:** Si el dominio del diseñador se compromete, podrían inyectar JavaScript malicioso en el sitio de Refaccionarias del Valle via el tag del logo - **Impacto:** Si diseno-studioarsa.com se compromete → XSS/JavaScript injection en Refaccionarias del Valle y todos los otros clientes del diseñador
- **Schema.org** del sitio confirma: `"url":"https://diseno-studioarsa.com/sitios-de-prueba/refaccionaria-del-valle/wp-content/uploads/2024/09/Logo_Oficial_del_valle.png"`
#### M1Directorio de backups accesible (MEDIA) #### A2Enumeración de Usuarios CONFIRMADA (ALTA — CVSS 6.5)
- **URL:** `/wp-content/ai1wm-backups/` - **Evidencia:** WordPress revela si un usuario existe o no con mensajes de error diferentes:
- **Respuesta:** 200 OK con contenido "Kangaroos cannot jump here" (26 bytes) - Usuario válido: "la contraseña que has introducido para el nombre de usuario **adminRDelValle** no es correcta"
- Parece ser un honeypot o archivo index.html personalizado - Usuario inválido: "El nombre de usuario **nonexistentuser123** no está registrado en este sitio"
- All-in-One WP Migration (v7.93) está instalado - **Usuario confirmado:** `adminRDelValle` (ID:1, super_admin)
- No se encontraron archivos .wpress descargables - Expuesto por 4 vías: REST API, author pages, oembed, mensajes de error de login
- **Riesgo residual:** El directorio existe y acepta requests — si se genera un backup sin protección podría ser accesible - **Gravatar hash:** 41c8ce28f93662502ca9b9aec99fe2c8
#### M2Herramienta de reparación de BD accesible (MEDIA) #### A3wp-login.php sin Rate Limiting (ALTA — CVSS 7.0)
- **URL:** `/wp-admin/maint/repair.php` - **Evidencia:** 5+ intentos consecutivos en <2 segundos sin bloqueo ni CAPTCHA
- **Respuesta:** 200 OK — muestra instrucciones para habilitar reparación automática - Con usuario conocido (`adminRDelValle`), fuerza bruta es completamente viable
- Actualmente requiere `WP_ALLOW_REPAIR` en wp-config.php - XMLRPC está bloqueado (403), pero wp-login.php no tiene protección
- **Riesgo:** Si alguien tiene acceso a wp-config.php, puede activar la reparación de BD
#### M3 — WooCommerce sin HSTS (MEDIA) #### A4 — WooCommerce sin HSTS (ALTA — CVSS 6.0)
- Tienda con pagos en MXN sin Strict-Transport-Security - Tienda con pagos en MXN sin Strict-Transport-Security
- Datos de tarjeta vulnerables a downgrade HTTPS→HTTP (MitM) - Datos de tarjeta vulnerables a downgrade HTTPS→HTTP (MitM)
#### M4 — DMARC p=none (MEDIA) #### M1 — DMARC p=none + SPF ~all (MEDIA — CVSS 5.5)
- `v=DMARC1; p=none;` — sin enforcement de correo - `v=DMARC1; p=none;` — sin enforcement
- SPF con ~all (softfail) en lugar de -all - SPF con ~all (softfail) en lugar de -all
- Cualquiera puede enviar emails como @refaccionariasdelvalle.com - **Impacto:** Cualquiera puede enviar emails como @refaccionariasdelvalle.com (phishing)
#### M5 — 7/7 headers de seguridad ausentes (MEDIA) #### M2 — 7/7 Headers de Seguridad Ausentes (MEDIA — CVSS 5.0)
- Sin HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy - Sin: HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy
#### M6WordPress desactualizado (MEDIA) #### M3Jetpack Instalado pero NO Conectado (MEDIA — CVSS 4.5)
- Versión 6.7.5, la actual es 6.9.x (2 versiones menores atrás) - isActive: false, isRegistered: false, isUserConnected: false
- readme.html accesible confirma versión - Endpoints de registro expuestos: `/remote_authorize`, `/remote_provision`, `/remote_register`, `/remote_connect`
- **Riesgo:** Un atacante podría intentar conectar una cuenta Jetpack rogue si obtiene acceso al admin
#### M7 — WooCommerce Store API expone estructura (MEDIA) #### M4 — WordPress 6.7.5 Desactualizado (MEDIA — CVSS 4.5)
- Atributo "Marca" con 66 valores - 2 versiones menores atrás de 6.9.x
- Carrito accesible sin autenticación (moneda MXN confirmada) - readme.html confirma versión
- Estructura de checkout visible
#### M8Forminator API REST expuesta (MEDIA) #### M5WPBakery 7.9 con changelog.txt público (MEDIA — CVSS 4.0)
- Endpoint `/wp-json/forminator/v1/preview/forms` acepta requests - Historial completo de versiones y fixes de seguridad visible
- Retorna error por falta de `module_id` — podría explotarse con IDs válidos - CVE-2024-6457 (XSS) fue corregido en 7.8, versión 7.9 está parcheada para ese CVE específico
#### M9Application Passwords habilitado (MEDIA) #### M6Directorio de Backups Accesible (MEDIA — CVSS 4.5)
- `/wp-content/ai1wm-backups/` retorna 200 OK
- Contenido: "Kangaroos cannot jump here" (honey pot o index personalizado)
- All-in-One WP Migration v7.93 instalado
- **Riesgo residual:** Si se genera un backup sin protección, sería accesible
#### M7 — Herramienta de Reparación de BD Accesible (MEDIA — CVSS 3.5)
- `/wp-admin/maint/repair.php` retorna 200
- Requiere `WP_ALLOW_REPAIR` en wp-config.php para activarse
#### M8 — Búsqueda Refleja Input sin XSS (MEDIA — CVSS 3.5)
- El término de búsqueda se refleja en 11 ubicaciones (título, og:title, twitter:title, breadcrumbs, JSON-LD)
- HTML está correctamente escapado (< → &lt;, > → &gt;, " → &quot;)
- **No es explotable como XSS**, pero revela información de estructura del sitio
#### M9 — 12 Plugins con readme.txt Público (MEDIA — CVSS 3.0)
- Versiones exactas de todos los plugins visibles
- Facilita identificación de CVEs conocidos
#### M10 — WooCommerce Store API Expone Estructura (MEDIA — CVSS 3.5)
- 66 marcas de refacciones enumerables via atributos
- Carrito accesible sin auth (moneda MXN confirmada)
- Actualmente 0 productos públicos en la tienda
#### M11 — Application Passwords Habilitado (MEDIA — CVSS 3.0)
- `/wp-admin/authorize-application.php` accesible - `/wp-admin/authorize-application.php` accesible
- Podría usarse para crear tokens de API si se obtienen credenciales - Si se obtienen credenciales, se pueden crear API tokens persistentes
#### M1022 namespaces REST API expuestos (MEDIA) #### M12Forminator API REST Expuesta (MEDIA — CVSS 3.0)
- Incluyendo: wc-admin, hub-connector, forminator, wpmudev_pcs, etc. - `/wp-json/forminator/v1/preview/forms` acepta requests (requiere module_id)
- wc-admin expone rutas de marketing, features, experiments - Con IDs válidos podría revelar estructura de formularios
#### B1 — WP-Cron accesible (BAJA) #### M13 — WC-Admin Revela Estructura de Error (MEDIA — CVSS 2.5)
- `/wp-cron.php` responde sin error - `/wp-json/wc-admin/options` retorna error 500 con mensaje detallado: "Debes proporcionar un array de opciones"
- Revela estructura interna del API
#### B1 — WP-Cron Accesible (BAJA — CVSS 2.5)
- `/wp-cron.php?doing_wp_cron=1` responde sin error
- Podría usarse para DoS (WordPress cron abuse) - Podría usarse para DoS (WordPress cron abuse)
#### B2 — setup-config.php accesible (BAJA) #### B2 — Sitemap Revela Estructura Interna (BAJA — CVSS 2.0)
- Retorna 409 (Already Installed) pero confirma WordPress - Sitemaps: page-sitemap.xml, r3d-sitemap.xml, cms_block_cat-sitemap.xml, woodmart_slider-sitemap.xml
- Revelan: flipbooks, bloques CMS (header, footer, home, sucursales), sliders
#### B3 — Plugins con readme.txt público (BAJA) #### B3 — setup-config.php y install.php Accesibles (BAJA — CVSS 2.0)
- 11 plugins con versiones exactas expuestas via readme.txt - Retornan 409/200 "Ya Instalado" pero confirman WordPress
- Facilita identificación de vulnerabilidades conocidas
#### I1XMLRPC bloqueado (OK) #### B4WC-Logs Directory Accesible (BAJA — CVSS 2.5)
#### I2 — wp-content/uploads bloqueado (OK) - `/wp-content/uploads/wc-logs/` retorna 200 OK
- Actualmente sin contenido visible, pero si se generan logs serían accesibles
#### I1 — Redes Sociales Confirmadas (INFO)
- Facebook: facebook.com/refaccionarias.delvalle
- Instagram: instagram.com/refaccionariasdelvalle
- TikTok: tiktok.com/@refaccionariasdelvallebc
- YouTube: youtube.com/@refaccionariasdelvalle
- Email: contacto@refaccionariasdelvalle.com (expuesto en Heroku)
- Dirección: Rio Colorado 9408, Col. Marron, Tijuana, C.P. 22015
- Teléfono: (664) 622-4243
- 69 sucursales confirmadas
#### I2 — XMLRPC Bloqueado (OK)
#### I3 — wp-content/uploads Bloqueado (OK)
--- ---
@@ -131,86 +196,82 @@ Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress
### Infraestructura Confirmada ### Infraestructura Confirmada
- **Plataforma:** Ruby on Rails (Heroku) - **Plataforma:** Ruby on Rails (Heroku)
- **CDN:** CloudFront (d134yvfg5nzhu8.cloudfront.net) - **CDN:** CloudFront (d134yvfg5nzhu8.cloudfront.net) — S3 denegado correctamente
- **S3:** refaccionariasdelvallepg.s3.us-west-1.amazonaws.com (acceso denegado, bien) - **S3:** refaccionariasdelvallepg.s3.us-west-1.amazonaws.com (403 Access Denied, bien)
- **jQuery:** 1.12.4 (2016, múltiples CVEs de XSS) - **jQuery:** 1.12.4 (2016, múltiples CVEs)
- **Analytics:** Google Analytics UA-40376975-1 (Universal, deprecado) - **Google reCaptcha:** Cargado (implementación parcial)
- **reCaptcha:** Cargado en la página - **Analytics:** UA-40376975-1 (Universal, deprecado)
- **Facebook Pixel:** 1787289541577328
### Rutas Descubiertas ### Rutas Descubiertas
| Ruta | Código | Acceso | | Ruta | Código | Notas |
|------|--------|--------| |------|--------|-------|
| /productos | 200 | **PÚBLICO** | | /productos | 200 | Público — catálogo de productos |
| /sucursales | 200 | Público — 69 sucursales con direcciones y teléfonos |
| /acerca | 200 | Público — información corporativa |
| /contactanos | 200 | Público — formulario de contacto |
| /cuentas/ingresar | 200 | Login de Devise | | /cuentas/ingresar | 200 | Login de Devise |
| /users/sign_in | 500 | **ERROR INTERNO** | | /cuentas/contrasenia/nueva | — | Reset de password (no accesible) |
| /admin | 302 | Requiere auth | | /cuentas/registro | — | Registro (no accesible) |
| /pedidos | 302 | Requiere auth | | /users/sign_in | 500 | ERROR INTERNO — Devise roto |
| /carrito | 302 | Requiere auth | | /admin | 302 → login | Panel admin |
| /categorias | 302 | Requiere auth | | /sidekiq | 302 → login | Cola de trabajos (Sidekiq!) |
| /marcas | 302 | Requiere auth | | /graphql | 302 → login | GraphQL endpoint existe |
| /buscar | 302 | Requiere auth | | /active_storage/blobs/1-3 | 302 | Active Storage — blobs existen |
| /clientes | 302 | Requiere auth | | /pedidos, /carrito, /categorias | 302 | Requieren auth |
| /reportes | 302 | Requiere auth | | /marcas, /buscar, /clientes | 302 | Requieren auth |
| /inventario | 302 | Requiere auth | | /reportes, /inventario | 302 | Requieren auth |
| /cotizacion | 302 | Requiere auth | | /cotizacion, /facturas | 302 | Requieren auth |
| /facturas | 302 | Requiere auth | | /rails/info/routes | 302 | Rails routes (detrás de auth) |
| /sidekiq | 302 | Requiere auth (Sidekiq existe!) | | /api | 302 | API endpoint (detrás de auth) |
| /rails/info | 302 | Requiere auth |
| /rails/mailers | 302 | Requiere auth |
| /rails/conductor | 302 | Requiere auth |
| /rails/action_mailbox | 302 | Requiere auth |
| /active_storage | 302 | Active Storage habilitado |
| /health | 302 | Requiere auth |
| /up | 302 | Requiere auth |
### Hallazgos Heroku ### Hallazgos Heroku
#### A4 — X-Frame-Options: ALLOWALL (ALTA — Clickjacking) #### A5 — X-Frame-Options: ALLOWALL (ALTA — Clickjacking — CVSS 6.5)
- **Evidencia:** Header `X-Frame-Options: ALLOWALL`
- Cualquier sitio puede embedder la app en un iframe - Cualquier sitio puede embedder la app en un iframe
- Permite ataques de clickjacking sobre acciones autenticadas
- **PoC:** `<iframe src="https://refaccionariasdelvalle.herokuapp.com/cuentas/ingresar" width="100%" height="600"></iframe>` - **PoC:** `<iframe src="https://refaccionariasdelvalle.herokuapp.com/cuentas/ingresar" width="100%" height="600"></iframe>`
- **Impacto:** Un atacante puede crear un sitio de phishing que embebe el login real y captura las credenciales via overlay invisible
#### M11Error 500 en /users/sign_in (MEDIA) #### M14CORS con Credenciales (MEDIA — CVSS 4.5)
- Ruta Devise rota retorna error genérico - `Access-Control-Allow-Credentials: true`
- Página personalizada "Error de Servidor Interno 500" (no stack trace) - Methods: POST, PUT, DELETE, GET, OPTIONS
- Indica problemas de configuración - Origin fijo a CloudFront (NO reflectivo — verificado con 3 origins)
- Menos grave que un CORS reflectivo pero la configuración es excesiva
#### M12CORS con credenciales (MEDIA) #### M15Login sin Protección Efectiva (MEDIA — CVSS 5.0)
- `Access-Control-Allow-Credentials: true` con methods POST, PUT, DELETE - `/cuentas/ingresar` acepta POST sin bloqueo
- Origin fijo a CloudFront (NO reflectivo — verificado con 3 origins diferentes) - Todos los intentos retornan 200 (no distingue usuarios válidos de inválidos — esto es BUENO)
- Menos grave de lo esperado pero la configuración es excesiva - reCaptcha se carga pero puede no estar activamente validando
- Token CSRF visible en meta tags (normal en Rails)
#### M13Login sin rate limiting visible (MEDIA) #### M16Sidekiq + GraphQL + API Detrás de Auth (MEDIA — CVSS 3.5)
- `/cuentas/ingresar` acepta POST sin CAPTCHA visible - Estos servicios existen y son accesibles si se obtienen credenciales
- Token CSRF estático visible en meta tags - Sidekiq dashboard expondría Redis, jobs, estadísticas
- Login retorna 200 en lugar de redirect (posible brute force) - GraphQL permitiría consultas arbitrarias a la BD
- reCaptcha se carga pero puede no estar implementado en el form
#### M14 — Sidekiq accesible (MEDIA) #### B5 — Error 500 en /users/sign_in (BAJA — CVSS 3.0)
- Ruta `/sidekiq` existe (redirige a login si no autenticado) - Ruta Devise rota — error interno del servidor
- Si se obtienen credenciales, da acceso a la cola de trabajos en background - No expone stack trace (página personalizada)
- Sidekiq dashboard suele exponer Redis info, jobs, estadísticas
#### M15 — Active Storage habilitado (MEDIA) #### B6 — Active Storage Blobs Existen (BAJA — CVSS 2.5)
- `/active_storage` y `/active_storage/blobs` existen - Blobs 1, 2, 3 retornan 302 (redirect al login)
- Si hay blobs con URLs predecibles, podrían ser accesibles - Bien protegidos detrás de autenticación
#### B4 — jQuery 1.12.4 (BAJA) #### B7 — jQuery 1.12.4 (BAJA — CVSS 2.5)
- 6+ CVEs de XSS conocidos - 6+ CVEs de XSS conocidos (versión de 2016)
- Versión de 2016
#### B5 — Facebook App ID expuesto (BAJA) #### B8 — Facebook Pixel + App ID Expuestos (BAJA — CVSS 2.0)
- 1652116431482935 — usable para phishing - Facebook Pixel: 1787289541577328
- Facebook App ID: 1652116431482935
- Usables para ingeniería social/phishing
#### B6Cookie de sesión Rails (BAJA) #### B9Links a Servicios Externos en Login (BAJA — CVSS 2.0)
- `_refaccionariasdelvalle_session` con HttpOnly+Secure (bien configurada)
#### B7 — Links a servicios externos en footer de login (BAJA)
- cPanel webmail: chi-pnode6.websitehostserver.net:2096 - cPanel webmail: chi-pnode6.websitehostserver.net:2096
- B2B-POS: b2b-pos.com/login (sistema B2B/POS externo, activo, nginx) - B2B-POS: b2b-pos.com/login (sistema B2B/POS externo activo)
#### I3 — Google Analytics deprecado (INFO) #### I4 — Google Analytics Deprecado (INFO)
- UA-40376975-1 (Universal Analytics, deprecado por Google) #### I5 — S3 y CloudFront Correctamente Protegidos (OK)
--- ---
@@ -218,35 +279,43 @@ Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress
| Severidad | WordPress | Heroku | Total | | Severidad | WordPress | Heroku | Total |
|-----------|----------|--------|-------| |-----------|----------|--------|-------|
| CRÍTICA | 0 | 0 | 0 | | CRÍTICA | 0 | 0 | **0** |
| ALTA | 3 | 1 | 4 | | ALTA | 4 | 1 | **5** |
| MEDIA | 10 | 5 | 15 | | MEDIA | 13 | 3 | **16** |
| BAJA | 3 | 4 | 7 | | BAJA | 4 | 5 | **9** |
| INFO/OK | 2 | 1 | 3 | | INFO/OK | 3 | 2 | **5** |
| **TOTAL** | **18** | **11** | **29** | | **TOTAL** | **24** | **11** | **35** |
--- ---
## Recomendaciones Prioritarias ## Recomendaciones Prioritarias
### Urgentes (Hacer esta semana) ### Urgentes (Esta Semana)
1. Implementar rate limiting y CAPTCHA en wp-login.php 1. **Implementar rate limiting y CAPTCHA en wp-login.php** — Plugin como Wordfence o Limit Login Attempts
2. Deshabilitar enumeración de usuarios via REST API y mensajes de error 2. **Deshabilitar enumeración de usuarios** — Bloquear REST API users, author pages, y mensajes de error diferenciados
3. Agregar HSTS y todos los headers de seguridad 3. **Mover logo a servidor propio** — No depender de diseno-studioarsa.com
4. Cambiar DMARC a p=reject y SPF a -all 4. **Agregar HSTS** en ambas plataformas (especialmente WooCommerce con pagos)
5. Mover logo a servidor propio (no depender de diseno-studioarsa.com) 5. **Cambiar DMARC a p=reject y SPF a -all**
### Importantes (Hacer este mes) ### Importantes (Este Mes)
6. Actualizar WordPress a 6.9.x 6. Actualizar WordPress a 6.9.x
7. Revisar y actualizar todos los plugins 7. Revisar y actualizar todos los plugins
8. Proteger directorio de backups (/wp-content/ai1wm-backups/) 8. Agregar todos los headers de seguridad (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
9. Heroku: Cambiar X-Frame-Options a DENY 9. Heroku: Cambiar X-Frame-Options a DENY
10. Heroku: Actualizar jQuery a versión moderna 10. Heroku: Actualizar jQuery a versión moderna
11. Heroku: Corregir error 500 en /users/sign_in 11. Heroku: Corregir error 500 en /users/sign_in
12. Heroku: Restringir CORS methods y deshabilitar credentials 12. Proteger directorio /wp-content/ai1wm-backups/ con .htaccess deny
13. Proteger /wp-content/uploads/wc-logs/
### Deseables (Siguiente trimestre) ### Deseables (Próximo Trimestre)
13. Implementar WAF (Web Application Firewall) 14. Implementar WAF (Web Application Firewall)
14. Heroku: Migrar de UA a GA4 15. Heroku: Migrar de UA a GA4
15. Heroku: Proteger rutas de Rails (sidekiq, action_mailbox, conductor) 16. Heroku: Restringir CORS methods y deshabilitar credentials
16. Revisar Active Storage para blobs expuestos 17. Notificar a diseno-studioarsa.com sobre su directory listing (afecta a 5+ clientes)
18. Revisar Active Storage blobs para acceso no autorizado
19. Considerar consolidar plataformas (WordPress + Heroku → una sola)
---
## Nota Legal
Este análisis fue realizado con autorización explícita del propietario. No se realizaron ataques activos de fuerza bruta ni explotación de vulnerabilidades. Todos los hallazgos se basan en reconocimiento y análisis de respuestas del servidor.