- 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
11 KiB
11 KiB
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_REPAIRen 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/formsacepta requests - Retorna error por falta de
module_id— podría explotarse con IDs válidos
M9 — Application Passwords habilitado (MEDIA)
/wp-admin/authorize-application.phpaccesible- 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.phpresponde 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: truecon 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/ingresaracepta 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
/sidekiqexiste (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_storagey/active_storage/blobsexisten- 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_sessioncon 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)
- Implementar rate limiting y CAPTCHA en wp-login.php
- Deshabilitar enumeración de usuarios via REST API y mensajes de error
- Agregar HSTS y todos los headers de seguridad
- Cambiar DMARC a p=reject y SPF a -all
- Mover logo a servidor propio (no depender de diseno-studioarsa.com)
Importantes (Hacer este mes)
- Actualizar WordPress a 6.9.x
- Revisar y actualizar todos los plugins
- Proteger directorio de backups (/wp-content/ai1wm-backups/)
- Heroku: Cambiar X-Frame-Options a DENY
- Heroku: Actualizar jQuery a versión moderna
- Heroku: Corregir error 500 en /users/sign_in
- Heroku: Restringir CORS methods y deshabilitar credentials
Deseables (Siguiente trimestre)
- Implementar WAF (Web Application Firewall)
- Heroku: Migrar de UA a GA4
- Heroku: Proteger rutas de Rails (sidekiq, action_mailbox, conductor)
- Revisar Active Storage para blobs expuestos