<aside> 📋

Delivery 1 — Tarea 3 | Proyecto: vulnerable-node (PsEA v1.0) | Fecha: 2026-02-08 | Método: Reverse Engineering de controladores y servicios

</aside>


1. Metodología de Extracción

Cada User Story fue extraída mediante análisis exhaustivo de:

  1. Route handlers (routes/login.js, routes/products.js) — punto de entrada HTTP
  2. Model functions (model/auth.js, model/products.js) — capa de datos
  3. Views (views/*.ejs) — capa de presentación
  4. Expected Issues CSV (scanner/sast/expectedIssues.csv) — referencia autoritativa de CWEs

Formato: "Como [rol], quiero [acción], para [beneficio]"

Path de Trazabilidad: Route → Controller:líneas → Model function:línea → SQL pattern → DB Table → View template → CWE mapping


2. User Stories Funcionales (8)

US-01: Login Form Display

<aside> 🔐

Como visitante, quiero ver un formulario de login para poder autenticarme en la aplicación.

</aside>

Atributo Valor
Endpoint GET /login
Controller routes/login.js:10-15
Model
DB Table
View views/login.ejs
Bounded Context BC1: Identity & Access
Vulnerabilidades CWE-79 (XSS: <%-returnurl%> sin escapar)

US-02: Credential Authentication

<aside> 🔐

Como visitante, quiero enviar mis credenciales para acceder al catálogo de productos.

</aside>

Atributo Valor
Endpoint POST /login/auth
Controller routes/login.js:19-42
Model model/auth.js:do_auth() — línea 7
SQL Pattern SELECT * FROM users WHERE name='$input' AND password='$input'
DB Table users
View Redirect a returnurl o /
Bounded Context BC1: Identity & Access
Vulnerabilidades CWE-89 (SQL Injection auth.js:7), CWE-601 (Open Redirect login.js:36)