Espamex: explotación completa - 16 hallazgos (4 críticos, 5 altos, 4 medios)

This commit is contained in:
Lucy
2026-03-25 10:25:25 +00:00
commit 6ffb55d7a1
12 changed files with 1498 additions and 0 deletions

114
groke/explotacion.md Normal file
View File

@@ -0,0 +1,114 @@
# Análisis Profundo y Explotación - Groke S.A. de C.V.
**Objetivo:** https://groke.mx / 64.91.245.110
**Fecha:** 2026-03-25
**Analista:** Lucy (Consultoría AS)
**Autorizado por:** Propietario
## Resumen Ejecutivo
Groke opera DOS sistemas: un sitio Next.js moderno en Vercel (groke.mx público) y una aplicación Laravel legacy en servidor compartido cPanel (64.91.245.110). El servidor legacy tiene múltiples vulnerabilidades: directory listing masivo, assets servidos en HTTP plano, 17 puertos abiertos, software desactualizado, y la estructura completa de la aplicación Laravel expuesta.
## Hallazgos de Explotación
### E1 - Directory Listing Habilitado en Múltiples Directorios [ALTA]
- **Severidad:** ALTA (CVSS 6.5)
- **Directorios con listing:**
- `/public/img/` — imágenes del sitio con fechas (2016-2020)
- `/public/img/cranes/` — subdirectorios por modelo de grúa (lc500, lc1100, lc1600, lc2100, lc3000, lcl)
- `/css/` — hojas de estilo
- `/js/` — JavaScript files
- `/build/` — archivos compilados
- `/build/css/` — CSS compilados
- `/build/js/` — JS compilados
- **Impacto:** Exposición completa de la estructura del proyecto, archivos y fechas de modificación. Facilita reconocimiento avanzado.
### E2 - Aplicación Laravel Legacy Expuesta Sin Protección [ALTA]
- **Severidad:** ALTA (CVSS 7.5)
- **URL:** `http://64.91.245.110/public/`
- **Evidencia:** HTML completo con créditos del desarrollador (JoshZ / dinkbit)
- **Framework:** Laravel con Bootstrap 3.3.6 (obsoleto)
- **Rutas activas:** `/productos`, `/contacto`, `/nosotros`, `/blog` (redirect a Vercel)
- **Impacto:** Toda la app legacy es accesible directamente sin que el dominio apunte ahí
### E3 - Mixed Content Masivo (HTTP en vez de HTTPS) [ALTA]
- **Severidad:** ALTA (CVSS 7.4)
- **Evidencia:** 66 referencias HTTP vs 11 HTTPS en la página de productos
- **Assets afectados:** jQuery, Modernizr, imágenes, CSS compilados
- **Impacto:** Todos los assets se cargan sin cifrar. Un atacante en la misma red (MitM) puede inyectar JavaScript malicioso vía los assets HTTP
### E4 - OpenSSH 7.4 con CVEs Conocidos [ALTA]
- **Severidad:** ALTA (CVSS 8.1)
- **Versión:** OpenSSH 7.4 (diciembre 2016, ~10 años sin actualizar)
- **CVEs relevantes:**
- CVE-2023-38408 (PKCS#11 RCE potencial)
- CVE-2021-41617 (escalación de privilegios)
- CVE-2020-15778 (inyección via scp)
### E5 - MySQL 3306 Expuesto a Internet [ALTA]
- **Severidad:** ALTA (CVSS 7.0)
- **Puerto:** 3306 abierto
- **Mitigación parcial:** Filtrado por IP ("Host not allowed")
- **Impacto:** Si una IP permitida es comprometida o la config cambia, acceso directo a la BD
### E6 - 17 Puertos Abiertos en Servidor Compartido [MEDIA]
- **Severidad:** MEDIA (CVSS 5.3)
- **Puertos:** 21 (FTP), 22 (SSH), 25 (SMTP), 80, 110 (POP3), 143 (IMAP), 443, 465, 587, 993, 995, 2082, 2083, 2086, 2087, 2095, 2096, 3306
- **Impacto:** Superficie de ataque excesiva para un sitio web
### E7 - cPanel/WHM/Webmail Accesibles Públicamente [MEDIA]
- **Severidad:** MEDIA (CVSS 5.3)
- **URLs:** Puertos 2082-2096
- **cPanel Login:** Accesible con página de login completa
- **Webmail (Roundcube):** Login accesible en puerto 2096
### E8 - CORS Wildcard [MEDIA]
- **Severidad:** MEDIA (CVSS 5.3)
- **Header:** `access-control-allow-origin: *` en sitio Vercel
- **Impacto:** Cualquier dominio puede hacer requests cross-origin
### E9 - DMARC Sin Enforcement [MEDIA]
- **Severidad:** MEDIA (CVSS 5.3)
- **Config:** `p=none` (solo reporta, no bloquea)
- **SPF:** softfail (`~all`)
- **Impacto:** Email spoofing desde @groke.mx posible
### E10 - POP3/IMAP Sin Cifrar [MEDIA]
- **Severidad:** MEDIA (CVSS 4.3)
- **Puertos 110 y 143 abiertos** sin TLS obligatorio
- **Impacto:** Credenciales de correo pueden interceptarse en texto plano
### E11 - Bootstrap 3.3.6 y jQuery Obsoletos [BAJA]
- **Severidad:** BAJA (CVSS 3.1)
- **Bootstrap:** 3.3.6 (2016, tiene XSS conocidos en tooltip/popover)
- **jQuery:** versión no determinada pero cargada via HTTP
### E12 - Google Ads/GTM Tracking IDs Expuestos [INFO]
- **GTM:** GTM-5K78F7M
- **Google Ads Conversion:** 960073428
- **Impacto:** Permite análisis competitivo y tracking del rendimiento publicitario
### E13 - Catch-All Virtual Host [INFO]
- **Evidencia:** Cualquier Host header (admin.groke.mx, erp.groke.mx, etc.) retorna 200 del vhost default de cPanel
- **Impacto:** No discrimina por dominio, todo va al mismo servidor
### E14 - Emails Corporativos Expuestos [INFO]
- **Emails encontrados:** ventas@groke.mx
- **Teléfono:** (55) 3618 1111
- **Impacto:** Vectores para spearphishing
## Limitaciones
- SMTP puerto 25 no respondió (posiblemente filtrado o down)
- Laravel debug mode muestra páginas Symfony genéricas sin stack traces detallados
- No se encontraron rutas de autenticación (login/register) en la app legacy
- CSRF tokens rotan correctamente por sesión
- reCAPTCHA cargado en formularios de contacto
- No se encontró debugbar, telescope, horizon ni nova
## Recomendaciones
1. **URGENTE:** Deshabilitar directory listing en Apache (`Options -Indexes`)
2. **URGENTE:** Actualizar OpenSSH a versión actual (9.x)
3. **ALTA:** Cerrar puertos innecesarios (FTP, POP3, IMAP sin cifrar, MySQL, WHM)
4. **ALTA:** Forzar HTTPS en todos los assets (eliminar mixed content)
5. **ALTA:** Actualizar Laravel, Bootstrap y jQuery
6. **MEDIA:** Configurar DMARC con `p=quarantine` o `p=reject`
7. **MEDIA:** Restringir acceso a cPanel/WHM por IP
8. **BAJA:** Migrar o eliminar la app legacy si ya no se usa activamente

141
groke/recon.md Normal file
View File

@@ -0,0 +1,141 @@
# Reconocimiento y Análisis - Groke S.A. de C.V.
**Objetivo:** https://groke.mx
**Fecha:** 2026-03-25
**Analista:** Lucy (Consultoría AS)
## Resumen Ejecutivo
Groke opera DOS sistemas separados: un sitio Next.js en Vercel (groke.mx) y una aplicación Laravel legacy en un servidor compartido (64.91.245.110). El servidor real tiene **17 puertos abiertos**, Laravel en modo debug, MySQL expuesto externamente, y software severamente desactualizado.
## Infraestructura
### Sitio Público (Vercel)
- **IP:** 76.76.21.21 (Vercel CDN)
- **Tecnología:** Next.js (React), styled-components 6.0.8
- **Build ID:** hGl4UbLpSWqj5I_F5iXrP
- **SSL:** Let's Encrypt R12 (válido hasta 2026-05-26)
- **Dominio relacionado:** groke.ca → redirige a groke.mx (307)
### Servidor Real (64.91.245.110)
- **Hosting:** sitiosmctech.com.mx (hosting compartido)
- **WHM hostname:** host2.sitiosmctech.com.mx
- **OS/Server:** Apache (Linux)
- **Framework:** Laravel (versión legacy, posiblemente 4.x/5.x basado en estilo Symfony de errores)
- **SSH:** OpenSSH 7.4 (lanzado 2016-12-19)
- **FTP:** Pure-FTPd con TLS
### DNS
- **MX:** mail.groke.mx → 64.91.245.110
- **NS:** ns1/ns2.sitiosmctech.com.mx
- **SPF:** `v=spf1 +a +mx +ip4:64.91.245.110 ~all` (softfail)
- **DKIM:** Configurado (selector: default, RSA 2048-bit)
- **DMARC:** `v=DMARC1; p=none; rua=mailto:errores@groke.mx` (NO enforcement)
### Subdominios Descubiertos
| Subdominio | IP | Servicio |
|---|---|---|
| www.groke.mx | Vercel (CNAME) | Sitio público |
| mail.groke.mx | 64.91.245.110 | Servidor de correo |
| ftp.groke.mx | 64.91.245.110 | FTP |
| cpanel.groke.mx | 64.91.245.110 | Panel de control |
| webmail.groke.mx | 64.91.245.110 | Webmail |
### Puertos Abiertos (64.91.245.110)
| Puerto | Servicio | Notas |
|---|---|---|
| 21 | FTP (Pure-FTPd) | TLS habilitado, no anónimo |
| 22 | SSH (OpenSSH 7.4) | **Versión obsoleta (2016)** |
| 25 | SMTP | Correo saliente |
| 80 | HTTP (Apache) | Laravel app |
| 110 | POP3 | Sin cifrar |
| 143 | IMAP | Sin cifrar |
| 443 | HTTPS | Webmail |
| 465 | SMTPS | SMTP cifrado |
| 587 | Submission | SMTP auth |
| 993 | IMAPS | IMAP cifrado |
| 995 | POP3S | POP3 cifrado |
| 2082 | cPanel (HTTP) | Panel de control |
| 2083 | cPanel (HTTPS) | Panel de control |
| 2086 | WHM (HTTP) | Admin hosting |
| 2087 | WHM (HTTPS) | Admin hosting |
| 2095 | Webmail (HTTP) | Roundcube |
| 2096 | Webmail (HTTPS) | Roundcube |
| **3306** | **MySQL** | **EXPUESTO externamente** |
## Hallazgos
### C1 - Laravel Debug Mode Habilitado [ALTA]
- **Evidencia:** Rutas inexistentes muestran página de error Symfony/Whoops con stack trace
- **URL:** `http://64.91.245.110/api/nonexistent` (Host: groke.mx)
- **Impacto:** Expone estructura interna de archivos, rutas del framework, y potencialmente variables de entorno
- **CVSS:** 7.5
### C2 - MySQL Puerto 3306 Expuesto a Internet [ALTA]
- **Evidencia:** Puerto abierto, responde con banner MySQL
- **Mitigación parcial:** Filtrado por IP ("Host '201.142.168.178' is not allowed to connect")
- **Impacto:** Si se compromete una IP permitida o se cambia la configuración, acceso directo a la BD
- **CVSS:** 7.0
### C3 - OpenSSH 7.4 Obsoleto [ALTA]
- **Versión:** OpenSSH 7.4 (diciembre 2016, ~10 años sin actualizar)
- **CVEs conocidos:**
- CVE-2023-38408 (PKCS#11 provider, potencial RCE)
- CVE-2021-41617 (escalación de privilegios)
- CVE-2020-15778 (inyección de comandos vía scp)
- **CVSS:** 8.1
### C4 - CORS Wildcard en Sitio Vercel [MEDIA]
- **Header:** `access-control-allow-origin: *`
- **Impacto:** Cualquier dominio puede hacer peticiones cross-origin al sitio
- **Nota:** Bajo riesgo al ser contenido estático, pero podría ser problema si se agregan APIs
### C5 - DMARC Sin Enforcement [MEDIA]
- **Configuración:** `p=none` (solo reporta, no bloquea)
- **Impacto:** Emails de spoofing desde @groke.mx pueden llegar a destinatarios
- **SPF tiene softfail (~all):** Agrava el problema
### C6 - Protocolos de Email Sin Cifrar (POP3/IMAP) [MEDIA]
- **Puertos 110 (POP3) y 143 (IMAP) abiertos** sin TLS obligatorio
- **Impacto:** Credenciales de correo pueden ser interceptadas en texto plano
### C7 - cPanel/WHM Accesibles Públicamente [MEDIA]
- **URLs:**
- cPanel: cpanel.groke.mx:2083
- WHM: cpanel.groke.mx:2087 (redirige a host2.sitiosmctech.com.mx:2087)
- Webmail: webmail.groke.mx:2096
- **Impacto:** Superficie de ataque para brute force de credenciales
### C8 - FTP Sin Restricción de IP [BAJA]
- **Banner:** Pure-FTPd con TLS, no acepta anónimo
- **Impacto:** Vector para brute force de credenciales FTP
### C9 - robots.txt Referencia Dominio Incorrecto [INFO]
- **Contenido:** `Sitemap: https://groke.ca/sitemap.xml` (no groke.mx)
- **Sitemap desactualizado:** Última modificación 2023-09-22
### C10 - Headers de Seguridad Faltantes [MEDIA]
- HSTS: OK (Vercel)
- Content-Security-Policy: FALTA
- X-Frame-Options: FALTA
- X-Content-Type-Options: FALTA
- X-XSS-Protection: FALTA
- Referrer-Policy: FALTA
- Permissions-Policy: FALTA
## Resumen de Severidades
| Severidad | Cantidad |
|---|---|
| Crítica | 0 |
| Alta | 3 (C1, C2, C3) |
| Media | 5 (C4, C5, C6, C7, C10) |
| Baja | 1 (C8) |
| Info | 1 (C9) |
| **Total** | **10** |
## Recomendaciones Prioritarias
1. **Urgente:** Desactivar debug mode en Laravel (APP_DEBUG=false)
2. **Urgente:** Actualizar OpenSSH a versión actual
3. **Urgente:** Cerrar puerto 3306 al exterior (firewall)
4. **Alta:** Configurar DMARC con `p=reject` y SPF con `-all`
5. **Alta:** Desactivar puertos POP3/IMAP sin cifrar (110, 143)
6. **Media:** Restringir acceso a cPanel/WHM por IP
7. **Media:** Agregar headers de seguridad (CSP, X-Frame-Options, etc.)