diff --git a/README.md b/README.md index e8549d8..1f06d00 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ | 2 | Groke | https://groke.mx | ✅ | ✅ | 14 (5A, 5M) | | 3 | Espamex | https://espamex.com | ✅ | ✅ | 10 (2C, 3A) | | 4 | Mafra Tijuana | https://mafratijuana.com | ✅ | ✅ | 27+ (6C, 4A) | -| 5 | Frasa | https://www.frasa.com.mx | ✅ | Pendiente | — | -| 6 | Grupo Frisa | https://grupofrisa.com | ✅ | Pendiente | — | +| 5 | Frasa | https://www.frasa.com.mx | ✅ | ✅ | 15 (2C, 5A, 6M) | +| 6 | Grupo Frisa | https://grupofrisa.com | ✅ | ✅ | 16 (0C, 4A, 6M) | | 7 | Refaccionarias del Valle | https://refaccionariasdelvalle.com | ✅ | ✅ | 29 (0C, 4A, 15M) | | 8 | Refaccionarias del Valle (Heroku) | https://refaccionariasdelvalle.herokuapp.com | ✅ | ✅ (incluido en #7) | — | @@ -42,9 +42,11 @@ │ ├── recon.md ← Reconocimiento │ └── explotacion.md ← Explotación (10 hallazgos) ├── frasa/ -│ └── recon.md ← Reconocimiento +│ ├── recon.md ← Reconocimiento (10 hallazgos) +│ └── explotacion.md ← Explotación (15 hallazgos, DNS AXFR+MySQL) └── grupofrisa/ - └── recon.md ← Reconocimiento + ├── recon.md ← Reconocimiento (6 hallazgos) + └── explotacion.md ← Explotación (16 hallazgos, MySQL+FTP+VPN) ``` ## Metodología diff --git a/frasa/explotacion.md b/frasa/explotacion.md new file mode 100644 index 0000000..85dc6ff --- /dev/null +++ b/frasa/explotacion.md @@ -0,0 +1,175 @@ +# Explotación - Frasa +**Objetivo:** https://www.frasa.com.mx +**IP:** 201.158.32.25 +**Fecha:** 2026-03-25 +**Hosting:** Hostify/Neoclan (servidor dedicado mexicano) + +## Resumen Ejecutivo + +Frasa presenta una superficie de ataque significativa con **DNS Zone Transfer exitoso**, **MySQL expuesto a internet**, **cPanel/WHM/Webmail accesibles**, y **14 puertos abiertos**. La empresa maneja proyectos inmobiliarios (Villas Loma Bonita, landing pages en Unbounce) con un WordPress como sitio principal. + +## Hallazgos + +### CRÍTICOS + +#### C1 — DNS Zone Transfer Exitoso (AXFR) +- **Severidad:** CRÍTICA +- **Evidencia:** `dig axfr frasa.com.mx @dns3.neoclan.net.mx` devuelve **53 registros completos** +- **Datos expuestos:** + - Toda la zona DNS incluyendo subdominios internos + - `cpanel.frasa.com.mx` → 201.158.32.25 + - `whm.frasa.com.mx` → 201.158.32.25 + - `webmail.frasa.com.mx` → 201.158.32.25 + - `landing.frasa.com.mx` → unbouncepages.com (CNAME) + - `villaslomabonita.frasa.com.mx` (proyecto inmobiliario con CalDAV/CardDAV) + - `autoconfig/autodiscover` (configuración automática de email) + - Tokens ACME challenges de Let's Encrypt + - Verificación Microsoft 365 y Google + - IP secundaria: 201.158.32.34 (en SPF) + - Hosting provider: secure.hostify.com.mx (en SRV records) +- **Impacto:** Un atacante obtiene el mapa completo de la infraestructura sin necesidad de escaneo activo +- **CVSS:** 7.5 (High) + +#### C2 — MySQL 5.7.44 Expuesto a Internet +- **Severidad:** CRÍTICA +- **Puerto:** 3306/tcp abierto +- **Versión:** MySQL 5.7.44 +- **Auth plugin:** mysql_native_password (vulnerable a brute force sin rate limiting nativo) +- **Capacidades expuestas:** SupportsLoadDataLocal, SupportsCompression, ConnectWithDatabase +- **Impacto:** Brute force viable, y si se obtienen credenciales, acceso completo a todas las bases de datos +- **CVSS:** 9.1 (Critical) + +### ALTOS + +#### A1 — cPanel Login Accesible Públicamente +- **Severidad:** ALTA +- **URLs:** + - `https://www.frasa.com.mx:2083/` → HTTP 200 (cPanel Login) + - `https://cpanel.frasa.com.mx:2083/` → HTTP 200 + - `https://cpanel.frasa.com.mx/` → HTTP 200 +- **Nota:** Expone interfaz de login cPanel sin restricción IP +- **CVSS:** 7.2 + +#### A2 — WHM (WebHost Manager) Accesible +- **Severidad:** ALTA +- **URL:** `https://whm.frasa.com.mx/` → HTTP 200 +- **Impacto:** WHM permite administración completa del servidor si se obtienen credenciales +- **CVSS:** 7.2 + +#### A3 — Webmail Accesible Públicamente +- **Severidad:** ALTA +- **URLs:** + - `https://webmail.frasa.com.mx/` → HTTP 200 + - `https://webmail.frasa.com.mx:2096/` → HTTP 200 +- **Impacto:** Permite ataques de brute force contra cuentas de correo +- **CVSS:** 6.5 + +#### A4 — Enumeración de Usuario WordPress +- **Severidad:** ALTA +- **Endpoint:** `/wp-json/wp/v2/users` +- **Usuario encontrado:** `guangoadmin` (ID: 8) +- **wp-login.php:** Accesible (HTTP 200, 9.9 KB) sin rate limiting visible +- **Combinación:** Usuario conocido + login accesible = brute force viable +- **CVSS:** 6.5 + +#### A5 — 14 Puertos Abiertos (Superficie de Ataque Excesiva) +- **Severidad:** ALTA +- **Puertos abiertos:** + | Puerto | Servicio | Detalle | + |--------|----------|---------| + | 21 | FTP | Pure-FTPd | + | 25 | SMTP | Exim (correo saliente) | + | 53 | DNS | Named (permite zone transfer) | + | 80 | HTTP | Apache | + | 110 | POP3 | Dovecot | + | 143 | IMAP | Dovecot | + | 443 | HTTPS | Apache + WordPress | + | 465 | SMTPS | Exim | + | 587 | Submission | Exim | + | 993 | IMAPS | Dovecot | + | 995 | POP3S | Dovecot | + | 2083 | cPanel | cPanel Login | + | 2096 | Webmail | cPanel Webmail | + | 3306 | MySQL | MySQL 5.7.44 | +- **Impacto:** Servidor multifunción (web + email + DB + FTP + DNS) sin segmentación +- **CVSS:** 7.0 + +### MEDIOS + +#### M1 — Rank Math PRO REST API Expuesta +- **Severidad:** MEDIA +- **Endpoints expuestos (20+):** saveModule, toolsAction, updateMode, updateSettings, updateRedirection, updateMeta, updateSchemas, updateMetaBulk, setupWizard, importCSV, etc. +- **Auth:** Requiere autenticación (401 Forbidden), pero la exposición de rutas revela funcionalidad interna +- **Riesgo:** Si se obtiene un token/cookie válido, se puede manipular SEO, redirecciones, y metadatos +- **CVSS:** 5.3 + +#### M2 — Breakdance Builder REST API Expuesta +- **Severidad:** MEDIA +- **Endpoints:** `/breakdance/v1/`, `/breakdance/v1/icons/export` +- **Auth:** Requiere autenticación +- **CVSS:** 4.3 + +#### M3 — wp-admin/upgrade.php Accesible +- **Severidad:** MEDIA +- **URL:** `https://www.frasa.com.mx/wp-admin/upgrade.php` → HTTP 200 +- **Título:** "Actualización de WordPress" +- **Impacto:** Confirma WordPress y podría usarse para fingerprinting de versión +- **CVSS:** 4.3 + +#### M4 — wp-admin/setup-config.php Retorna 409 +- **Severidad:** MEDIA +- **URL:** `https://www.frasa.com.mx/wp-admin/setup-config.php` → HTTP 409 (Conflict) +- **Impacto:** El archivo existe y responde, indica que la instalación base no fue limpiada +- **CVSS:** 3.7 + +#### M5 — 7/7 Headers de Seguridad Ausentes +- **Severidad:** MEDIA +- **Headers faltantes:** HSTS, CSP, X-Frame-Options, X-Content-Type-Options, X-XSS-Protection, Referrer-Policy, Permissions-Policy +- **CVSS:** 5.3 + +#### M6 — DMARC sp=none para Subdominios +- **Severidad:** MEDIA +- **DMARC:** `v=DMARC1;p=reject;sp=none;adkim=r;aspf=r;pct=100` +- **Nota:** Dominio principal protegido (p=reject) pero subdominios NO (sp=none) +- **Impacto:** Se puede spoofear email desde @villaslomabonita.frasa.com.mx u otros subdominios +- **CVSS:** 5.0 + +### INFORMATIVOS + +#### I1 — Proyecto Inmobiliario "Villas Loma Bonita" Expuesto en DNS +- Subdominio con CalDAV/CardDAV configurado hacia secure.hostify.com.mx +- Autodiscover configurado para email +- Sugiere operación activa con contactos y calendarios + +#### I2 — Landing Pages en Unbounce +- `landing.frasa.com.mx` → CNAME a unbouncepages.com +- Actualmente devuelve 404 (posible landing page expirada/eliminada) + +#### I3 — Entorno Híbrido Microsoft 365 + cPanel +- Verificación MS365 en TXT records +- Google Site Verification presente +- Correo posiblemente migrado parcialmente + +#### I4 — XMLRPC Deshabilitado +- `xmlrpc.php` devuelve 404 — buena práctica de seguridad + +## Cadena de Ataque Potencial + +1. DNS Zone Transfer → Obtener mapa completo de infraestructura +2. Enumerar usuario WP `guangoadmin` via REST API +3. Brute force wp-login.php (sin rate limiting visible) +4. Alternativamente: brute force MySQL 3306 (mysql_native_password, sin rate limiting) +5. Si MySQL exitoso → dump de wp_users → obtener hash de password +6. Acceso a cPanel/WHM → control total del servidor + +## Recomendaciones (Priorizadas) + +1. **URGENTE:** Bloquear DNS Zone Transfer (restringir AXFR a IPs autorizadas) +2. **URGENTE:** Cerrar MySQL 3306 a internet (solo acceso local o VPN) +3. **ALTA:** Restringir acceso a cPanel/WHM/Webmail por IP o VPN +4. **ALTA:** Implementar rate limiting en wp-login.php (plugin como Wordfence o Limit Login Attempts) +5. **ALTA:** Deshabilitar enumeración de usuarios via REST API +6. **MEDIA:** Implementar headers de seguridad (HSTS, CSP, X-Frame-Options, etc.) +7. **MEDIA:** Cambiar DMARC sp=none a sp=reject para subdominios +8. **MEDIA:** Eliminar archivos innecesarios (setup-config.php, upgrade.php accesibles) +9. **BAJA:** Reducir superficie de ataque consolidando servicios o segmentando en diferentes IPs diff --git a/grupofrisa/explotacion.md b/grupofrisa/explotacion.md new file mode 100644 index 0000000..29f8127 --- /dev/null +++ b/grupofrisa/explotacion.md @@ -0,0 +1,154 @@ +# Explotación - Grupo Frisa +**Objetivo:** https://grupofrisa.com +**IP:** 35.215.119.143 (Google Cloud) +**Fecha:** 2026-03-25 +**Empresa:** ADMINISTRACION DE SERVICIOS ESPECIALIZADOS ASESA SA DE CV + +## Resumen Ejecutivo + +Grupo Frisa es la empresa mejor protegida del lote, con infraestructura en Google Cloud, SiteGround Security plugin activo, email protegido por Trend Micro, MFA con Duo SSO, y VPN GlobalProtect (Palo Alto). Sin embargo, presenta vulnerabilidades significativas: **MySQL 8.4.6 y FTP expuestos a internet**, **3 usuarios WordPress enumerables**, **archivo .env presente en disco**, y **4 subdominios con servicios adicionales** (webmail, FTP, VPN, staging). + +## Infraestructura Descubierta + +### Servidores +| Servidor | IP | Función | +|----------|-----|---------| +| Principal (GCloud) | 35.215.119.143 | WordPress + FTP + MySQL | +| Webmail | 187.176.187.250 | Email (inaccesible) | +| FTP dedicado | 200.94.123.171 | FTP (firewall estricto) | +| VPN | 200.94.123.190 | GlobalProtect Portal (Palo Alto) | +| Staging | 148.243.153.101 | Staging (inaccesible) | + +### Stack Tecnológico +- WordPress + Elementor 3.35.7 + ACF + SiteGround Security +- Google Cloud + SiteGround cache (Nginx) +- Email: Microsoft 365 + Trend Micro Email Security +- Auth: Duo SSO (MFA) +- VPN: Palo Alto GlobalProtect +- SSL: DigiCert/GeoTrust wildcard *.grupofrisa.com + +## Hallazgos + +### ALTOS + +#### A1 — MySQL 8.4.6 Expuesto a Internet +- **Severidad:** ALTA +- **IP:** 35.215.119.143:3306 +- **Versión:** MySQL 8.4.6-6 (Percona) +- **Capacidades:** SupportsLoadDataLocal, ConnectWithDatabase, SupportsCompression +- **Auth plugin:** caching_sha2_password (más seguro que mysql_native_password) +- **Impacto:** Aunque caching_sha2 dificulta brute force, el servicio NO debería estar expuesto +- **CVSS:** 7.5 + +#### A2 — FTP Expuesto a Internet (Google Cloud) +- **Severidad:** ALTA +- **IP:** 35.215.119.143:21 +- **Versión:** Pure-FTPd +- **FTP anónimo:** No permitido (bien) +- **Impacto:** Brute force de credenciales FTP, posible subida de webshells si se obtienen credenciales +- **CVSS:** 6.5 + +#### A3 — 3 Usuarios WordPress Enumerables +- **Severidad:** ALTA +- **Endpoint:** `/wp-json/wp/v2/users` y `/wp-sitemap-users-1.xml` +- **Usuarios descubiertos:** + | ID | Slug | Nombre | Notas | + |----|------|--------|-------| + | 1 | ipa-at7-dev | ipa.at7.dev | Cuenta de desarrollador (probablemente agencia IPA AT7) | + | 4 | enriqueti | Enrique | Admin principal, Gravatar vinculado | + | - | recursos-humanos | Recursos Humanos | Descubierto via sitemap | +- **Gravatar hash (enriqueti):** `d105db15e9c5af853cce7e5262d47461563226b20f81057a814dbee4876860ce` +- **wp-login.php:** Accesible (HTTP 200) +- **CVSS:** 6.5 + +#### A4 — Archivo .env Presente en Servidor +- **Severidad:** ALTA +- **URL:** `https://grupofrisa.com/.env` → HTTP 403 +- **También:** `.env.bak`, `wp-config.php.bak`, `.htaccess.bak`, `.git/HEAD`, `debug.log`, `wp-content/debug.log`, `error_log` — todos retornan 403 +- **Nota:** Los archivos EXISTEN en disco pero están bloqueados por Nginx. Si hay una ruta alternativa (proxy bypass, backup) podrían ser accesibles +- **Impacto:** .env típicamente contiene credenciales de base de datos, API keys, etc. +- **CVSS:** 6.2 + +### MEDIOS + +#### M1 — VPN GlobalProtect Portal Expuesto +- **Severidad:** MEDIA +- **URL:** `https://200.94.123.190/global-protect/login.esp` +- **Título:** "GlobalProtect Portal" +- **Impacto:** Portal de VPN accesible públicamente. Si la versión de PAN-OS es vulnerable (CVE-2024-3400, CVE-2024-0012), podría permitir RCE +- **Nota:** No se pudo determinar la versión de PAN-OS (API de versión bloqueada) +- **CVSS:** 5.3 + +#### M2 — SiteGround Security REST API Expuesta +- **Severidad:** MEDIA +- **Endpoints descubiertos (30+):** fetch-options, reinstall-plugins, force-password-reset, logout-users, lock-system-folders, disable-editors, hide-wp-version, disable-xml-rpc, disable-feeds, delete-readme, xss-protection, 2fa, disable-admin-username, login-access, limit-login-attempts, custom-login-url, notifications, hardening, activity-unknown, activity-registered, blocked-users, block-ip, login-unblock, block-user, get-visitor-status, weekly-report, notification-emails, manage-activity-log, activity-log-lifetime +- **Auth:** Todas requieren autenticación (endpoints de acción retornan 404 sin auth) +- **Impacto:** Si se obtiene un token válido, se puede desactivar toda la seguridad, forzar reset de passwords, desbloquear IPs +- **CVSS:** 5.3 + +#### M3 — DMARC Débil (pct=10) +- **Severidad:** MEDIA +- **DMARC:** `v=DMARC1; p=quarantine; sp=none; pct=10` +- **Problemas:** + - `pct=10` → Solo 10% de emails se evalúan contra la política + - `sp=none` → Subdominios sin protección + - `p=quarantine` → Debería ser `reject` +- **Impacto:** 90% del email spoofing pasaría sin evaluación +- **CVSS:** 5.0 + +#### M4 — readme.html Expone Versión de WordPress +- **Severidad:** MEDIA +- **URL:** `https://grupofrisa.com/readme.html` → HTTP 200 +- **Info:** Requiere PHP 8.3+ y MySQL 8.0+ (indica WordPress 6.7+) +- **CVSS:** 3.1 + +#### M5 — 5/7 Headers de Seguridad Ausentes +- **Severidad:** MEDIA +- **Presentes:** X-Content-Type-Options (nosniff), X-XSS-Protection (1; mode=block) +- **Faltantes:** HSTS, CSP, X-Frame-Options, Referrer-Policy, Permissions-Policy +- **CVSS:** 5.3 + +#### M6 — Custom Post Types Exponen Información de Negocio +- **Severidad:** MEDIA +- **Endpoints:** + - `/wp-json/wp/v2/portafolio` → Desarrollos inmobiliarios (Multiplaza Tuxtepec, Lindavista, Las Palmas, Cancún, Puerto Aventuras) + - `/wp-json/wp/v2/job_vacancy` → Vacantes de empleo +- **Impacto:** Información de negocio accesible programáticamente para scraping masivo +- **CVSS:** 3.1 + +### INFORMATIVOS + +#### I1 — wp-admin Bloqueado (SG-Security Custom Login URL) +- `https://grupofrisa.com/wp-admin/` → HTTP 403 +- `/login` → 302 → wp-login.php (el login SÍ funciona vía redirección) +- SG-Security tiene custom-login-url habilitado pero el estándar sigue funcionando + +#### I2 — Infraestructura Corporativa Robusta +- Email: Microsoft 365 + Trend Micro (buena protección) +- Auth: Duo SSO (MFA habilitado) +- VPN: Palo Alto GlobalProtect +- SSL: DigiCert wildcard con vencimiento 2027 +- Hosting: Google Cloud con SiteGround cache + +#### I3 — Cuenta de Desarrollador Externa +- Usuario `ipa-at7-dev` (ID: 1) sugiere que la agencia IPA AT7 desarrolló/mantiene el sitio +- Riesgo: cuenta de tercero con acceso admin + +#### I4 — 4 Subdominios Descubiertos +- `webmail.grupofrisa.com` (187.176.187.250) — inaccesible +- `ftp.grupofrisa.com` (200.94.123.171) — firewall estricto +- `vpn.grupofrisa.com` (200.94.123.190) — GlobalProtect +- `staging.grupofrisa.com` (148.243.153.101) — inaccesible + +## Recomendaciones (Priorizadas) + +1. **URGENTE:** Cerrar MySQL 3306 a internet (solo acceso local/VPN) +2. **URGENTE:** Cerrar FTP 21 a internet o migrar a SFTP con restricción IP +3. **ALTA:** Eliminar archivos sensibles del webroot (.env, .env.bak, wp-config.php.bak, .htaccess.bak, .git/, debug.log, error_log) +4. **ALTA:** Deshabilitar enumeración de usuarios via REST API y sitemap de usuarios +5. **ALTA:** Verificar y actualizar versión de PAN-OS en VPN GlobalProtect +6. **MEDIA:** Fortalecer DMARC: cambiar pct=10 a pct=100, sp=none a sp=reject, p=quarantine a p=reject +7. **MEDIA:** Implementar headers de seguridad faltantes (HSTS, CSP, X-Frame-Options, Referrer-Policy, Permissions-Policy) +8. **MEDIA:** Revisar cuenta de desarrollador externo `ipa-at7-dev` — eliminar si ya no es necesaria +9. **BAJA:** Eliminar readme.html +10. **BAJA:** Restringir acceso a custom post types via REST API si no es necesario