Explotación completa: Cilsatires (22 hallazgos, 7 dominios AD) + Refaccionarias del Valle (35 hallazgos)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# Explotación Completa - Refaccionarias del Valle
|
||||
**Objetivo:** https://refaccionariasdelvalle.com (WordPress) + https://refaccionariasdelvalle.herokuapp.com (Rails)
|
||||
**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
|
||||
@@ -7,7 +7,7 @@
|
||||
---
|
||||
|
||||
## 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.
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
@@ -16,114 +16,179 @@ Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress
|
||||
### 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)
|
||||
- **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 | 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 |
|
||||
| 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 — 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)
|
||||
#### 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`
|
||||
- Este dominio tiene **directory listing habilitado** en `/sitios-de-prueba/` exponiendo carpetas de otros clientes:
|
||||
- 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/
|
||||
- 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"`
|
||||
- **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
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### M3 — WooCommerce sin HSTS (MEDIA)
|
||||
#### 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)
|
||||
|
||||
#### M4 — DMARC p=none (MEDIA)
|
||||
- `v=DMARC1; p=none;` — sin enforcement de correo
|
||||
#### M1 — DMARC p=none + SPF ~all (MEDIA — CVSS 5.5)
|
||||
- `v=DMARC1; p=none;` — sin enforcement
|
||||
- SPF con ~all (softfail) en lugar de -all
|
||||
- Cualquiera puede enviar emails como @refaccionariasdelvalle.com
|
||||
- **Impacto:** Cualquiera puede enviar emails como @refaccionariasdelvalle.com (phishing)
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### M7 — WooCommerce Store API expone estructura (MEDIA)
|
||||
- Atributo "Marca" con 66 valores
|
||||
- Carrito accesible sin autenticación (moneda MXN confirmada)
|
||||
- Estructura de checkout visible
|
||||
#### M4 — WordPress 6.7.5 Desactualizado (MEDIA — CVSS 4.5)
|
||||
- 2 versiones menores atrás de 6.9.x
|
||||
- readme.html confirma versión
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### M9 — Application Passwords habilitado (MEDIA)
|
||||
#### 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
|
||||
- Podría usarse para crear tokens de API si se obtienen credenciales
|
||||
- Si se obtienen credenciales, se pueden crear API tokens persistentes
|
||||
|
||||
#### M10 — 22 namespaces REST API expuestos (MEDIA)
|
||||
- Incluyendo: wc-admin, hub-connector, forminator, wpmudev_pcs, etc.
|
||||
- wc-admin expone rutas de marketing, features, experiments
|
||||
#### 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
|
||||
|
||||
#### B1 — WP-Cron accesible (BAJA)
|
||||
- `/wp-cron.php` responde sin error
|
||||
#### 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 — setup-config.php accesible (BAJA)
|
||||
- Retorna 409 (Already Installed) pero confirma WordPress
|
||||
#### 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 — Plugins con readme.txt público (BAJA)
|
||||
- 11 plugins con versiones exactas expuestas via readme.txt
|
||||
- Facilita identificación de vulnerabilidades conocidas
|
||||
#### B3 — setup-config.php y install.php Accesibles (BAJA — CVSS 2.0)
|
||||
- Retornan 409/200 "Ya Instalado" pero confirman WordPress
|
||||
|
||||
#### I1 — XMLRPC bloqueado (OK)
|
||||
#### I2 — wp-content/uploads bloqueado (OK)
|
||||
#### 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)
|
||||
|
||||
---
|
||||
|
||||
@@ -131,86 +196,82 @@ Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress
|
||||
|
||||
### 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
|
||||
- **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 | Acceso |
|
||||
|------|--------|--------|
|
||||
| /productos | 200 | **PÚBLICO** |
|
||||
| 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 |
|
||||
| /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 |
|
||||
| /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
|
||||
|
||||
#### A4 — X-Frame-Options: ALLOWALL (ALTA — Clickjacking)
|
||||
#### 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
|
||||
- Permite ataques de clickjacking sobre acciones autenticadas
|
||||
- **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
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### 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
|
||||
#### 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)
|
||||
|
||||
#### 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
|
||||
#### 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
|
||||
|
||||
#### 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
|
||||
#### 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)
|
||||
|
||||
#### M15 — Active Storage habilitado (MEDIA)
|
||||
- `/active_storage` y `/active_storage/blobs` existen
|
||||
- Si hay blobs con URLs predecibles, podrían ser accesibles
|
||||
#### 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
|
||||
|
||||
#### B4 — jQuery 1.12.4 (BAJA)
|
||||
- 6+ CVEs de XSS conocidos
|
||||
- Versión de 2016
|
||||
#### B7 — jQuery 1.12.4 (BAJA — CVSS 2.5)
|
||||
- 6+ CVEs de XSS conocidos (versión de 2016)
|
||||
|
||||
#### B5 — Facebook App ID expuesto (BAJA)
|
||||
- 1652116431482935 — usable para phishing
|
||||
#### B8 — Facebook Pixel + App ID Expuestos (BAJA — CVSS 2.0)
|
||||
- Facebook Pixel: 1787289541577328
|
||||
- Facebook App ID: 1652116431482935
|
||||
- Usables para ingeniería social/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)
|
||||
#### 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, nginx)
|
||||
- B2B-POS: b2b-pos.com/login (sistema B2B/POS externo activo)
|
||||
|
||||
#### I3 — Google Analytics deprecado (INFO)
|
||||
- UA-40376975-1 (Universal Analytics, deprecado por Google)
|
||||
#### I4 — Google Analytics Deprecado (INFO)
|
||||
#### I5 — S3 y CloudFront Correctamente Protegidos (OK)
|
||||
|
||||
---
|
||||
|
||||
@@ -218,35 +279,43 @@ Se realizó un análisis de seguridad exhaustivo en ambas plataformas (WordPress
|
||||
|
||||
| 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** |
|
||||
| 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 (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)
|
||||
### 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 (Hacer este mes)
|
||||
### Importantes (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/)
|
||||
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. Heroku: Restringir CORS methods y deshabilitar credentials
|
||||
12. Proteger directorio /wp-content/ai1wm-backups/ con .htaccess deny
|
||||
13. Proteger /wp-content/uploads/wc-logs/
|
||||
|
||||
### 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
|
||||
### 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.
|
||||
|
||||
Reference in New Issue
Block a user