# Explotación Completa - Refaccionarias del Valle **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 --- ## Resumen Ejecutivo 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. --- ## SITIO WORDPRESS (refaccionariasdelvalle.com) ### Infraestructura Confirmada - **IP:** 44.229.95.150 (AWS Oregon) - **Hosting:** GreenGeeks → AWS - **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 | 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 — Riesgo de Cadena de Suministro via Diseñador (ALTA — CVSS 7.5) - **Evidencia:** El logo oficial del sitio se sirve desde `diseno-studioarsa.com` - 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/ - **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 #### 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 #### 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 #### 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) #### M1 — DMARC p=none + SPF ~all (MEDIA — CVSS 5.5) - `v=DMARC1; p=none;` — sin enforcement - SPF con ~all (softfail) en lugar de -all - **Impacto:** Cualquiera puede enviar emails como @refaccionariasdelvalle.com (phishing) #### 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 #### 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 #### M4 — WordPress 6.7.5 Desactualizado (MEDIA — CVSS 4.5) - 2 versiones menores atrás de 6.9.x - readme.html confirma versión #### 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 #### 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 - Si se obtienen credenciales, se pueden crear API tokens persistentes #### 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 #### 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 — 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 — setup-config.php y install.php Accesibles (BAJA — CVSS 2.0) - Retornan 409/200 "Ya Instalado" pero confirman WordPress #### 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) --- ## APLICACIÓN HEROKU (refaccionariasdelvalle.herokuapp.com) ### Infraestructura Confirmada - **Plataforma:** Ruby on Rails (Heroku) - **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 | 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 | | /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 #### 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 - **PoC:** `` - **Impacto:** Un atacante puede crear un sitio de phishing que embebe el login real y captura las credenciales via overlay invisible #### 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 #### 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) #### 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 #### 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) #### 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 #### B7 — jQuery 1.12.4 (BAJA — CVSS 2.5) - 6+ CVEs de XSS conocidos (versión de 2016) #### B8 — Facebook Pixel + App ID Expuestos (BAJA — CVSS 2.0) - Facebook Pixel: 1787289541577328 - Facebook App ID: 1652116431482935 - Usables para ingeniería social/phishing #### 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) #### I4 — Google Analytics Deprecado (INFO) #### I5 — S3 y CloudFront Correctamente Protegidos (OK) --- ## Resumen de Severidades | Severidad | WordPress | Heroku | Total | |-----------|----------|--------|-------| | 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 (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 (Este Mes) 6. Actualizar WordPress a 6.9.x 7. Revisar y actualizar todos los plugins 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. Proteger directorio /wp-content/ai1wm-backups/ con .htaccess deny 13. Proteger /wp-content/uploads/wc-logs/ ### 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.