# Reporte para desarrollo: hallazgos del PenTest local

Este reporte resume los hallazgos detectados por el runner Docker de PenTest ejecutado contra el ambiente local `http://localhost:8888/sasis/mgmt`. El objetivo es que el equipo de desarrollo planifique la remediación, valide falsos positivos y priorice los cambios.

## Resumen ejecutivo

| Área | Estado | Prioridad | Acción esperada |
|---|---:|---:|---|
| Secretos en código | 23 posibles leaks detectados | Alta | Validar, rotar credenciales reales y mover secretos a configuración segura |
| Headers HTTP de seguridad | Varios headers faltantes | Media | Agregar hardening en Apache/app |
| Cookies/sesión | Cookies sin flags recomendados | Media | Revisar `HttpOnly`, `Secure` y `SameSite` |
| Dependencias Composer | Sin HIGH/CRITICAL; 1 advisory low ignorado | Baja/Media | Documentar compatibilidad y plan de actualización |
| Paquetes abandonados | 5 paquetes abandonados en `mgmt` | Media | Evaluar reemplazo o mitigación |
| Rutas expuestas | `/vendor` responde 403, `/api` responde 401 | Media | Confirmar que no sirvan archivos sensibles |
| Pruebas autenticadas | No ejecutadas | Pendiente | Definir usuario de prueba y flujo de login |

## Evidencia generada

Los reportes técnicos quedaron en:

```text
pruebas/security/pentest/
```

Archivos principales:

```text
02-composer-audit-api.md
03-composer-audit-mgmt.md
04-trivy-fs.md
05-gitleaks.md
07-zap-baseline.md
10-nikto-basic.md
11-ffuf-discovery.md
14-resumen-ejecutivo.md
```

## Hallazgos y plan de tratamiento

### 1. Posibles secretos en código

**Herramienta:** Gitleaks  
**Evidencia:** `pruebas/security/pentest/05-gitleaks.md`  
**Resultado:** 23 posibles leaks.

Archivos relevantes detectados:

```text
api/classes/conexion/config_qs
api/classes/conexion/config_hgbox_master
api/classes/hospitalizacion.class.php
api/classes/notasMedicas.class.php
api/enviaMail.php
api/util.php
mgmt/src/ReCaptcha.php
mgmt/src/config.php
mgmt/views/layout.php
```

También aparecen hallazgos en `vendor` y documentación; esos deben revisarse como posibles falsos positivos antes de tratarlos.

#### Riesgo

Si las credenciales detectadas son reales, pueden permitir acceso a servicios externos, envío de correo, APIs, mapas, push notifications o cifrado interno.

#### Tratamiento recomendado

- [ ] Clasificar cada hallazgo como real o falso positivo.
- [ ] Rotar inmediatamente cualquier credencial real expuesta.
- [ ] Mover secretos a variables de entorno o mecanismo de configuración seguro.
- [ ] Evitar commitear archivos con claves reales.
- [ ] Documentar qué secretos fueron rotados y cuándo.

#### Prioridad

Alta.

---

### 2. Headers HTTP de seguridad faltantes

**Herramientas:** OWASP ZAP y Nikto  
**Evidencia:**

```text
pruebas/security/pentest/07-zap-baseline.md
pruebas/security/pentest/10-nikto-basic.md
```

Headers faltantes o débiles detectados:

```text
Content-Security-Policy
X-Content-Type-Options
Referrer-Policy
Permissions-Policy
Strict-Transport-Security
Anti-clickjacking / frame protection
```

ZAP reportó:

```text
FAIL-NEW: 0
WARN-NEW: 17
PASS: 50
```

#### Riesgo

Incrementa exposición a clickjacking, carga de contenido no deseado, fuga de información por referers y abuso de capacidades del navegador.

#### Tratamiento recomendado

- [ ] Agregar `X-Content-Type-Options: nosniff`.
- [ ] Agregar `Referrer-Policy`.
- [ ] Agregar `Permissions-Policy`.
- [ ] Agregar política anti-clickjacking: `X-Frame-Options` o `Content-Security-Policy: frame-ancestors`.
- [ ] Diseñar una `Content-Security-Policy` compatible con PHPMaker y librerías actuales.
- [ ] Usar `Strict-Transport-Security` solo en ambientes HTTPS.

#### Prioridad

Media.

---

### 3. Exposición de versión de servidor y PHP

**Herramientas:** OWASP ZAP y Nikto  
**Evidencia:**

```text
pruebas/security/pentest/07-zap-baseline.md
pruebas/security/pentest/10-nikto-basic.md
```

Nikto detectó:

```text
Apache/2.4.66 (Debian)
PHP/8.2.30 expuesto por X-Powered-By
```

#### Riesgo

Facilita fingerprinting del stack tecnológico. No es crítico por sí solo, pero ayuda a un atacante a elegir exploits o vectores específicos.

#### Tratamiento recomendado

- [ ] Desactivar `expose_php` en PHP.
- [ ] Ocultar o reducir información del header `Server` en Apache si el entorno lo permite.
- [ ] Validar cambios en Docker/local y staging.

#### Prioridad

Baja/Media.

---

### 4. Cookies y sesión

**Herramienta:** OWASP ZAP  
**Evidencia:** `pruebas/security/pentest/07-zap-baseline.md`

ZAP reportó:

```text
Cookie No HttpOnly Flag
Cookie with SameSite Attribute None
Session Management Response Identified
```

#### Riesgo

