Portal interno del Club de Ciberseguridad. Deliberadamente vulnerable. Tu misión: identificar y remediar las 6 vulnerabilidades clasificadas bajo STRIDE en 1:30 horas.
- Individual. Clonas este repo, arreglas las vulnerabilidades en tu copia local.
- 1:30 horas desde el banderazo.
- Gana quien primero tenga los 6 tests de
npm testen verde. - Validación: al terminar, levanta la mano y muestra al profesor/TA la salida de
npm test. No hay defensa oral. - No edites los archivos en
tests/security/— hay un test meta que detecta modificaciones. - Entregable paralelo: llenar
docs/STRIDE.mdcon el mapeo vuln → letra STRIDE → control NIST 800-53 → commit que la arregló.
Antes de atacar V1..V6, lee docs/WALKTHROUGH.md. Es una vuln extra (V0) resuelta paso a paso que te muestra el loop completo: detectar → clasificar con STRIDE → mapear a NIST → implementar fix → validar → documentar. Los 8 pasos de V0 son los mismos que vas a repetir para las 6 vulns del reto.
git clone <este-repo> hack-the-campus
cd hack-the-campus
npm install
npm start # arranca en http://localhost:3000Si
npm installfalla compilandobetter-sqlite3: necesitas toolchain nativo.
- macOS:
xcode-select --install- Linux (Debian/Ubuntu):
sudo apt install build-essential python3- Windows:
npm install --global windows-build-tools(PowerShell admin) o Visual Studio con "Desktop development with C++".Luego
rm -rf node_modules && npm install.
Cuentas de prueba: neo/matrix · trinity/zion · admin/admin123
Corre los tests para ver el baseline rojo:
npm testDeberías ver 7 bloques de tests fallando (V0 + V1..V6). Cada uno corresponde a una vulnerabilidad STRIDE.
Si
npm testparece colgarse sin salida: es síntoma de V5 (ReDoS). La regex catastrófica no es interrumpible por Jest. Workaround mientras lo arreglas:npm test -- --testPathIgnorePatterns=V5Una vez hayas aplicado el fix de V5, corre
npm testcompleto para cerrar.
Así como MobSF escanea apps móviles, para web usamos tres herramientas complementarias. Revisa docs/GUIA_HERRAMIENTAS.md para comandos y tips.
| Herramienta | Tipo | Qué detecta en este repo |
|---|---|---|
| OWASP ZAP | DAST (caja negra) | Headers faltantes, stack traces, cookies inseguras |
| Semgrep | SAST (análisis de código) | SQLi, secretos hardcodeados, regex peligrosas |
| npm audit | SCA (dependencias) | Paquete vulnerable en package.json |
npm run scan:audit # dependencias
npm run scan:semgrep # código (requiere Docker)
npm run scan:zap # app corriendo (requiere Docker + npm start en otra terminal)Para competir alcanza con correr al menos 1 de los 3. Los 3 son ideales pedagógicamente, pero si el tiempo aprieta prioriza:
npm audit(10s) > Semgrep (1 min) > ZAP (2-3 min).
Cada letra de STRIDE tiene una vulnerabilidad plantada. Los tests son la especificación del fix.
| Test | STRIDE | Hint |
|---|---|---|
V0_walkthrough.test.js |
Tampering (XSS) | ruta /status · ejemplo resuelto en docs/WALKTHROUGH.md |
V1_spoofing.test.js |
Spoofing | login, cookies, rate limit |
V2_tampering.test.js |
Tampering | búsqueda del foro |
V3_repudiation.test.js |
Repudiation | tabla audit |
V4_disclosure.test.js |
Information Disclosure | descarga de archivos |
V5_dos.test.js |
Denial of Service | upload + validador de email |
V6_elevation.test.js |
Elevation of Privilege | rutas /admin |
V0 cuenta igual que las otras para tener los tests en verde, pero viene con guía completa — úsala para calibrar.
docs/WALKTHROUGH.md— V0 resuelta paso a paso (empieza aquí).docs/DFD.md— Diagrama de flujo de datos con límites de confianza.docs/STRIDE.md— Plantilla a llenar (entregable paralelo).docs/GUIA_HERRAMIENTAS.md— Comandos de ZAP/Semgrep/npm audit.
Node.js 20+ · Express · EJS · better-sqlite3 (in-memory) · Arquitectura MVC + servicios.
Follow the white rabbit.