# 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:** `` #### 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