Cookies sin flags correctos pueden aumentar impacto ante XSS, CSRF o tráfico no protegido.

#### Tratamiento recomendado

- [ ] Revisar cookies generadas por PHPMaker y por código custom.
- [ ] Configurar `HttpOnly` para cookies de sesión.
- [ ] Configurar `Secure` cuando el ambiente use HTTPS.
- [ ] Revisar si `SameSite=None` es realmente necesario.
- [ ] Si no es necesario, preferir `SameSite=Lax` o `Strict` según flujo funcional.

#### Prioridad

Media.

---

### 5. Dependencias Composer

**Herramientas:** Composer audit y Trivy  
**Evidencia:**

```text
pruebas/security/pentest/02-composer-audit-api.md
pruebas/security/pentest/03-composer-audit-mgmt.md
pruebas/security/pentest/04-trivy-fs.md
```

Trivy reportó 0 vulnerabilidades HIGH/CRITICAL en:

```text
api/composer.lock
mgmt/composer.lock
mgmt/libreria/mPDF/composer.lock
```

Composer audit reportó un advisory ignorado:

```text
Package: firebase/php-jwt
CVE: CVE-2025-45769
Severity: low
Affected versions: <7.0.0
```

En `mgmt` también se detectaron paquetes abandonados:

```text
doctrine/cache
web-token/jwt-key-mgmt
web-token/jwt-signature
web-token/jwt-signature-algorithm-ecdsa
web-token/jwt-util-ecc
```

#### Riesgo

Actualmente no hay vulnerabilidades HIGH/CRITICAL reportadas por Trivy, pero los paquetes abandonados pueden convertirse en deuda técnica de seguridad.

#### Tratamiento recomendado

- [ ] Mantener documentado por qué `firebase/php-jwt` sigue en versión `<7.0.0` si hay compatibilidad pendiente.
- [ ] Evaluar upgrade de `firebase/php-jwt` solo con pruebas funcionales de login/API.
- [ ] Revisar reemplazos para paquetes abandonados.
- [ ] No actualizar masivamente vendor sin pruebas, porque ya hubo antecedentes de roturas por cambios amplios.

#### Prioridad

Baja/Media.

---

### 6. Rutas detectadas por discovery básico

**Herramienta:** Discovery básico con curl Docker  
**Evidencia:** `pruebas/security/pentest/11-ffuf-discovery.md`

Rutas detectadas:

```text
/sasis/mgmt/vendor -> 403
/sasis/mgmt/api    -> 401
```

#### Riesgo

Las respuestas no indican exposición abierta, pero se debe validar que no existan archivos descargables dentro de `vendor` ni endpoints API accesibles sin permisos.

#### Tratamiento recomendado

- [ ] Confirmar que `/vendor` no permita listar ni descargar archivos sensibles.
- [ ] Confirmar que `/api` exige autenticación/autorización correcta.
- [ ] Probar acceso directo a endpoints conocidos con usuario no autenticado.
- [ ] Revisar reglas de Apache/Nginx para bloquear carpetas internas.

#### Prioridad

Media.

---

## Pruebas no ejecutadas o incompletas

### Semgrep

Quedó bloqueado por defecto porque el escaneo sobre código PHPMaker generado puede tardar demasiado.

Para ejecutarlo explícitamente:

```bash
RUN_SEMGREP=1 ./pruebas/security/run_pentest_tests.sh
```

Recomendación: correrlo acotado por carpetas custom, no sobre todo el proyecto.

### ZAP autenticado

No se ejecutó porque requiere:

- usuario de prueba;
- contraseña de prueba;
- definición de rol;
- flujo de login;
- manejo seguro de sesión.

### SQLMap

No se ejecutó por seguridad. Requiere endpoint concreto autorizado.

### testssl.sh

No aplica al target local porque usa HTTP, no HTTPS.

### Nuclei

La prueba quedó incompleta por timeout. Cargó más de 1000 templates y no terminó dentro del límite configurado.

Recomendación: acotarlo por templates específicos si se quiere usar para evidencia final.

## Priorización sugerida

| Orden | Acción | Responsable sugerido |
|---:|---|---|
| 1 | Validar y rotar secretos reales detectados por Gitleaks | Backend/DevOps |
| 2 | Agregar headers de seguridad base | Backend/DevOps |
| 3 | Revisar configuración de cookies/sesión | Backend |
| 4 | Confirmar bloqueo de `/vendor` y protección de `/api` | Backend/DevOps |
| 5 | Documentar plan para paquetes abandonados | Backend |
| 6 | Preparar ZAP autenticado con usuario de prueba | QA/Backend |
| 7 | Definir endpoints autorizados para SQLMap | Backend/Seguridad |

## Criterio de cierre

Para considerar tratado este bloque de hallazgos:

- [ ] No quedan secretos reales hardcodeados en código versionado.
- [ ] Las credenciales reales expuestas fueron rotadas.
- [ ] ZAP deja de reportar headers críticos faltantes en login y home.
- [ ] Cookies de sesión tienen flags adecuados para el ambiente.
- [ ] `/vendor` y `/api` están validados manualmente.
- [ ] Existe plan documentado para dependencias abandonadas.
- [ ] Se ejecuta una segunda corrida y se adjunta evidencia actualizada.

## Nota para el equipo

Estos hallazgos son de una corrida local no autenticada. No reemplazan un PenTest completo autenticado por roles. La siguiente fase debería enfocarse en permisos, IDOR, CSRF, carga de archivos, exportaciones y endpoints API con usuarios de prueba.
