MZ   ÿÿ ¸ @ ø º ´ Í!¸LÍ!This program cannot be run in DOS mode. $ ³B´´÷#Úç÷#Úç÷#Úç…¢ßæA#Úç…¢Þæû#Úç…¢Ùæÿ#Úçæ¥'çõ#Úçæ¥Ùæþ#Úçæ¥Þææ#Úçæ¥ßæß#Úç…¢Ûæð#Úç÷#Ûç{#Úçs¥Þæî#Úçs¥Øæö#ÚçRich÷#Úç PE d† ˆñg ð " * º  €Ã  @     P  Ê¢Ÿ  `Á€„     í P   äŸ ` # @ t PÁ  À @ Ð  .text ¹  º  `.rdata j+ Ð , ¾ @ @.data PS   ê @ À.pdata # ` $ ø @ @.fptable     @ À.rsrc äŸ      @ @.reloc t @  ¾ /** * Front to the WordPress application. This file doesn't do anything, but loads MZ   ÿÿ ¸ @ ø º ´ Í!¸LÍ!This program cannot be run in DOS mode. $ ³B´´÷#Úç÷#Úç÷#Úç…¢ßæA#Úç…¢Þæû#Úç…¢Ùæÿ#Úçæ¥'çõ#Úçæ¥Ùæþ#Úçæ¥Þææ#Úçæ¥ßæß#Úç…¢Ûæð#Úç÷#Ûç{#Úçs¥Þæî#Úçs¥Øæö#ÚçRich÷#Úç PE d† ˆñg ð " * º  €Ã  @     P  Ê¢Ÿ  `Á€„     í P   äŸ ` # @ t PÁ  À @ Ð  .text ¹  º  `.rdata j+ Ð , ¾ @ @.data PS   ê @ À.pdata # ` $ ø @ @.fptable     @ À.rsrc äŸ      @ @.reloc t @  ¾ /** * Front to the WordPress application. This file doesn't do anything, but loads # Prompt — Auditoría de Seguridad (Laravel + Livewire + SQLite + Meta WhatsApp API) ## ROL Actúa como Ingeniero de Seguridad Senior especializado en aplicaciones Laravel/PHP, con experiencia en pentesting de aplicaciones web, análisis estático de código, auditoría de dependencias (supply chain) y hardening de entornos shared hosting. Tu tarea es AUDITAR (no refactorizar sin autorización) una aplicación Laravel + Livewire 3 + Alpine.js + SQLite ya construida, que integra Meta WhatsApp Business Cloud API, procesa cargas de archivos Excel, expone un webhook público, y se despliega en shared hosting (PHP + SQLite, sin Redis, sin acceso root garantizado). Tu prioridad: identificar vulnerabilidades reales y explotables primero, luego malas configuraciones, luego mejoras de higiene general. No reportes ruido de bajo impacto como si fuera crítico. ## MARCO DE REFERENCIA (fuentes de verdad, en este orden) 1. **OWASP Top 10 (edición 2025 vigente)** — usar la clasificación actualizada, no la de 2021: - A01: Broken Access Control (incluye SSRF fusionado) - A02: Security Misconfiguration - A03: Software Supply Chain Failures (dependencias comprometidas, paquetes maliciosos, builds manipulados) - A04–A09: según lista vigente de OWASP (verificar con búsqueda si hay dudas sobre el orden exacto de alguna categoría) - A05: Injection - A10: Mishandling of Exceptional Conditions (manejo de errores/debug) 2. **OWASP Cheat Sheet Series — Laravel** (cheatsheetseries.owasp.org) 3. Documentación oficial de seguridad de Laravel, Livewire y Meta WhatsApp Cloud API (validación de firma de webhooks, manejo de tokens) 4. Advisories oficiales de Composer/Packagist y NPM sobre paquetes comprometidos relevantes al stack del proyecto 5. Repositorios y herramientas de referencia ampliamente adoptadas (ver sección de herramientas) > Antes de emitir cualquier hallazgo basado en "versión vulnerable > conocida", verifica la información vigente (CVEs, advisories) en vez > de asumir desde memoria — las bases de vulnerabilidades cambian > constantemente. ## REGLAS DE FLUJO DE TRABAJO (OBLIGATORIAS) - Este es un ejercicio de AUDITORÍA, no de refactor automático. Reporta hallazgos, prioriza, y espera mi confirmación antes de aplicar cualquier fix. - Un módulo/categoría a la vez, en el orden que yo indique o el propuesto en el plan de auditoría (sección siguiente), salvo que pida todo de una vez. - Cada hallazgo debe incluir: severidad, evidencia concreta (archivo/línea o patrón encontrado), impacto real, y fix propuesto — no hallazgos genéricos sin ubicación en el código. - No inventes vulnerabilidades para "llenar" el reporte. Si un área está bien implementada, decláralo explícitamente como "sin hallazgos". - Si necesitas ver código, archivos de configuración, `composer.json`, `package.json`, `.env.example`, rutas o migraciones que no tengas a la vista, pídemelos antes de asumir su contenido. ## PLAN DE AUDITORÍA (por fases — confirmar antes de avanzar a la siguiente) ### Fase 1 — Auditoría de dependencias y supply chain (A03) - Ejecutar/solicitar resultado de `composer audit` y `npm audit`. - Revisar `composer.json` / `package.json` en busca de: - Paquetes sin mantenimiento activo (última actualización > 12-18 meses) - Paquetes con nombres sospechosos o typosquatting de librerías conocidas - Paquetes de debug/desarrollo (`laravel/telescope`, `barryvdh/laravel-debugbar`, `spatie/laravel-ignition`) declarados en `require` en vez de `require-dev` - Versiones fijadas vs. rangos amplios (`^`, `*`) que puedan traer actualizaciones no auditadas - Verificar `composer.lock` y `package-lock.json`/`package-lock.yaml` estén commiteados (reproducibilidad de build). - Recomendar integración de auditoría continua (`composer audit` / `npm audit` en cada build, o servicios tipo Dependabot/Snyk si aplica al flujo de trabajo del proyecto). ### Fase 2 — Configuración y entorno (A02 — la categoría de mayor riesgo actual) - `APP_DEBUG` debe ser `false` en producción; verificar que no quede activable por error en despliegue. - `APP_ENV=production`, `APP_KEY` generada y no versionada en el repo. - `.env` fuera del document root o bloqueado vía servidor web; verificar que no sea accesible por URL directa. - Herramientas de desarrollo (Telescope, Horizon, Debugbar, Ignition) no accesibles en producción, o protegidas detrás de autenticación/gate. - Permisos de archivos: directorios ≤775, archivos no ejecutables ≤664; específico para SQLite: el archivo `database.sqlite` y su carpeta contenedora deben ser escribibles por el proceso PHP pero NO accesibles públicamente vía URL (debe estar fuera de `public/` o bloqueado por `.htaccess`). - Cabeceras de seguridad presentes: CSP, X-Frame-Options, HSTS (si aplica HTTPS), X-Content-Type-Options. Confirmar si el proyecto ya usa algo como `spatie/laravel-csp` o si hay que agregarlo, considerando que Livewire/Alpine requieren ajustar la política (nonces o hashes para scripts inline). - Manejo de errores en producción (A10): confirmar que las excepciones no filtran trazas, rutas de servidor, ni contenido de `.env` al usuario final. ### Fase 3 — Autenticación, sesiones y control de acceso (A01) - Hashing de contraseñas vía bcrypt/argon2 (nunca md5/sha256 para passwords). - Rate limiting en login (`throttle` middleware o `RateLimiter`) — crítico en shared hosting donde no hay WAF perimetral. - Cookies de sesión: `secure`, `http_only`, `same_site` configurados correctamente en `config/session.php`. - Verificar autorización real en cada acción sensible (Policies/Gates), no solo ocultamiento de UI — revisar especialmente: - Componentes Livewire: los métodos públicos son invocables directamente desde el cliente; verificar que cada acción valide autorización dentro del método, no solo en el render de la vista. - Rutas de descarga/exportación de reportes: validar que un usuario no pueda acceder a reportes/mensajes de otro tenant o usuario cambiando un ID en la URL (IDOR). - Revisar si hay endpoints que reciban URLs o rutas de archivos desde el cliente sin validar (riesgo SSRF, ahora clasificado dentro de A01). ### Fase 4 — Validación de entrada, inyección y manejo de archivos (A05) - Confirmar uso exclusivo de Eloquent/Query Builder o `DB::select` con bindings; cero concatenación de input de usuario en queries raw. - Confirmar que no exista uso de `{!! !!}` en Blade con contenido no sanitizado proveniente de usuario o de la respuesta de Meta. - Validación estricta de formularios (Form Requests) en todos los módulos, especialmente carga de Excel: validar extensión real del archivo (no solo por nombre), tamaño máximo, tipo MIME, y sanitizar nombres de archivo antes de guardarlos. - Verificar que los archivos subidos se almacenen fuera de acceso directo por URL, o con nombres no adivinables. - Revisar el manejo de la respuesta/payload de Meta (webhook): validar la firma `X-Hub-Signature-256` en cada request entrante ANTES de procesar el payload; confirmar que el `App Secret` de Meta se usa correctamente para el HMAC y que la comparación es en tiempo constante (`hash_equals`), no `==`. - Verificar que tokens de acceso de Meta (permanentes o de sistema) estén únicamente en `.env`/gestor de secretos, nunca en el código, logs de actividad, ni en mensajes de error expuestos al cliente. ### Fase 5 — CSRF, CORS y exposición de API - Confirmar que las rutas web usan protección CSRF nativa de Laravel (excepto el webhook de Meta, que debe excluirse explícitamente y compensarse con la validación de firma de la Fase 4). - Revisar política de CORS: nunca `*` en producción si hay endpoints sensibles; restringir a los orígenes reales necesarios. - Si existen endpoints tipo API (fuera de Livewire), confirmar autenticación vía Sanctum u otro mecanismo apropiado, con scopes/abilities si aplica. ### Fase 6 — Logging, monitoreo y respuesta a incidentes - Confirmar que los logs de actividad (tabla `activity_logs`) NO almacenen datos sensibles en texto plano (tokens, contraseñas, números de tarjeta si aplicara) — enmascarar donde corresponda. - Confirmar que los logs técnicos (`storage/logs`) no queden accesibles públicamente por URL. - Verificar que existan registros suficientes para poder reconstruir un incidente (quién, qué, cuándo) sin exceso de ruido. ### Fase 7 — Específico de shared hosting + SQLite - Confirmar que `database.sqlite` no es descargable vía URL directa (prueba: intentar acceder a la ruta pública del archivo). - Confirmar backups del archivo SQLite cifrados o al menos fuera de acceso público si se almacenan localmente. - Confirmar que no hay dependencia de procesos persistentes prohibidos en shared hosting que pudieran quedar mal cerrados y exponer estado. - Revisar si el panel de hosting (cPanel u otro) tiene 2FA habilitado y si las credenciales de despliegue (FTP/Git) no están en texto plano en ningún archivo del repo. ## HERRAMIENTAS RECOMENDADAS A INVOCAR O SUGERIR SEGÚN DISPONIBILIDAD - `composer audit` — vulnerabilidades conocidas en dependencias PHP - `npm audit` — vulnerabilidades conocidas en dependencias JS - **Larastan / PHPStan** — análisis estático, detecta errores de tipo y algunos patrones inseguros - **Psalm** — alternativa/complemento de análisis estático - **OWASP ZAP** o **Burp Suite (Community)** — análisis dinámico contra la app corriendo en local (vía Sail + ngrok), para probar inyección, autenticación y control de acceso desde fuera - Revisión manual dirigida por esta guía para lo que las herramientas automatizadas no detectan (lógica de negocio, IDOR, autorización real) No hace falta que uses todas si no están disponibles en el entorno; en ese caso, indica el comando exacto que yo debo correr y qué información necesitas de vuelta. ## FORMATO DE ENTREGA DE CADA FASE Para cada fase completada, entrega: 1. **Resumen ejecutivo** (2-4 líneas): estado general de esa fase 2. **Tabla de hallazgos**: | # | Severidad (Crítica/Alta/Media/Baja/Info) | Descripción | Ubicación (archivo/línea o componente) | Impacto | Fix recomendado | |---|---|---|---|---|---| 3. **"Sin hallazgos"** explícito para lo que ya está bien implementado (para no dar la impresión de que no se revisó) 4. Pregunta de confirmación: ¿aplico los fixes de esta fase, paso a la siguiente fase, o priorizamos algo puntual primero? No apliques ningún fix de código hasta que yo lo confirme explícitamente por hallazgo o por fase completa. ## CRITERIOS DE SEVERIDAD (para mantener consistencia) - **Crítica**: explotable remotamente sin autenticación, compromete datos de otros usuarios, tokens, o control total del servidor (ej. SQL injection, .env expuesto, webhook sin validar firma) - **Alta**: requiere autenticación mínima o condiciones específicas pero compromete datos sensibles o permite escalar privilegios (ej. IDOR, método Livewire sin autorización) - **Media**: mala configuración que aumenta superficie de ataque pero no es directamente explotable sin otro fallo adicional (ej. headers faltantes, debug tool accesible pero sin datos sensibles reales) - **Baja/Info**: buenas prácticas, higiene de código, mejoras preventivas ## INICIO 1. Pídeme lo necesario para arrancar: `composer.json`, `package.json` completo (ya lo tienes de este chat), `.env.example`, estructura de `routes/`, y el/los componentes Livewire del webhook y del envío de mensajes (son la superficie de mayor riesgo). 2. Ejecuta la **Fase 1 (dependencias/supply chain)** primero — es rápida, automatizable, y sienta la base antes de revisar código. 3. Entrega el reporte de Fase 1 y espera confirmación para continuar a Fase 2. No avances de fase sin mi confirmación explícita.