Files
pentesting/groke/recon.md

142 lines
5.6 KiB
Markdown

# 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.)