Files
mercadodevida/work/artifacts/F-048/security.json
2026-08-19 07:17:14 +02:00

43 lines
2.0 KiB
JSON

{
"feature_id": "F-048",
"verdict": "APPROVED",
"agent": "security",
"timestamp": "2026-08-19T05:13:30Z",
"checks": {
"dependency_audit": {
"pass": true,
"notes": "npm audit --omit=dev --audit-level=high reporta 0 vulnerabilidades en backend, admin, frontend y storefront."
},
"secret_scan": {
"pass": true,
"notes": "No se detectaron claves privadas, AWS access keys ni Stripe live keys en archivos de proyecto o diff."
},
"sql_injection": {
"pass": true,
"notes": "Las consultas nuevas parametrizan valores; los fragmentos dinámicos revisados proceden de listas de columnas/condiciones controladas por código."
},
"backoffice_auth": {
"pass": true,
"notes": "Sesiones independientes con token aleatorio hasheado, expiración/revocación server-side, cookie HttpOnly/SameSite y repositorios parametrizados."
},
"upload_security": {
"pass": true,
"notes": "Hallazgo inicial remediado: /api/upload exige sesión backoffice validada, limita tamaño, valida MIME+magic bytes, deriva extensión, usa UUID/flag wx; serving bloquea traversal y añade nosniff."
},
"error_handling": {
"pass": true,
"notes": "El envelope no expone stacks; validaciones Fastify se normalizan y errores internos sólo se registran server-side."
},
"ticket_lifecycle": {
"pass": true,
"notes": "Los comandos de normalización/start sólo operan sobre el backlog local, validan estado permitido y bloquean múltiples features in_progress."
},
"repository_hygiene": {
"pass": true,
"notes": "git diff --check verde y uploads runtime ignorados."
}
},
"residual_risk": "Los usuarios backoffice autenticados pueden subir múltiples imágenes de hasta 10MB; no existe cuota agregada por usuario. Riesgo aceptable para el alcance admin actual, recomendable añadir quota/rate-limit en una feature futura.",
"notes": "Security gate aprobado después de remediar el único hallazgo bloqueante."
}