Explotación completa: Refaccionarias del Valle y Cilsatires

- Refaccionarias del Valle: 29 hallazgos (4 altos, 15 medios)
  - WordPress: user enum, no rate limiting, supply chain risk
  - Heroku: clickjacking, CORS, 500 errors, Sidekiq expuesto
- Cilsatires: 18 hallazgos (4 críticos, 4 altos)
  - 27 puertos RDP expuestos sin VPN
  - Active Directory OPTIMA.local accesible desde internet
  - Windows Server 2016 RTM sin actualizaciones
- README actualizado con estado de todos los objetivos
This commit is contained in:
Lucy
2026-03-25 11:13:08 +00:00
parent 0bd650eaf1
commit 9c07f3d99c
3 changed files with 513 additions and 14 deletions

View File

@@ -0,0 +1,252 @@
# Explotación Completa - Refaccionarias del Valle
**Objetivo:** https://refaccionariasdelvalle.com (WordPress) + https://refaccionariasdelvalle.herokuapp.com (Rails)
**Fecha:** 2026-03-25
**Auditor:** Consultoría AS
**Estado:** Autorizado por el dueño
---
## 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.
---
## SITIO WORDPRESS (refaccionariasdelvalle.com)
### 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)
- **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 |
### 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)
- **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:
- 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"`
#### 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
#### 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
#### M3 — WooCommerce sin HSTS (MEDIA)
- 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
- SPF con ~all (softfail) en lugar de -all
- Cualquiera puede enviar emails como @refaccionariasdelvalle.com
#### 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
#### 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
#### M7 — WooCommerce Store API expone estructura (MEDIA)
- Atributo "Marca" con 66 valores
- Carrito accesible sin autenticación (moneda MXN confirmada)
- Estructura de checkout visible
#### 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
#### M9 — Application Passwords habilitado (MEDIA)
- `/wp-admin/authorize-application.php` accesible
- Podría usarse para crear tokens de API si se obtienen credenciales
#### M10 — 22 namespaces REST API expuestos (MEDIA)
- Incluyendo: wc-admin, hub-connector, forminator, wpmudev_pcs, etc.
- wc-admin expone rutas de marketing, features, experiments
#### B1 — WP-Cron accesible (BAJA)
- `/wp-cron.php` responde sin error
- Podría usarse para DoS (WordPress cron abuse)
#### B2 — setup-config.php accesible (BAJA)
- Retorna 409 (Already Installed) pero confirma WordPress
#### B3 — Plugins con readme.txt público (BAJA)
- 11 plugins con versiones exactas expuestas via readme.txt
- Facilita identificación de vulnerabilidades conocidas
#### I1 — XMLRPC bloqueado (OK)
#### I2 — wp-content/uploads bloqueado (OK)
---
## APLICACIÓN HEROKU (refaccionariasdelvalle.herokuapp.com)
### 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
### Rutas Descubiertas
| Ruta | Código | Acceso |
|------|--------|--------|
| /productos | 200 | **PÚBLICO** |
| /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 |
### Hallazgos Heroku
#### A4 — X-Frame-Options: ALLOWALL (ALTA — Clickjacking)
- 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>`
#### 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
#### 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
#### 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
#### 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
#### M15 — Active Storage habilitado (MEDIA)
- `/active_storage` y `/active_storage/blobs` existen
- Si hay blobs con URLs predecibles, podrían ser accesibles
#### B4 — jQuery 1.12.4 (BAJA)
- 6+ CVEs de XSS conocidos
- Versión de 2016
#### B5 — Facebook App ID expuesto (BAJA)
- 1652116431482935 — usable para 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)
- cPanel webmail: chi-pnode6.websitehostserver.net:2096
- B2B-POS: b2b-pos.com/login (sistema B2B/POS externo, activo, nginx)
#### I3 — Google Analytics deprecado (INFO)
- UA-40376975-1 (Universal Analytics, deprecado por Google)
---
## Resumen de Severidades
| 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** |
---
## 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)
### Importantes (Hacer 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/)
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
### 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