From 4b710a69826bcccc1e7ac8e797b90c29e6097637 Mon Sep 17 00:00:00 2001 From: Lucy Date: Wed, 25 Mar 2026 11:28:52 +0000 Subject: [PATCH] =?UTF-8?q?Explotaci=C3=B3n=20completa:=20Cilsatires=20(22?= =?UTF-8?q?=20hallazgos,=207=20dominios=20AD)=20+=20Refaccionarias=20del?= =?UTF-8?q?=20Valle=20(35=20hallazgos)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cilsatires/explotacion.md | 353 +++++++++++++---------- refaccionariasdelvalle/explotacion.md | 389 +++++++++++++++----------- 2 files changed, 437 insertions(+), 305 deletions(-) diff --git a/cilsatires/explotacion.md b/cilsatires/explotacion.md index a4a7ad6..323fba3 100644 --- a/cilsatires/explotacion.md +++ b/cilsatires/explotacion.md @@ -7,177 +7,233 @@ --- ## 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 - **IP Pública:** 189.153.77.38 - **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) - **Ubicación:** Tijuana, Baja California, MX -### Máquinas Identificadas por NTLM -| 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 | +### 7 Dominios Active Directory Identificados -### Todos los Puertos Abiertos (27) -``` -3410, 5072, 5500, 5580, 5589, 5602, 5604, 5605, 5607, 5608, 5610, -5612, 5613, 5615, 5618, 5621, 5623, 5624, 5626, 5627, 5628, 5629, -5630, 5631, 5657, 5900, 5991 -``` +| # | Dominio AD | Puerto | Hostname | Tipo | +|---|-----------|--------|----------|------| +| 1 | **OPTIMA.local** | 5900 | WIN-K6ELEDKINSP | Controlador de Dominio | +| 2 | **didactica.local** | 5602 | WIN-OAJVTA6IQUT | Servidor del dominio | +| 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 -### C1 — 26+ Puertos RDP Expuestos a Internet (CRÍTICA — CVSS 9.5) -- **Evidencia:** nmap confirma 26 puertos abiertos con servicio `ms-wbt-server` (RDP/Terminal Services) -- Cada puerto redirige a una máquina Windows Server diferente en la red interna -- **No existe VPN** como punto de acceso intermedio -- Un atacante con credenciales válidas (o que logre brute force) obtiene acceso directo al escritorio del servidor -- **Impacto:** Acceso completo al servidor como usuario autenticado +### C1 — 27 Máquinas Expuestas vía RDP a Internet (CRÍTICA — CVSS 9.8) +- **Evidencia:** 27 puertos abiertos, cada uno redirigiendo a una máquina Windows Server diferente +- **Sin VPN:** Acceso directo desde cualquier lugar del mundo +- **Impacto:** 27 superficies de ataque simultáneas para fuerza bruta +- Un solo password débil en cualquiera de las 27 máquinas = compromiso total -### C2 — Controlador de Dominio Active Directory Expuesto (CRÍTICA — CVSS 9.0) -- **Evidencia:** Puerto 5900 revela: - ``` - Target_Name: OPTIMA - NetBIOS_Domain_Name: OPTIMA - DNS_Domain_Name: OPTIMA.local - DNS_Computer_Name: WIN-K6ELEDKINSP.OPTIMA.local - 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 +### C2 — 7 Dominios Active Directory de Diferentes Organizaciones (CRÍTICA — CVSS 9.5) +- **Evidencia:** Certificados SSL RDP revelan 7 dominios AD distintos: + - OPTIMA.local, didactica.local, sigla.local, mos.local, meservices.local, ysm.local, kalpa.local +- **Impacto:** Esto es un **entorno multi-tenant** — múltiples empresas comparten la misma conexión a internet +- Si un atacante compromete UNA máquina de CUALQUIER organización, puede pivotar a TODAS las demás +- No existe aislamiento de red entre las organizaciones +- **Riesgo adicional:** Un ataque a "kalpa.local" podría comprometer a "OPTIMA.local" y viceversa -### C3 — Windows Server 2016 RTM sin Actualizaciones Visibles (CRÍTICA — CVSS 8.5) -- **Evidencia:** Todas las máquinas reportan `Product_Version: 10.0.14393` -- Build 14393 es la versión RTM original de Windows Server 2016 (julio 2016) -- **CVEs potencialmente aplicables:** - - CVE-2020-1472 (Zerologon) — Permite tomar control del dominio sin credenciales - - CVE-2021-36942 (PetitPotam) — NTLM relay al DC - - CVE-2021-1675/CVE-2021-34527 (PrintNightmare) — RCE como SYSTEM - - 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 +### C3 — Controlador de Dominio AD Accesible desde Internet (CRÍTICA — CVSS 9.5) +- **Evidencia:** Puerto 5900 → `WIN-K6ELEDKINSP.OPTIMA.local` (nombre DNS completo del DC) +- Es un controlador de dominio con acceso RDP directo desde internet +- **Impacto:** Si se compromete el DC: + - DCSync → extraer TODOS los hashes de usuarios del dominio + - Golden Ticket → persistencia permanente + - Control total de la infraestructura de OPTIMA -### C4 — IP Residencial Dinámica como Puerta de Entrada (CRÍTICA — CVSS 7.5) -- **Evidencia:** rDNS confirma conexión Telmex residencial (dsl-*.prod-infinitum.com.mx) -- DDNS apunta una sola IP a toda la infraestructura +### C4 — Windows Server 2016 RTM (Build 14393) sin Actualizaciones (CRÍTICA — CVSS 9.0) +- **Evidencia:** Todas las máquinas reportan build 10.0.14393 (RTM de julio 2016) +- **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:** - - Sin SLA de disponibilidad (conexión residencial) + - Sin SLA de disponibilidad - Sin protección DDoS del ISP - - Si la IP cambia, cualquier regla de firewall por IP se invalida - - Un ataque al router residencial da acceso a toda la red corporativa - - Telmex no ofrece firewalls empresariales en conexiones residenciales + - IP dinámica (si cambia, las reglas de firewall se invalidan) + - Un ataque al router residencial Telmex da acceso a las 7 organizaciones + - 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) - **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 -- Método OPTIONS revela: `Allow: OPTIONS, TRACE, GET, HEAD, POST` -- 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 +- Si se despliega una aplicación web vulnerable, estaría directamente expuesta a internet ### 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 el contenido del sitio default -- **Impacto:** Puede facilitar ataques de cache poisoning, password reset poisoning, o phishing +- IIS acepta cualquier Host header y responde con 200 OK +- Facilita cache poisoning, password reset poisoning, o phishing -### A3 — Certificados SSL Auto-Firmados en RDP (ALTA — CVSS 6.0) -- **Evidencia:** Todos los certificados RDP son self-signed: - - Puerto 3410: `CN=WIN-I5RRPBV1662` (válido 6 meses) - - Puerto 5610: `CN=WIN-AL11FSH8G8D` (válido 6 meses) - - 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 +### A3 — Certificados SSL Auto-Firmados en Todos los RDP (ALTA — CVSS 6.5) +- **27 certificados self-signed** — NINGUNO es de una CA válida +- Vulnerable a MitM en todas las conexiones RDP +- Un atacante en la red podría interceptar credenciales de sesiones RDP -### A4 — NLA Habilitado pero RDP Accesible (ALTA — CVSS 5.5) -- **Evidencia:** CredSSP (NLA) está activo en todos los puertos -- Sin embargo, los modos SSL y RDSTLS también están habilitados como fallback -- NLA es mejor que sin NLA, pero el servicio sigue expuesto a brute force -- **Impacto:** Rate limiting de NLA es mínimo — ataques de fuerza bruta siguen siendo viables +### A4 — Trace.axd Presente en IIS (ALTA — CVSS 6.0) +- Retorna 403 (bloqueado) pero el archivo existe +- Si la configuración cambia, expondría información de debug del servidor +- Podría contener tokens de sesión, consultas de BD, stack traces -### M1 — Sin HTTPS en Servidor Web (MEDIA — CVSS 5.0) -- IIS en puerto 5623 solo responde HTTP -- Cualquier dato transmitido es visible en texto plano +### A5 — NLA con Fallback SSL/RDSTLS (ALTA — CVSS 5.5) +- NLA está habilitado (bien) pero SSL y RDSTLS también como fallback +- 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) -- Sin X-Frame-Options, CSP, HSTS, X-Content-Type-Options -- Solo tiene: Server: Microsoft-IIS/10.0, X-Powered-By: ASP.NET +- Sin: HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy +- 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) -- Todos los hostnames (WIN-*) y el dominio AD (OPTIMA.local) son visibles -- Facilita reconocimiento para ataques dirigidos +### M3 — Nombres de Máquina y Dominios Expuestos via NTLM/Certificados (MEDIA — CVSS 4.5) +- 27 hostnames y 7 dominios AD completamente visibles +- Mapeo completo de la infraestructura interna disponible públicamente +- Facilita ataques dirigidos contra organizaciones específicas ### M4 — Sin Firewall Visible (MEDIA — CVSS 5.0) -- 27 puertos abiertos en una sola IP sugiere: - - O no hay firewall - - O el firewall está configurado para permitir todo +- 27 puertos abiertos en una sola IP - No se detectó IDS/IPS ### M5 — DDNS Facilita Reconocimiento (MEDIA — CVSS 3.5) -- cilsatires.ddns.net resuelve a una IP que cambia dinámicamente -- El servicio DDNS mantiene el nombre actualizado -- Facilita que atacantes mantengan acceso persistente incluso si la IP cambia +- cilsatires.ddns.net siempre resuelve a la IP actual +- Atacantes pueden mantener acceso persistente -### I1 — Nombres de Máquina Revelan Convención (INFO) -- Patrón WIN-[RANDOM] sugiere instalaciones por defecto sin personalización +### M6 — ASP.NET Framework 2.0 Presente (MEDIA — CVSS 4.0) +- `/aspnet_client/system_web/2_0_50727/` accesible +- .NET 2.0 tiene múltiples vulnerabilidades conocidas +- Mantener versiones legacy aumenta la superficie de ataque -### I2 — Build de OS Consistente (INFO) -- Todas las máquinas: 10.0.14393 (Server 2016 RTM) -- Sugiere despliegue uniforme sin actualizaciones - -### I3 — Puerto 5991 Abierto (INFO) -- Servicio desconocido, no responde HTTP - -### I4 — Puerto 5072 Abierto (INFO) -- Servicio desconocido, no responde HTTP - -### I5 — SMB/NetBIOS/MSSQL No Expuestos (OK) -- Puertos 139, 445, 1433 cerrados desde internet +### I1 — Patrón de Nombres WIN-[RANDOM] (INFO) +- Instalaciones por defecto sin personalización +### I2 — Build Uniforme 10.0.14393 (INFO) +- Despliegue uniforme sin actualizaciones individuales +### I3 — Puerto 5991 — Servicio ysm.local (INFO) +- Máquina Windows del dominio ysm.local +### I4 — Puerto 5072 — Servicio kalpa.local (INFO) +- Máquina Windows del dominio kalpa.local +### I5 — SMB/NetBIOS/MSSQL/WinRM No Expuestos (OK) +- Puertos 139, 445, 1433, 5985, 5986 cerrados desde internet --- -## Cadena de Ataque Potencial +## Cadenas de Ataque -### Escenario 1: Brute Force → Dominio Completo -1. Identificar puertos RDP activos (26 disponibles) -2. Obtener hostnames via NTLM info -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) +### Escenario 1: Zerologon → Control Total (sin credenciales) +1. Conectar al DC (puerto 5900, OPTIMA.local) +2. Explotar CVE-2020-1472 (Zerologon) — NO requiere credenciales 3. Resetear password del computer account del DC -4. DCSync → extraer todos los hashes -5. Control total sin necesidad de credenciales válidas +4. DCSync → extraer todos los hashes del dominio +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 -1. Identificar modelo del router Telmex (por IP range) -2. Explotar vulnerabilidad del router (muchos Telmex tienen CVEs conocidos) -3. Pivotar a red interna -4. Acceso a todas las máquinas sin pasar por RDP +### Escenario 2: Brute Force → Movimiento Lateral Multi-Dominio +1. Seleccionar puertos RDP (27 disponibles) +2. Brute force con diccionario (sin rate limiting visible) +3. Comprometer una máquina de cualquier dominio +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 | |-----------|----------| -| CRÍTICA | 4 | -| ALTA | 4 | -| MEDIA | 5 | +| CRÍTICA | 6 | +| ALTA | 5 | +| MEDIA | 6 | | INFO/OK | 5 | -| **TOTAL** | **18** | +| **TOTAL** | **22** | --- ## Recomendaciones -### URGENTES (Hacer INMEDIATAMENTE) -1. **Deshabilitar acceso RDP público** — Bloquear todos los puertos RDP en el router/firewall -2. **Implementar VPN** — WireGuard, OpenVPN, 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 -4. **Auditar cuentas AD** — Cambiar todas las contraseñas, deshabilitar cuentas innecesarias, verificar si ya fueron comprometidas +### URGENTES — Hacer INMEDIATAMENTE +1. **Cerrar TODOS los puertos RDP públicos** — Bloquear puertos 3410, 5072, 5500-5991 en el router +2. **Implementar VPN** — WireGuard o Tailscale como ÚNICA vía de acceso remoto +3. **Actualizar TODOS los Windows Server** — Aplicar todas las actualizaciones acumulativas (especialmente Zerologon, PrintNightmare, PetitPotam) +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) -5. **Instalar firewall empresarial** — pfSense, OPNsense, o similar -6. **Segmentar la red** — Separar servidores de estaciones de trabajo -7. **Habilitar solo NLA** — Deshabilitar SSL y RDSTLS como fallback en RDP -8. **Certificados SSL válidos** — Reemplazar self-signed por certificados de CA interna -9. **IIS** — Deshabilitar si no se usa, o mover a puerto no estándar con HTTPS +### IMPORTANTES — Esta Semana +6. **Instalar firewall empresarial** — pfSense, OPNsense, o FortiGate con IDS/IPS +7. **Segmentar la red** — VLANs por organización con reglas de firewall entre ellas +8. **Certificados SSL válidos** — Reemplazar los 27 self-signed por CA interna +9. **IIS** — Deshabilitar si no se usa, eliminar aspnet_client, quitar X-Powered-By +10. **Implementar NLA estricto** — Deshabilitar SSL/RDSTLS como fallback -### DESEABLES (Este mes) -10. **Migrar a IP empresarial** — Contratar enlace dedicado con firewall del ISP -11. **Implementar MFA** — Azure MFA o DUO en todos los accesos RDP -12. **Monitoreo** — Instalar SIEM o al menos habilitar logs de seguridad centralizados -13. **Eliminar DDNS** — Usar VPN con IP fija en lugar de DDNS público -14. **Hardening de AD** — Implementar LAPS, deshabilitar NTLM donde sea posible, habilitar Protected Users +### DESEABLES — Este Mes +11. **Migrar a IP empresarial** — Contratar enlace dedicado con SLA y protección DDoS +12. **MFA en todos los RDP** — Azure MFA, DUO, o similar +13. **SIEM** — Implementar monitoreo centralizado de seguridad +14. **Eliminar DDNS** — Usar VPN con IP fija +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. diff --git a/refaccionariasdelvalle/explotacion.md b/refaccionariasdelvalle/explotacion.md index 169a6d5..f83a484 100644 --- a/refaccionariasdelvalle/explotacion.md +++ b/refaccionariasdelvalle/explotacion.md @@ -1,5 +1,5 @@ # 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 **Auditor:** Consultoría AS **Estado:** Autorizado por el dueño @@ -7,7 +7,7 @@ --- ## 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 - **IP:** 44.229.95.150 (AWS Oregon) - **Hosting:** GreenGeeks → AWS -- **CMS:** WordPress 6.7.5 (2 versiones atrás de 6.9.x) -- **Theme:** Woodmart 7.6.0 (premium) -- **E-commerce:** WooCommerce 9.8.7 (MXN) +- **CMS:** WordPress 6.7.5 (2 versiones menores atrás de 6.9.x) +- **Theme:** Woodmart 7.6.0 (premium, con WPBakery 7.9 integrado) +- **E-commerce:** WooCommerce 9.8.7 (MXN, 66 marcas de refacciones) - **Cache:** W3 Total Cache 2.8.0 - **Servidor:** Apache ### Plugins Confirmados (11) -| Plugin | Versión | Estado | -|--------|---------|--------| -| WooCommerce | 9.8.7 | readme.txt público | -| Contact Form 7 | 6.0.6 | readme.txt público | -| Forminator | 1.42.2 | readme.txt público, API REST expuesta | -| Google Site Kit | 1.151.0 | readme.txt público | -| Click to Chat WhatsApp | 4.15 | readme.txt público | -| Real3D FlipBook Lite | 4.8.5 | readme.txt público | -| Yoast SEO | 24.9 | readme.txt público | -| WPForms Lite | 1.9.5 | readme.txt público | -| Jetpack | 13.9.1 | readme.txt público | -| All-in-One WP Migration | 7.93 | readme.txt público, directorio de backups accesible | -| W3 Total Cache | 2.8.0 | readme.txt público | +| Plugin | Versión | Readme público | +|--------|---------|---------------| +| WooCommerce | 9.8.7 | Sí | +| WPBakery (js_composer) | 7.9 | Sí (changelog.txt) | +| Contact Form 7 | 6.0.6 | Sí | +| Forminator | 1.42.2 | Sí | +| Google Site Kit | 1.151.0 | Sí | +| Click to Chat WhatsApp | 4.15 | Sí | +| Real3D FlipBook Lite | 4.8.5 | Sí | +| Yoast SEO | 24.9 | Sí | +| WPForms Lite | 1.9.5 | Sí | +| Jetpack | 13.9.1 | Sí | +| 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 -#### A1 — Enumeración de usuarios CONFIRMADA (ALTA) -- **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) +#### A1 — Riesgo de Cadena de Suministro via Diseñador (ALTA — CVSS 7.5) - **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/ - eduardo-dominguez/ - hold-it-media/ - soluciones-emp-integrales/ - the-moreno-co/ -- El archivo del logo específico retorna 404 actualmente (puede haberse movido) -- **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 -- **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"` +- **Schema.org** del sitio confirma la dependencia: `"url":"https://diseno-studioarsa.com/sitios-de-prueba/refaccionaria-del-valle/wp-content/uploads/..."` +- **Impacto:** Si diseno-studioarsa.com se compromete → XSS/JavaScript injection en Refaccionarias del Valle y todos los otros clientes del diseñador -#### M1 — Directorio de backups accesible (MEDIA) -- **URL:** `/wp-content/ai1wm-backups/` -- **Respuesta:** 200 OK con contenido "Kangaroos cannot jump here" (26 bytes) -- Parece ser un honeypot o archivo index.html personalizado -- All-in-One WP Migration (v7.93) está instalado -- No se encontraron archivos .wpress descargables -- **Riesgo residual:** El directorio existe y acepta requests — si se genera un backup sin protección podría ser accesible +#### A2 — Enumeración de Usuarios CONFIRMADA (ALTA — CVSS 6.5) +- **Evidencia:** WordPress revela si un usuario existe o no con mensajes de error diferentes: + - Usuario válido: "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" +- **Usuario confirmado:** `adminRDelValle` (ID:1, super_admin) +- Expuesto por 4 vías: REST API, author pages, oembed, mensajes de error de login +- **Gravatar hash:** 41c8ce28f93662502ca9b9aec99fe2c8 -#### M2 — Herramienta de reparación de BD accesible (MEDIA) -- **URL:** `/wp-admin/maint/repair.php` -- **Respuesta:** 200 OK — muestra instrucciones para habilitar reparación automática -- Actualmente requiere `WP_ALLOW_REPAIR` en wp-config.php -- **Riesgo:** Si alguien tiene acceso a wp-config.php, puede activar la reparación de BD +#### A3 — wp-login.php sin Rate Limiting (ALTA — CVSS 7.0) +- **Evidencia:** 5+ intentos consecutivos en <2 segundos sin bloqueo ni CAPTCHA +- Con usuario conocido (`adminRDelValle`), fuerza bruta es completamente viable +- XMLRPC está bloqueado (403), pero wp-login.php no tiene protección -#### M3 — WooCommerce sin HSTS (MEDIA) +#### A4 — WooCommerce sin HSTS (ALTA — CVSS 6.0) - Tienda con pagos en MXN sin Strict-Transport-Security - Datos de tarjeta vulnerables a downgrade HTTPS→HTTP (MitM) -#### M4 — DMARC p=none (MEDIA) -- `v=DMARC1; p=none;` — sin enforcement de correo +#### M1 — DMARC p=none + SPF ~all (MEDIA — CVSS 5.5) +- `v=DMARC1; p=none;` — sin enforcement - 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) -- Sin HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy +#### 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 -#### M6 — WordPress desactualizado (MEDIA) -- Versión 6.7.5, la actual es 6.9.x (2 versiones menores atrás) -- readme.html accesible confirma versión +#### M3 — Jetpack Instalado pero NO Conectado (MEDIA — CVSS 4.5) +- isActive: false, isRegistered: false, isUserConnected: false +- 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) -- Atributo "Marca" con 66 valores -- Carrito accesible sin autenticación (moneda MXN confirmada) -- Estructura de checkout visible +#### M4 — WordPress 6.7.5 Desactualizado (MEDIA — CVSS 4.5) +- 2 versiones menores atrás de 6.9.x +- readme.html confirma versión -#### M8 — Forminator API REST expuesta (MEDIA) -- Endpoint `/wp-json/forminator/v1/preview/forms` acepta requests -- Retorna error por falta de `module_id` — podría explotarse con IDs válidos +#### M5 — WPBakery 7.9 con changelog.txt público (MEDIA — CVSS 4.0) +- Historial completo de versiones y fixes de seguridad visible +- CVE-2024-6457 (XSS) fue corregido en 7.8, versión 7.9 está parcheada para ese CVE específico -#### M9 — Application Passwords habilitado (MEDIA) +#### M6 — Directorio 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 (< → <, > → >, " → ") +- **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 -- Podría usarse para crear tokens de API si se obtienen credenciales +- Si se obtienen credenciales, se pueden crear API tokens persistentes -#### M10 — 22 namespaces REST API expuestos (MEDIA) -- Incluyendo: wc-admin, hub-connector, forminator, wpmudev_pcs, etc. -- wc-admin expone rutas de marketing, features, experiments +#### M12 — Forminator API REST Expuesta (MEDIA — CVSS 3.0) +- `/wp-json/forminator/v1/preview/forms` acepta requests (requiere module_id) +- Con IDs válidos podría revelar estructura de formularios -#### B1 — WP-Cron accesible (BAJA) -- `/wp-cron.php` responde sin error +#### M13 — WC-Admin Revela Estructura de Error (MEDIA — CVSS 2.5) +- `/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) -#### B2 — setup-config.php accesible (BAJA) -- Retorna 409 (Already Installed) pero confirma WordPress +#### B2 — Sitemap Revela Estructura Interna (BAJA — CVSS 2.0) +- 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) -- 11 plugins con versiones exactas expuestas via readme.txt -- Facilita identificación de vulnerabilidades conocidas +#### B3 — setup-config.php y install.php Accesibles (BAJA — CVSS 2.0) +- Retornan 409/200 "Ya Instalado" pero confirman WordPress -#### I1 — XMLRPC bloqueado (OK) -#### I2 — wp-content/uploads bloqueado (OK) +#### B4 — WC-Logs Directory Accesible (BAJA — CVSS 2.5) +- `/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 - **Plataforma:** Ruby on Rails (Heroku) -- **CDN:** CloudFront (d134yvfg5nzhu8.cloudfront.net) -- **S3:** refaccionariasdelvallepg.s3.us-west-1.amazonaws.com (acceso denegado, bien) -- **jQuery:** 1.12.4 (2016, múltiples CVEs de XSS) -- **Analytics:** Google Analytics UA-40376975-1 (Universal, deprecado) -- **reCaptcha:** Cargado en la página +- **CDN:** CloudFront (d134yvfg5nzhu8.cloudfront.net) — S3 denegado correctamente +- **S3:** refaccionariasdelvallepg.s3.us-west-1.amazonaws.com (403 Access Denied, bien) +- **jQuery:** 1.12.4 (2016, múltiples CVEs) +- **Google reCaptcha:** Cargado (implementación parcial) +- **Analytics:** UA-40376975-1 (Universal, deprecado) +- **Facebook Pixel:** 1787289541577328 ### Rutas Descubiertas -| Ruta | Código | Acceso | -|------|--------|--------| -| /productos | 200 | **PÚBLICO** | +| Ruta | Código | Notas | +|------|--------|-------| +| /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 | -| /users/sign_in | 500 | **ERROR INTERNO** | -| /admin | 302 | Requiere auth | -| /pedidos | 302 | Requiere auth | -| /carrito | 302 | Requiere auth | -| /categorias | 302 | Requiere auth | -| /marcas | 302 | Requiere auth | -| /buscar | 302 | Requiere auth | -| /clientes | 302 | Requiere auth | -| /reportes | 302 | Requiere auth | -| /inventario | 302 | Requiere auth | -| /cotizacion | 302 | Requiere auth | -| /facturas | 302 | Requiere auth | -| /sidekiq | 302 | Requiere auth (Sidekiq existe!) | -| /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 | +| /cuentas/contrasenia/nueva | — | Reset de password (no accesible) | +| /cuentas/registro | — | Registro (no accesible) | +| /users/sign_in | 500 | ERROR INTERNO — Devise roto | +| /admin | 302 → login | Panel admin | +| /sidekiq | 302 → login | Cola de trabajos (Sidekiq!) | +| /graphql | 302 → login | GraphQL endpoint existe | +| /active_storage/blobs/1-3 | 302 | Active Storage — blobs existen | +| /pedidos, /carrito, /categorias | 302 | Requieren auth | +| /marcas, /buscar, /clientes | 302 | Requieren auth | +| /reportes, /inventario | 302 | Requieren auth | +| /cotizacion, /facturas | 302 | Requieren auth | +| /rails/info/routes | 302 | Rails routes (detrás de auth) | +| /api | 302 | API endpoint (detrás de auth) | ### 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 -- Permite ataques de clickjacking sobre acciones autenticadas - **PoC:** `` +- **Impacto:** Un atacante puede crear un sitio de phishing que embebe el login real y captura las credenciales via overlay invisible -#### M11 — Error 500 en /users/sign_in (MEDIA) -- Ruta Devise rota retorna error genérico -- Página personalizada "Error de Servidor Interno 500" (no stack trace) -- Indica problemas de configuración +#### M14 — CORS con Credenciales (MEDIA — CVSS 4.5) +- `Access-Control-Allow-Credentials: true` +- Methods: POST, PUT, DELETE, GET, OPTIONS +- Origin fijo a CloudFront (NO reflectivo — verificado con 3 origins) +- Menos grave que un CORS reflectivo pero la configuración es excesiva -#### M12 — CORS con credenciales (MEDIA) -- `Access-Control-Allow-Credentials: true` con methods POST, PUT, DELETE -- Origin fijo a CloudFront (NO reflectivo — verificado con 3 origins diferentes) -- Menos grave de lo esperado pero la configuración es excesiva +#### M15 — Login sin Protección Efectiva (MEDIA — CVSS 5.0) +- `/cuentas/ingresar` acepta POST sin bloqueo +- Todos los intentos retornan 200 (no distingue usuarios válidos de inválidos — esto es BUENO) +- reCaptcha se carga pero puede no estar activamente validando +- Token CSRF visible en meta tags (normal en Rails) -#### M13 — Login sin rate limiting visible (MEDIA) -- `/cuentas/ingresar` acepta POST sin CAPTCHA visible -- Token CSRF estático visible en meta tags -- Login retorna 200 en lugar de redirect (posible brute force) -- reCaptcha se carga pero puede no estar implementado en el form +#### M16 — Sidekiq + GraphQL + API Detrás de Auth (MEDIA — CVSS 3.5) +- Estos servicios existen y son accesibles si se obtienen credenciales +- Sidekiq dashboard expondría Redis, jobs, estadísticas +- GraphQL permitiría consultas arbitrarias a la BD -#### M14 — Sidekiq accesible (MEDIA) -- Ruta `/sidekiq` existe (redirige a login si no autenticado) -- Si se obtienen credenciales, da acceso a la cola de trabajos en background -- Sidekiq dashboard suele exponer Redis info, jobs, estadísticas +#### B5 — Error 500 en /users/sign_in (BAJA — CVSS 3.0) +- Ruta Devise rota — error interno del servidor +- No expone stack trace (página personalizada) -#### M15 — Active Storage habilitado (MEDIA) -- `/active_storage` y `/active_storage/blobs` existen -- Si hay blobs con URLs predecibles, podrían ser accesibles +#### B6 — Active Storage Blobs Existen (BAJA — CVSS 2.5) +- Blobs 1, 2, 3 retornan 302 (redirect al login) +- Bien protegidos detrás de autenticación -#### B4 — jQuery 1.12.4 (BAJA) -- 6+ CVEs de XSS conocidos -- Versión de 2016 +#### B7 — jQuery 1.12.4 (BAJA — CVSS 2.5) +- 6+ CVEs de XSS conocidos (versión de 2016) -#### B5 — Facebook App ID expuesto (BAJA) -- 1652116431482935 — usable para phishing +#### B8 — Facebook Pixel + App ID Expuestos (BAJA — CVSS 2.0) +- Facebook Pixel: 1787289541577328 +- Facebook App ID: 1652116431482935 +- Usables para ingeniería social/phishing -#### B6 — Cookie de sesión Rails (BAJA) -- `_refaccionariasdelvalle_session` con HttpOnly+Secure (bien configurada) - -#### B7 — Links a servicios externos en footer de login (BAJA) +#### B9 — Links a Servicios Externos en Login (BAJA — CVSS 2.0) - 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) -- UA-40376975-1 (Universal Analytics, deprecado por Google) +#### I4 — Google Analytics Deprecado (INFO) +#### 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 | |-----------|----------|--------|-------| -| CRÍTICA | 0 | 0 | 0 | -| ALTA | 3 | 1 | 4 | -| MEDIA | 10 | 5 | 15 | -| BAJA | 3 | 4 | 7 | -| INFO/OK | 2 | 1 | 3 | -| **TOTAL** | **18** | **11** | **29** | +| CRÍTICA | 0 | 0 | **0** | +| ALTA | 4 | 1 | **5** | +| MEDIA | 13 | 3 | **16** | +| BAJA | 4 | 5 | **9** | +| INFO/OK | 3 | 2 | **5** | +| **TOTAL** | **24** | **11** | **35** | --- ## Recomendaciones Prioritarias -### Urgentes (Hacer esta semana) -1. Implementar rate limiting y CAPTCHA en wp-login.php -2. Deshabilitar enumeración de usuarios via REST API y mensajes de error -3. Agregar HSTS y todos los headers de seguridad -4. Cambiar DMARC a p=reject y SPF a -all -5. Mover logo a servidor propio (no depender de diseno-studioarsa.com) +### Urgentes (Esta Semana) +1. **Implementar rate limiting y CAPTCHA en wp-login.php** — Plugin como Wordfence o Limit Login Attempts +2. **Deshabilitar enumeración de usuarios** — Bloquear REST API users, author pages, y mensajes de error diferenciados +3. **Mover logo a servidor propio** — No depender de diseno-studioarsa.com +4. **Agregar HSTS** en ambas plataformas (especialmente WooCommerce con pagos) +5. **Cambiar DMARC a p=reject y SPF a -all** -### Importantes (Hacer este mes) +### Importantes (Este Mes) 6. Actualizar WordPress a 6.9.x 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 10. Heroku: Actualizar jQuery a versión moderna 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) -13. Implementar WAF (Web Application Firewall) -14. Heroku: Migrar de UA a GA4 -15. Heroku: Proteger rutas de Rails (sidekiq, action_mailbox, conductor) -16. Revisar Active Storage para blobs expuestos +### Deseables (Próximo Trimestre) +14. Implementar WAF (Web Application Firewall) +15. Heroku: Migrar de UA a GA4 +16. Heroku: Restringir CORS methods y deshabilitar credentials +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.