Files
pentesting/refaccionariasdelvalle/explotacion.md

15 KiB

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
WPBakery (js_composer) 7.9 Sí (changelog.txt)
Contact Form 7 6.0.6
Forminator 1.42.2
Google Site Kit 1.151.0
Click to Chat WhatsApp 4.15
Real3D FlipBook Lite 4.8.5
Yoast SEO 24.9
WPForms Lite 1.9.5
Jetpack 13.9.1
All-in-One WP Migration 7.93
W3 Total Cache 2.8.0

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: <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
  • 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)

  1. Actualizar WordPress a 6.9.x
  2. Revisar y actualizar todos los plugins
  3. Agregar todos los headers de seguridad (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
  4. Heroku: Cambiar X-Frame-Options a DENY
  5. Heroku: Actualizar jQuery a versión moderna
  6. Heroku: Corregir error 500 en /users/sign_in
  7. Proteger directorio /wp-content/ai1wm-backups/ con .htaccess deny
  8. Proteger /wp-content/uploads/wc-logs/

Deseables (Próximo Trimestre)

  1. Implementar WAF (Web Application Firewall)
  2. Heroku: Migrar de UA a GA4
  3. Heroku: Restringir CORS methods y deshabilitar credentials
  4. Notificar a diseno-studioarsa.com sobre su directory listing (afecta a 5+ clientes)
  5. Revisar Active Storage blobs para acceso no autorizado
  6. Considerar consolidar plataformas (WordPress + Heroku → una sola)

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.