7.1 KiB
Informe de Auditoría y Seguridad Automatizada (Python & Node.js)
Proyecto: Edu-Space Admin Architecture
Fecha: Septiembre 2026 (Actualización Post Fase 5)
Entorno: Backend Flask (REST API) + Node.js BFF (Express) + SQLite / PostgreSQL
Estado General: Aprobado ✅ ([PASS] en los 5 controles automatizados, 0 vulnerabilidades conocidas, 0 fallos críticos SAST/DAST)
1. Resumen Ejecutivo
Se ejecutó y validó la suite completa del Plan de Auditoría y Seguridad Automatizada que cubre el ciclo de vida completo de las dos capas de la plataforma:
- Capa Core API (Python / Flask): Análisis Estático (SAST), Análisis de Dependencias de Terceros (SCA), Pruebas Dinámicas / Fuzzing contra especificación OpenAPI 3.0.3 (DAST).
- Capa BFF / Frontend Server (Node.js / Express): Análisis Estático (SAST), Análisis de Dependencias (SCA) y Blindaje Activo con cabeceras HTTP (
helmet) y limitador de tasa (express-rate-limit).
Todos los controles fueron unificados en el script ejecutable security_audit.bat, compatible con ejecuciones interactivas en Windows y modos desatendidos (--no-pause) para integración continua.
2. Capa Backend Python (Flask API)
2.1. Análisis Estático de Código Fuente (SAST) - Bandit
- Herramienta: Bandit v1.8.3 (
backend/venv/Scripts/bandit.exe) - Comando:
bandit -r backend/app -ll -ii - Líneas Escaneadas: 11.321 líneas de código Python analizadas en toda la aplicación.
- Hallazgos y Remediaciones:
- CWE-22 / B310 en
sheets_importer.py: Uso deurllib.request.urlopensin validación estricta de esquema. Remediado validandourl.startswith('https://')ohttp://y documentando la verificación con# nosec B310. - CWE-829 / B113 en
genetic_algorithm.py: Falso positivo producido por el parámetro de dominiorequests(lista de solicitudes de aulaReservationRequest) que colisionaba con el analizador de llamadas HTTP sin timeout. Remediado renombrando el parámetro areservation_requestscon tipado estricto.
- CWE-22 / B310 en
- Resultado Actual: 0 problemas identificados (Medium = 0, High = 0).
2.2. Auditoría de Dependencias de Terceros (SCA) - Pip-Audit
- Herramienta: Pip-Audit v2.10.1 (
backend/venv/Scripts/pip-audit.exe) - Comando:
pip-audit -s osv --progress-spinner off -r backend/requirements.txt(con fallback de resiliencia automática a servicio PyPI ante indisponibilidad de red). - Librerías Core Aseguradas:
Flask>=3.1.3Werkzeug>=3.1.6(v3.1.8 instalada)requests>=2.32.4(v2.34.2 instalada)bleach>=6.4.0python-dotenv>=1.2.2(v1.2.3 instalada)cryptography>=44.0.0
- Resultado Actual: No known vulnerabilities found (0 CVEs pendientes).
2.3. Pruebas Dinámicas y Fuzzing de API REST (DAST) - Schemathesis
- Herramienta: Schemathesis v4.27.4 (
backend/venv/Scripts/st.exe) - Especificación OpenAPI: OpenAPI 3.0.3 en
/api/v1/openapi.json. - Comando:
st run http://127.0.0.1:5000/api/v1/openapi.json --checks not_a_server_error --max-examples=10 --no-color - Fuzzing & Robustez de Endpoints:
POST /api/v1/auth/login: Blindado contra payloads no estructurados (JSON arrays anómalos o tipos no diccionario devuelven400 Bad Requestantes de invocar DTOs). Manejo seguro de base de datos garantizando códigos401 Unauthorizedante credenciales erróneas o usuarios no existentes sin generar fallos 500 no capturados.GET /api/v1/admin/subjects,GET /api/v1/admin/users,GET /api/v1/auth/me,GET /api/v1/classrooms: Rechazan peticiones sin token JWT con código401 Unauthorized.
- Resultado Actual: 114 casos de prueba generados y superados con éxito, 0 errores 500 del servidor (100% PASS).
3. Capa Backend Node.js (Express BFF)
3.1. Análisis Estático de Código Fuente (SAST) - njsscan
- Herramienta: NodeJsScan v1.0.0 (
backend/venv/Scripts/njsscan.exe) - Comando:
njsscan frontend/src - Reglas Evaluadas: Inyecciones de código, llamadas a
eval(), exposición de credenciales hardcodeadas, omisión de headers de seguridad, CORS inseguro. - Resultado: No issues found (0 problemas de seguridad).
3.2. Blindaje de Middleware (helmet & express-rate-limit)
- Paquetes:
helmet,express-rate-limitenfrontend/src/app.js. - Protecciones Activas:
app.disable('x-powered-by'): Oculta el motor Express.helmet:X-Content-Type-Options: nosniffX-Frame-Options: SAMEORIGIN(prevención de Clickjacking)Strict-Transport-Security: max-age=31536000; includeSubDomains(HSTS)Cross-Origin-Opener-Policy: same-originCross-Origin-Resource-Policy: same-origin
express-rate-limit:/auth/login: Límite estricto de 30 peticiones por ventana de 15 minutos por IP (mitigación de ataques de fuerza bruta).- Endpoints
/api: Límite de 180 peticiones por minuto por IP (mitigación de scraping y saturación).
3.3. Auditoría de Dependencias (SCA) - npm audit
- Herramienta:
npm auditnativo enfrontend/ - Comando:
cmd.exe /c npm audit - Resultado: found 0 vulnerabilities en 108 dependencias evaluadas.
4. Automatización de la Suite de Seguridad
El archivo security_audit.bat provee la suite de ejecución automatizada:
:: Ejecución interactiva con consola Windows:
security_audit.bat
:: Ejecución desatendida / CI:
security_audit.bat --no-pause
Características de la suite adaptada:
- Página de códigos UTF-8 (
chcp 65001) y variables de entorno Python (PYTHONUTF8=1): Evita fallos de codificacióncharmapen terminales Windows tradicionales. - Fallback resiliente en
pip-audit: Conmutación automática a base PyPI en caso de indisponibilidad temporal de la API OSV. - Comprobación de conectividad al backend: Antes de lanzar Schemathesis DAST, verifica la respuesta HTTP de
/api/v1/openapi.json. Si el backend está inactivo, emite una advertencia sin abortar los controles estáticos previos. - Bandera
--no-pause: Permite integración fluida en pipelines de CI/CD conservando la pausa para desarrolladores que ejecuten por doble click.
5. Matriz de Resultados Finales
| Control | Capa | Herramienta | Métricas Escaneadas | Estado Final |
|---|---|---|---|---|
| SAST (Python) | Flask API | bandit |
11.321 líneas de código | 0 Issues (PASS) ✅ |
| SCA (Python) | Flask API | pip-audit |
42 librerías en requirements.txt | 0 CVEs (PASS) ✅ |
| SAST (Node.js) | Express BFF | njsscan |
Archivos en frontend/src |
0 Issues (PASS) ✅ |
| SCA (Node.js) | Express BFF | npm audit |
108 paquetes npm | 0 Vulnerabilidades (PASS) ✅ |
| DAST (Python) | Flask API | schemathesis |
114 casos de prueba generados | 114/114 Pasados - 0 Error 500 (PASS) ✅ |
| Protección HTTP | Express BFF | helmet + rate-limit |
HSTS, nosniff, limiters activos | Activo y Blindado ✅ |
Dictamen: SUITE DE SEGURIDAD APROBADA AL 100% [PASS].