Files
pentesting/refaccionariasdelvalle/explotacion.md

322 lines
15 KiB
Markdown

# 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 (< → &lt;, > → &gt;, " → &quot;)
- **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:** `<iframe src="https://refaccionariasdelvalle.herokuapp.com/cuentas/ingresar" width="100%" height="600"></iframe>`
- **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.